X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/1059e1cc0c2ecfa237406949aa26155b6a5b9154..66f23d4fabf89ad09adbd4dfc15ac6b5b2b7da83:/interpreter/preprocessor/faust-0.9.47mr3/tools/faust2appls/faust2supercollider diff --git a/interpreter/preprocessor/faust-0.9.47mr3/tools/faust2appls/faust2supercollider b/interpreter/preprocessor/faust-0.9.47mr3/tools/faust2appls/faust2supercollider new file mode 100755 index 0000000..5360d46 --- /dev/null +++ b/interpreter/preprocessor/faust-0.9.47mr3/tools/faust2appls/faust2supercollider @@ -0,0 +1,166 @@ +#!/bin/bash + +##################################################################### +# # +# Compiles Faust programs to supercollider # +# (c) Grame, 2010 # +# # +##################################################################### + +#------------------------------------------------------------------- +# Supercollider headers : path to the folder containing : +# plugin_interface/, common/ and server/ headers + +# Possible path + +SC0=$SUPERCOLLIDER_HEADERS +SC1="/usr/local/include/SuperCollider" +SC2="/usr/local/include/supercollider" +SC3="/usr/include/SuperCollider" +SC4="/usr/include/supercollider" + +# check if directory exists + +if [ -d $SC0/plugin_interface ]; then + SC=$SC0 +elif [ -d $SC1 ]; then + SC=$SC1 +elif [ -d $SC2 ]; then + SC=$SC2 +elif [ -d $SC3 ]; then + SC=$SC3 +elif [ -d $SC4 ]; then + SC=$SC4 +else + echo "Can't find SuperCollider headers" + exit 1 +fi +echo Using SC Headers in $SC + +INCLUDE="-I$SC/plugin_interface/ -I$SC/common/ -I$SC/server/" + +if [ $# = 0 ]; then + echo USAGE: + echo "$0 [-d[ebug]] [-icc] [-omp] [-sd] file1.dsp [file2.dsp ...]" + exit 1 +fi + +#------------------------------------------------------------------- +# Analyze command arguments : +# faust options -> OPTIONS +# if -omp : -openmp or -fopenmp -> OPENMP +# if -d or -debug -> F2SC_DEBUG +# if -sd or -synthdef -> SYNTHDEF +# 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 +F2SC_DEBUG=0 +SYNTHDEF="" +for p in $@; do + if [ "$p" = -omp ]; then + if [[ $CXX == "icpc" ]]; then + OMP="-openmp" + else + OMP="-fopenmp" + fi + fi + + if [ "$p" = -debug ] || [ "$p" = -d ]; then + F2SC_DEBUG=1 + elif [ "$p" = -sd ] || [ "$p" = -synthdef ]; then + SYNTHDEF="--synthdef" + elif [ "$p" = -icc ]; then + ignore=" " + elif [ ${p:0:1} = "-" ]; then + OPTIONS="$OPTIONS $p" + elif [[ -e "$p" ]]; then + FILES="$FILES $p" + else + echo "*** Faust source-file '$p' not found" + OPTIONS="$OPTIONS $p" + fi +done + +if [ $F2SC_DEBUG = 1 ]; then + OUTDEV=/dev/tty + DNDEBUG="" +else + OUTDEV=/dev/null + DNDEBUG="-DNDEBUG" +fi + +if [ "$FILES" = "" ]; then + echo USAGE: + echo "$0 [-d[ebug]] [-icc] [-omp] file1.dsp [file2.dsp ...]" + exit 1 +fi + +#------------------------------------------------------------------- +# Check plateform specifics +# +if [[ $(uname) == Darwin ]]; then + EXT="scx" + SCFLAGS="-DNO_LIBSNDFILE -DSC_DARWIN $DNDEBUG -bundle " +elif [[ $(uname) == Linux ]]; then + EXT="so" + SCFLAGS="-DNO_LIBSNDFILE -DSC_LINUX $DNDEBUG -shared -fPIC" +else + echo "unsupported plateform" + exit 1 +fi + +#------------------------------------------------------------------- +# compile the *.dsp files +# +for p 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 the .dsp file to c++ and xml + faust -xml "$SRCDIR/$f" -o /dev/null; + mv "$SRCDIR/$f.xml" $TMP/ + faust -a supercollider.cpp $OPTIONS "$SRCDIR/$f" -o "$TMP/${f%.dsp}.cpp" + + # compile c++ to binary; --prefix should be same as in ../../examples/Makefile.sccompile + ( + cd "$TMP" + faust2sc --prefix=Faust $SYNTHDEF $f.xml > "${f%.dsp}.sc" 2>$OUTDEV + ${CXX=g++} -O3 $SCFLAGS -I$CUR $INCLUDE $CXXFLAGS $OMP -Dmydsp=${f%.dsp} -o ${f%.dsp}.$EXT ${f%.dsp}.cpp + )> $OUTDEV + + ## move the produced files from tmp to source dir + cp "$TMP/${f%.dsp}.$EXT" "$SRCDIR/${f%.dsp}.$EXT" + cp "$TMP/${f%.dsp}.sc" "$SRCDIR/${f%.dsp}.sc" + + + if [ $F2SC_DEBUG = 1 ]; then + echo "Retaining intermediate products directory '$TDR'" + OUTDEV=/dev/tty + else + rm -rf "$TDR" + fi + + # collects all the files produced + BINARIES="$BINARIES$SRCDIR/${f%.dsp}.$EXT;$SRCDIR/${f%.dsp}.sc;" + +done + +# return the binaries names +echo "$BINARIES"