Rename interpretor to interpreter.
[Faustine.git] / interpreter / Makefile
diff --git a/interpreter/Makefile b/interpreter/Makefile
new file mode 100644 (file)
index 0000000..715aadc
--- /dev/null
@@ -0,0 +1,237 @@
+# Faustine interpreter Makefile.
+
+########################## User's variables #####################
+#
+# The Caml sources (including camlyacc and camllex source files)
+
+SOURCES = types.ml parser.mly lexer.mll aux.ml basic.ml symbol.ml value.ml signal.ml beam.ml process.ml faustio.ml preprocess.ml main.ml preprocess_stubs.cpp
+
+# The executable file to generate
+EXEC = faustine
+
+# Path to ocaml include header files
+OCAML_INCLUDE_PATH := $(subst bin,lib,$(shell which ocaml))
+
+# Path to sndfile library
+SNDFILE_PATH := lib
+
+# Path to sndfile-ocaml library
+SNDFILE_OCAML_PATH := $(SNDFILE_PATH)/src/libsndfile-ocaml
+
+# Path to Faust.mr3
+FAUST_PATH = preprocessor/faust-0.9.47mr3
+
+# Path to preprocessor library
+PREPROCESSOR_PATH = $(FAUST_PATH)/compiler
+
+# Path to preprocessor header files
+PREPROCESSOR_INCLUDE_PATH = $(PREPROCESSOR_PATH)/headers
+
+# Path to the interpretor documentation
+OCAML_DOC_PATH = ../documentation
+
+########################## Advanced user's variables #####################
+#
+# The Caml compilers.
+# You may fix here the path to access the Caml compiler on your machine
+# You may also have to add various -I options.
+CAMLC = ocamlc
+CAMLOPT = ocamlopt
+CAMLDEP = ocamldep
+CAMLLEX = ocamllex
+CAMLYACC = ocamlyacc
+CAMLDOC = ocamldoc
+CC = g++
+
+# The list of Caml libraries needed by the program
+# For instance:
+# LIBS=$(WITHGRAPHICS) $(WITHUNIX) $(WITHSTR) $(WITHNUMS) $(WITHTHREADS)\
+# $(WITHDBM)
+
+LIBS = $(WITHSNDFILE) $(WITHUNIX) $(WITHSTR)
+
+# Should be set to -INCLUDE if you use any of the libraries above
+# or if any C code have to be linked with your program
+# (irrelevant for ocamlopt)
+
+# INCLUDE=-INCLUDE
+
+INCLUDE = -I $(SNDFILE_OCAML_PATH)
+SNDFILE_STUB := $(SNDFILE_OCAML_PATH)/sndfile_stub.o
+
+# Default setting of the WITH* variables. Should be changed if your
+# local libraries are not found by the compiler.
+#WITHGRAPHICS =graphics.cma -cclib -lgraphics -cclib -L/usr/X11R6/lib -cclib -lX11
+
+#WITHUNIX =unix.cma -cclib -lunix
+
+#WITHSTR =str.cma -cclib -lstr
+
+#WITHNUMS =nums.cma -cclib -lnums
+
+#WITHTHREADS =threads.cma -cclib -lthreads
+
+#WITHDBM =dbm.cma -cclib -lmldbm -cclib -lndbm
+
+WITHUNIX =unix.cma
+
+WITHSNDFILE = sndfile.cma
+
+WITHSTR = str.cma
+
+# c++ wrap options
+GPP_CALL = -cc "g++"
+
+# The list of options for each compiler
+CAMLC_OPTIONS = $(GPP_CALL) $(INCLUDE) $(LIBS) 
+
+CAMLOPT_OPTIONS = -p $(GPP_CALL) $(INCLUDE) $(LIBS:.cma=.cmxa) 
+
+CAMLDOC_OPTIONS = -d $(OCAML_DOC_PATH) -html $(INCLUDE)
+
+CC_OPTIONS = -c -I$(PREPROCESSOR_INCLUDE_PATH) -I$(OCAML_INCLUDE_PATH)
+
+################ End of user's variables #####################
+
+
+##############################################################
+################ This part should be generic
+################ Nothing to set up or fix here
+##############################################################
+
+all:: .depend.input .depend preprocessor libsndfile-ocaml $(EXEC)
+
+opt : .depend.input .depend preprocessor libsndfile-ocaml $(EXEC).opt
+
+doc : document
+
+#ocamlc -INCLUDE other options graphics.cma other files -cclib -lgraphics -cclib -lX11
+#ocamlc -thread -INCLUDE other options threads.cma other files -cclib -lthreads
+#ocamlc -INCLUDE other options str.cma other files -cclib -lstr
+#ocamlc -INCLUDE other options nums.cma other files -cclib -lnums
+#ocamlc -INCLUDE other options unix.cma other files -cclib -lunix
+#ocamlc -INCLUDE other options dbm.cma other files -cclib -lmldbm -cclib -lndbm
+
+SMLIY = $(SOURCES:.mly=.ml)
+SMLIYL = $(SMLIY:.mll=.ml)
+SMLYL = $(filter %.ml, $(SMLIYL))
+OBJS = $(SMLYL:.ml=.cmo)
+MLYS = $(filter %.mly, $(SOURCES))
+MLIS = $(MLYS:.mly=.mli)
+OPTOBJS = $(OBJS:.cmo=.cmx)
+
+CSOURCES = $(filter %.cpp, $(SOURCES))
+COBJS = $(CSOURCES:.cpp=.o)
+CLIBS = $(PREPROCESSOR_PATH)/preprocess.a
+
+PARSER_MLY = $(filter %.mly, $(SOURCES))
+LEXER_MLL = $(filter %.mll, $(SOURCES))
+MIDDLE_ML = $(PARSER_MLY:.mly=.ml) $(LEXER_MLL:.mll=.ml)
+
+preprocessor::
+       @echo "Compiling preprocessor..."
+       $(MAKE) -C $(FAUST_PATH) preprocessor
+
+libsndfile-ocaml::
+       @echo "Compiling libsndfile-ocaml..."
+       $(MAKE) -C $(SNDFILE_PATH)
+
+
+$(EXEC): $(OBJS) $(COBJS) $(CLIBS)
+       @echo "Compiling $(EXEC)..."
+       cp $(SNDFILE_STUB) .
+       $(CAMLC) $(CAMLC_OPTIONS) -o $(EXEC) $(OBJS) $(COBJS) $(CLIBS)
+
+$(EXEC).opt: $(OPTOBJS) $(COBJS) $(CLIBS)
+       @echo "Compiling optimized $(EXEC)..."
+       cp $(SNDFILE_STUB) .
+       $(CAMLOPT) $(CAMLOPT_OPTIONS) -o $(EXEC) $(OPTOBJS) $(COBJS) $(CLIBS)
+
+document: $(SMLYL) $(OBJS)
+       @echo "Compiling documentation..."
+       $(CAMLDOC) $(CAMLDOC_OPTIONS) $(SMLYL)
+
+main.cmo: main.ml
+       $(CAMLC) $(INCLUDE) -c $<
+
+main.cmx: main.ml
+       $(CAMLOPT) $(INCLUDE) -c $<
+
+preprocess.cmo: preprocess.ml
+       $(CAMLC) $(GPP_CALL) -c $<
+
+preprocess.cmx: preprocess.ml
+       $(CAMLOPT) $(GPP_CALL) -c $<
+
+preprocess_stubs.o: preprocess_stubs.cpp
+       $(CC) $(CC_OPTIONS) $< 
+
+faustio.cmo: faustio.ml
+       $(CAMLC) $(INCLUDE) $(LIBS) -c $<
+
+faustio.cmx: faustio.ml
+       $(CAMLOPT) $(INCLUDE) $(LIBS:.cma=.cmxa) -c $<
+
+.SUFFIXES: .ml .mli .cmo .cmi .cmx .mll .mly 
+
+.ml.cmo:
+       $(CAMLC) -c $<
+
+.mli.cmi:
+       $(CAMLC) -c $<
+
+.ml.cmx:
+       $(CAMLOPT) -c $<
+
+.mll.cmo:
+       $(CAMLLEX) $<
+       $(CAMLC) -c $*.ml
+
+.mll.cmx:
+       $(CAMLLEX) $<
+       $(CAMLOPT) -c $*.ml
+
+.mly.cmo:
+       $(CAMLYACC) $<
+       $(CAMLC) -c $*.mli
+       $(CAMLC) -c $*.ml
+
+.mly.cmx:
+       $(CAMLYACC) $<
+       $(CAMLOPT) -c $*.mli
+       $(CAMLOPT) -c $*.ml
+
+.mly.cmi:
+       $(CAMLYACC) $<
+       $(CAMLC) -c $*.mli
+
+.mll.ml:
+       $(CAMLLEX) $<
+
+.mly.ml:
+       $(CAMLYACC) $<
+
+clean::
+       rm -f *.cm[iox] *~ .*~
+       rm -f $(MIDDLE_ML) *.o $(MLIS) # .depend*
+       @$(MAKE) -C $(SNDFILE_PATH) clean
+
+mrproper: clean
+       @$(MAKE) -C $(SNDFILE_PATH) mrproper
+       rm -f $(EXEC)* .depend*
+
+.depend.input: Makefile
+       @echo -n '--Checking Ocaml input files: '
+       @(ls $(SMLIY) $(SMLIY:.ml=.mli) 2>/dev/null || true) \
+            >  .depend.new
+       @diff .depend.new .depend.input 2>/dev/null 1>/dev/null && \
+           (echo 'unchanged'; rm -f .depend.new) || \
+           (echo 'changed'; mv .depend.new .depend.input)
+
+depend: .depend
+
+.depend:: $(SMLIY) .depend.input
+       @echo '--Re-building dependencies'
+       $(CAMLDEP) $(SMLIY) $(SMLIY:.ml=.mli) > .depend
+
+include .depend