X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/c7f552fd8888da2f0d8cfb228fe0f28d3df3a12c..b4b6f2ea75b9f0f3ca918f5b84016610bf7a4d4f:/interpretor/preprocessor/faust-0.9.47mr3/tools/faust2appls/faust2msp diff --git a/interpretor/preprocessor/faust-0.9.47mr3/tools/faust2appls/faust2msp b/interpretor/preprocessor/faust-0.9.47mr3/tools/faust2appls/faust2msp new file mode 100755 index 0000000..a35787b --- /dev/null +++ b/interpretor/preprocessor/faust-0.9.47mr3/tools/faust2appls/faust2msp @@ -0,0 +1,126 @@ +#!/bin/bash + +##################################################################### +# # +# Compiles Faust programs to Max/MSP # +# (c) Grame, 2010 # +# # +##################################################################### + +createInfoPList() { + ( + echo '' + echo '' + echo '' + echo '' + echo ' CFBundleExecutable' + echo " $1" + echo ' CFBundleName' + echo " $1" + echo ' CFBundlePackageType' + echo ' iLaX' + echo '' + echo '' + ) > "$2" +} + + +#------------------------------------------------------------------- +# Analyze command arguments : +# faust options -> OPTIONS +# if -omp : -openmp or -fopenmp -> OPENMP +# existing *.dsp files -> FILES +# + +# PHASE 1 : Look for -icc option to force use of intel icc (actually icpc) +# without having to configure CXX and CXXFLAGS +for p in $@; do + if [ "$p" = -icc ]; then + CXX=icpc + CXXFLAGS='-O3 -xT -ftz -fno-alias -fp-model fast=2' + fi +done + +#PHASE 2 : dispatch command arguments +for p in $@; do + if [ "$p" = -omp ]; then + if [[ $CXX == "icpc" ]]; then + OMP="-openmp" + else + OMP="-fopenmp" + fi + fi + + if [ "$p" = -icc ]; then + ignore=" " + elif [ ${p:0:1} = "-" ]; then + OPTIONS="$OPTIONS $p" + elif [[ -e "$p" ]]; then + FILES="$FILES $p" + else + OPTIONS="$OPTIONS $p" + fi +done + + + +#------------------------------------------------------------------- +# Check darwin specifics +# +if [[ $(uname) == Darwin ]]; then + SPEC="-spec macx-g++" + EXT="~.mxo" +fi + +#------------------------------------------------------------------- +# compile the *.dsp files +# +PATH=$PATH:/usr/local/bin + +for p in $FILES; do + + #INC=-I/usr/local/include/c74support/max-includes -I/usr/local/include/c74support/msp-includes + CC=g++ + + 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++ + faust -a max-msp.cpp $OPTIONS "$SRCDIR/$f" -o "$TMP/${f%.dsp}.cpp" + + # compile c++ to binary + ( + cd "$TMP" + install -d "${f%.dsp}$EXT/Contents/MacOS" + $CC -arch i386 -fpascal-strings -fasm-blocks -g -O3 -I/usr/local/lib/faust -I/usr/local/include/c74support/max-includes -I/usr/local/include/c74support/msp-includes -c "${f%.dsp}.cpp" -o "${f%.dsp}.i386.o" + $CC -framework MaxAPI -framework Carbon -framework MaxAudioAPI -arch i386 -Wl,-Y,1455 -bundle "${f%.dsp}.i386.o" -o "${f%.dsp}.i386~" + #$CC -arch ppc -fpascal-strings -fasm-blocks -g -O3 -I/usr/local/lib/faust -I/usr/local/include/c74support/max-includes -I/usr/local/include/c74support/msp-includes -c "${f%.dsp}.cpp" -o "${f%.dsp}.ppc.o" + #$CC -framework Carbon -framework MaxAPI -framework MaxAudioAPI -arch ppc -Wl,-Y,1455 -bundle "${f%.dsp}.ppc.o" -o "${f%.dsp}.ppc~" + createInfoPList "${f%.dsp}~" "${f%.dsp}$EXT/Contents/Info.plist" + #lipo -create "${f%.dsp}.i386~" "${f%.dsp}.ppc~" -output "${f%.dsp}$EXT/Contents/MacOS/${f%.dsp}~" + lipo -create "${f%.dsp}.i386~" -output "${f%.dsp}$EXT/Contents/MacOS/${f%.dsp}~" + + ) > /dev/null + + rm -rf "$SRCDIR/${f%.dsp}$EXT" + + # Keep .dsp and .cpp files in the plug-in + cp "$TMP/${f%.dsp}.cpp" "$TMP/${f%.dsp}$EXT" + cp "$SRCDIR/$f" "$TMP/${f%.dsp}$EXT" + + cp -r "$TMP/${f%.dsp}$EXT" "$SRCDIR/${f%.dsp}$EXT" + rm -rf "$TDR" + + # collect binary file name for FaustGIDE + BINARIES="$BINARIES$SRCDIR/${f%.dsp}$EXT;" +done + +echo $BINARIES + +