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 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
|
#! /bin/bash -e
#####################################################################
# #
# Compiles Faust programs to JACK-GTK #
# (c) Grame, 2009-2019 #
# #
#####################################################################
. faustpath
. faustoptflags
. usage.sh
CXXFLAGS+=" $MYGCCFLAGS -I/opt/local/include" # So that additional CXXFLAGS can be used
ARCHFILE=$FAUSTARCH/jack-gtk.cpp
OSCDEFS=""
POLY="POLY"
NVOICES=-1
SOUNDFILE="0"
SOUNDFILEDEFS=""
SOUNDFILELIBS=""
PRESETDIR="auto"
PRESETDEFS=""
if [[ $(uname -s) != Darwin ]]; then
LFLAGS+="-no-pie"
fi
#-------------------------------------------------------------------
# Check Darwin specifics
#
if [[ $(uname) == Darwin ]]; then
ARCHLIB+=" -framework CoreMIDI -framework CoreFoundation -framework CoreAudio -framework AudioUnit -framework CoreServices"
else
ARCHLIB+=" `pkg-config --cflags --libs alsa`"
fi
echoHelp()
{
usage faust2jack "[options] [Faust options] <file.dsp>"
platform Linux
require Jack
echo "Compiles Faust programs to JACK and GTK"
option
options -httpd -osc -midi -soundfile -dyn
option -resample "to resample soundfiles to the audio driver sample rate."
option "-nvoices <num>"
option "-effect <effect.dsp>"
option "-effect auto"
option "-preset <directory>" "add a preset manager on top of GUI and save the preset files in the given directory"
option "-preset auto" "add a preset manager on top of GUI and save the preset files in a system temporary directory"
option "Faust options"
exit
}
if [ "$#" -eq 0 ]; then
echo 'Please, provide a Faust file to process !'
echo ''
echoHelp
fi
#PHASE 2 : dispatch command arguments
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 = "-midi" ]; then
MIDIDEFS="-DMIDICTRL"
elif [ $p = "-dyn" ]; then
OPTIONS="$OPTIONS -inj template-llvm.cpp"
LLVM_LIBS="$STRIP $FAUSTLDDIR/libfaust.a `llvm-config --link-static --ldflags --libs all --system-libs`"
elif [ $p = "-soundfile" ]; then
SOUNDFILE="1"
SOUNDFILEDEFS="-DSOUNDFILE"
SOUNDFILELIBS=`pkg-config --cflags --static --libs sndfile`
elif [ $p = "-resample" ]; then
SAMPLERATEDEFS="-DSAMPLERATE"
SAMPLERATELIBS=`pkg-config --cflags --static --libs samplerate`
elif [ $p = "-fx" ]; then
OPTIONS="$OPTIONS $p"
CXXFLAGS="$CXXFLAGS -I /usr/local/include/ap_fixed -DFIXED_POINT"
elif [ $p = "-osc" ]; then
OSCDEFS="-DOSCCTRL -lOSCFaust"
elif [ $p = "-httpd" ]; then
HTTPDEFS="-DHTTPCTRL -lHTTPDFaust"
HTTPLIBS=`pkg-config --cflags --libs libmicrohttpd`
elif [ "$p" = "-preset" ]; then
PRESETDEFS="-DPRESETUI"
shift
PRESETDIR=$1
elif [ $p = "-ocv" ]; then
OCVDEFS="-DOCVCTRL -pthread"
OCVLIBS="opencv"
elif [ $p = "-arch32" ]; then
PROCARCH="-m32 -L/usr/lib32"
elif [ $p = "-arch64" ]; then
PROCARCH="-m64"
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 using JACK-GTK
#
for f in $FILES; do
# compile faust to c++
if [ $POLY = "POLY2" ]; then
if [ $EFFECT = "auto" ]; then
cat > 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("$f").process, library("$f").effect) : library("$f").effect;
EndOfCode
faust -i -json -a $ARCHFILE $OPTIONS "$f" -o "${f%.dsp}_tmp.cpp" || exit
faust -i -cn effect -a minimal-effect.cpp effect.dsp -o effect.h || exit
rm effect.dsp
else
faust -i -json -a $ARCHFILE $OPTIONS "$f" -o "${f%.dsp}_tmp.cpp" || exit
faust -i -cn effect -a minimal-effect.cpp "$EFFECT" -o "effect.h" || exit
fi
else
faust -i -a $ARCHFILE $OPTIONS "$f" -o "${f%.dsp}_tmp.cpp"|| exit
fi
# add preset management
if [ $PRESETDIR = "auto" ]; then
PRESETFILE=`mktemp -t preset.XXXXXXXXXX.cpp` || exit 1
echo "#define PRESETDIR \"/var/tmp/\"" > "$PRESETFILE"
else
PRESETFILE=`mktemp -t preset.XXXXXXXXXX.cpp` || exit 1
echo "#define PRESETDIR \"$PRESETDIR\"" > "$PRESETFILE"
fi
cat "$PRESETFILE" "${f%.dsp}_tmp.cpp" > "${f%.dsp}.cpp"
rm "$PRESETFILE" "${f%.dsp}_tmp.cpp"
# compile c++ to binary
(
$CXX $CXXFLAGS $FAUSTTOOLSFLAGS "${f%.dsp}.cpp" `pkg-config --cflags --libs jack $OCVLIBS gtk+-2.0` $LLVM_LIBS $SOUNDFILELIBS $SAMPLERATELIBS $PROCARCH $OSCDEFS $HTTPDEFS $HTTPLIBS $OCVDEFS $MIDIDEFS $POLYDEFS $SOUNDFILEDEFS $SAMPLERATEDEFS $PRESETDEFS $ARCHLIB $LFLAGS -o "${f%.dsp}"
if [[ $(uname) == Darwin ]]; then
codesign --sign - --deep --force "${f%.dsp}"
fi
) > /dev/null || exit
# remove temporary files
rm -f "${f%.dsp}.cpp" effect.h "$f.json"
# collect binary file name for FaustWorks
BINARIES="$BINARIES${f%.dsp};"
done
echo $BINARIES
|