#!/bin/bash

#-------------------------------------------------------------------
# Analyze command arguments :
# existing *.dsp files          -> FILES
#

LLVM="false"
FAUSTFLOAT="float"

for p in $@; do
    if [ $p = "-help" ] || [ $p = "-h" ]; then
        echo "sound2llvm [-llvm] <file.dsp>"
        echo "Use '-llvm' to compile the sound reader code as a LLVM module"
  	elif [[ -e "$p" ]]; then
	    FILES="$FILES $p"
    elif [ $p = "-llvm" ]; then
	    LLVM="true"
    elif [ $p = "-double" ]; then
	    FAUSTFLOAT="double"
	fi
done

#-------------------------------------------------------------------
# compile the *.dsp files
#

for f in $FILES; do

    name=${f%.wav}
             
    # compose the soundfile reader C code
    echo "// SoundFile API" > $name.c
    echo -n "#define FAUSTFLOAT " >> $name.c
    echo $FAUSTFLOAT >> $name.c
    echo "#include \"faust/sound-file.h\"" >> $name.c
    echo "// Generated API" >> $name.c
    echo "#ifdef __cplusplus" >> $name.c
    echo "extern \"C\" {" >> $name.c
    echo "#endif" >> $name.c
    echo -n "static SoundFileReader* " >> $name.c
    echo -n $name >> $name.c
    echo "_reader = 0;" >> $name.c
    
    echo -n "int " >> $name.c
    echo -n $name >> $name.c
    echo -n "_size()" >> $name.c
    echo -n " { if (!" >> $name.c
    echo -n $name >> $name.c
    echo -n "_reader) "  >> $name.c
    echo -n $name >> $name.c
    echo -n "_reader = createSFR(\"" >> $name.c
    echo -n $f >> $name.c
    echo -n "\"); return sizeSFR(" >> $name.c
    echo -n $name >> $name.c
    echo "_reader); }"  >> $name.c

    echo -n "FAUSTFLOAT " >> $name.c
    echo -n $name >> $name.c
    echo -n "_sample(int channel, int index) { return sampleSFR(" >> $name.c
    echo -n $name >> $name.c
    echo "_reader, channel, index); }" >> $name.c
    
    echo -n "int " >> $name.c
    echo -n $name >> $name.c
    echo -n "_channels() { return channelsSFR(" >> $name.c
    echo -n $name >> $name.c
    echo "_reader); }" >> $name.c
    echo "#ifdef __cplusplus" >> $name.c
    echo "extern \"C\" }" >> $name.c
    echo "#endif" >> $name.c
    
    if [ $LLVM = "true" ]; then
        clang -emit-llvm -O3 -S $name.c 
    fi

done
