Rename interpretor to interpreter.
[Faustine.git] / interpreter / preprocessor / faust-0.9.47mr3 / tools / faust2appls / faust2puredata
diff --git a/interpreter/preprocessor/faust-0.9.47mr3/tools/faust2appls/faust2puredata b/interpreter/preprocessor/faust-0.9.47mr3/tools/faust2appls/faust2puredata
new file mode 100755 (executable)
index 0000000..085d0e7
--- /dev/null
@@ -0,0 +1,116 @@
+#!/bin/bash
+
+#####################################################################
+#                                                                   #
+#               Compiles Faust programs to puredata                 #
+#               (c) Grame, 2009                                     #
+#                                                                   #
+#####################################################################
+
+
+#-------------------------------------------------------------------
+# 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 -xHost -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
+    CXXFLAGS="-O3 -mfpmath=sse -msse -ffast-math"
+    LIB="-I/Applications/Pd-extended.app/Contents/Resources/include/ -bundle -undefined suppress -flat_namespace"    
+    EXT="~.pd_darwin"
+else
+    CXXFLAGS="-O3 -march=native -mfpmath=sse -msse -ffast-math"
+    LIB="-I/usr/include/pd -I/usr/include/pdextended -fPIC -shared"
+    EXT="~.pd_linux"
+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 faust to c++ and xml
+    faust -xml "$SRCDIR/$f" -o /dev/null;
+    mv "$SRCDIR/$f.xml" $TMP/
+    faust -a puredata.cpp $OPTIONS "$SRCDIR/$f" -o "$TMP/${f%.dsp}.cpp"
+
+    # compile c++ to binary
+    (
+        cd "$TMP"
+               if [[ $(uname) == Darwin ]]; then
+                       # On Darwin we build 32-bits and 64-bits plugins combined with lipo
+                       ${CXX=g++}  -arch i386 $CXXFLAGS $OMP $LIB -Dmydsp=${f%.dsp} -o ${f%.dsp}.i386 ${f%.dsp}.cpp
+                       ${CXX=g++}  -arch x86_64 $CXXFLAGS $OMP $LIB -Dmydsp=${f%.dsp} -o ${f%.dsp}.x86_64 ${f%.dsp}.cpp
+                       lipo -create "${f%.dsp}.i386" "${f%.dsp}.x86_64"  -output "${f%.dsp}$EXT"
+               else
+                       ${CXX=g++} $CXXFLAGS $OMP $LIB -Dmydsp=${f%.dsp} -o ${f%.dsp}$EXT ${f%.dsp}.cpp
+               fi              
+        if [ $(which faust2pd) ]; then
+               faust2pd -s $f.xml
+        fi
+    ) > /dev/null
+
+    ##rm -rf "$SRCDIR/${f%.dsp}$EXT"
+    cp "$TMP/${f%.dsp}$EXT" "$SRCDIR/${f%.dsp}$EXT"
+    # collects all the files produced
+    BINARIES="$BINARIES$SRCDIR/${f%.dsp}$EXT;"
+    if [ $(which faust2pd)  ]; then
+       cp "$TMP/${f%.dsp}.pd" "$SRCDIR/${f%.dsp}.pd"
+       BINARIES="$BINARIES$SRCDIR/${f%.dsp}.pd;"
+    fi
+    rm -rf "$TDR"
+
+
+done
+
+# return the binaries names
+echo "$BINARIES"
+
+