1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
#! /bin/bash -e
. faustpath
. faustoptflags
. usage.sh
CXXFLAGS+=" $MYGCCFLAGS" # So that additional CXXFLAGS can be used
ARCHFILE=$FAUSTARCH/netjack-console.cpp
NVOICES=-1
POLY="POLY"
EFFECT=""
echoHelp()
{
usage faust2netjackconsole "[options] [Faust options] <file.dsp>"
require Jack
echo "Compiles Faust programs to NetJack"
option
options -httpd -osc -midi
option "-nvoices <num>"
option "-effect <effect.dsp>"
option "-effect auto"
option "Faust options"
exit
}
if [ "$#" -eq 0 ]; then
echo 'Please, provide a Faust file to process !'
echo ''
echoHelp
fi
#-------------------------------------------------------------------
# Check Darwin specifics
#
if [[ $(uname) == Darwin ]]; then
ARCHLIB="-L/usr/local/lib -ljacknet -ljack -pthread -framework CoreMIDI -framework CoreFoundation -framework CoreAudio -framework AudioUnit -framework CoreServices"
else
ARCHLIB+="-L/usr/local/lib -ljacknet -ljack -pthread"
fi
#-------------------------------------------------------------------
# Analyze command arguments :
# faust options -> OPTIONS
# existing *.dsp files -> FILES
#
while [ $1 ]
do
p=$1
if [ $p = "-help" ] || [ $p = "-h" ]; then
echoHelp
elif [ $p = "-nvoices" ]; then
POLYDEFS="-DPOLY"
shift
NVOICES=$1
if [ $NVOICES -ge 0 ]; then
CXXFLAGS="$CXXFLAGS -DNVOICES=$NVOICES"
fi
elif [ $p = "-effect" ]; then
POLYDEFS="-DPOLY2"
POLY="POLY2"
shift
EFFECT=$1
elif [ $p = "-osc" ]; then
OSCDEFS="-DOSCCTRL -lOSCFaust"
elif [ $p = "-httpd" ]; then
HTTPDEFS="-DHTTPCTRL -lHTTPDFaust"
HTTPLIBS=`pkg-config --cflags --libs libmicrohttpd`
elif [ $p = "-midi" ]; then
MIDIDEFS="-DMIDICTRL"
elif [ ${p:0:1} = "-" ]; then
OPTIONS="$OPTIONS $p"
elif [[ -f "$p" ]] && [ ${p: -4} == ".dsp" ]; then
FILES="$FILES $p"
else
OPTIONS="$OPTIONS $p"
fi
shift
done
#-------------------------------------------------------------------
# compile the *.dsp files
#
for f in $FILES; do
CUR=$(pwd)
f=$(basename "$p")
SRCDIR=$(dirname "$p")
# creates a temporary dir
TDR=$(mktemp -d faust.XXX)
TMP="$TDR/${f%.dsp}"
mkdir "$TMP"
# compile faust to c++
if [ $POLY = "POLY2" ]; then
if [ $EFFECT = "auto" ]; then
cat > $TMP/effect.dsp << EndOfCode
adapt(1,1) = _;
adapt(2,2) = _,_;
adapt(1,2) = _ <: _,_;
adapt(2,1) = _,_ :> _;
adaptor(F,G) = adapt(outputs(F),inputs(G));
process = adaptor(library("$SRCDIR/$f").process, library("$SRCDIR/$f").effect) : library("$SRCDIR/$f").effect;
EndOfCode
faust -i -json -a $ARCHFILE $OPTIONS "$SRCDIR/$f" -o "$TMP/${f%.dsp}.cpp" || exit
faust -i -cn effect -a minimal-effect.cpp "$TMP/effect.dsp" -o "$TMP/effect.h" || exit
rm "$TMP/effect.dsp"
else
faust -i -json -a $ARCHFILE $OPTIONS "$SRCDIR/$f" -o "$TMP/${f%.dsp}.cpp" || exit
faust -i -cn effect -a minimal-effect.cpp "$SRCDIR/$EFFECT" -o "$TMP/effect.h" || exit
fi
else
faust -i -json -a $ARCHFILE $OPTIONS "$SRCDIR/$f" -o "$TMP/${f%.dsp}.cpp" || exit
fi
# compile c++ to binary
$CXX $CXXFLAGS "$TMP/${f%.dsp}.cpp" $FAUSTTOOLSFLAGS $ARCHLIB $OSCDEFS $HTTPDEFS $HTTPLIBS $MIDIDEFS $POLYDEFS -o "${f%.dsp}" || exit
if [[ $(uname) == Darwin ]]; then
codesign --sign - --deep --force "${f%.dsp}"
fi
rm -rf "$TDR"
# collect binary file name for FaustGIDE
BINARIES="$BINARIES${f%.dsp}$EXT;"
done
echo $BINARIES
|