# $Id: Makefile 1723 2007-03-29 21:32:04Z andres $ # Instructions: # You can compile a debug bytecode app by specifying DEBUG=-g # You can compile a profiled bytecode app by specifying # OCAMLC=ocamlcp DEBUG="-p a" # You can compile a profiled native app by specifying PROFILE=-p # Change whatever options (compilers, compiler options, and so on) in this file -include ../config # Cleanup spaces so that we recognize proper options USEPARALLEL := $(strip $(USEPARALLEL)) USEINTERFACE := $(strip $(USEINTERFACE)) USEGRAPHICS := $(strip $(USEGRAPHICS)) USEWIN32 := $(strip $(USEWIN32)) USESHAREDHD := $(strip $(USESHAREDHD)) OCAMLMPI = ../ocamlmpi/ OCAML_INCLUDES := -I $(OCAMLMPI) -I +camlp4 -I ./grappa -I ./graphps $(LABLTK) ifeq ($(USEWIN32), true) CCOPT := -ccopt -mno-cygwin $(CCOPT) endif -include $(PWD)/$(DEPEND) GRAPHICS := ifeq ($(USEINTERFACE), ncurses) INTERFACE = status_ncurses.cma endif ifeq ($(USEINTERFACE), flat) INTERFACE = status_flat.cma endif ifeq ($(USEINTERFACE), gtk2) INTERFACE = status_gtk2.cma GRAPHICS := lablgtk.cma OCAML_INCLUDES := -I +lablgtk2 $(OCAML_INCLUDES) endif ifeq ($(USEINTERFACE), cocoa) INTERFACE = status_cocoa.cma CCOPT := -ccopt "-framework Cocoa" $(CCOPT) endif ifeq ($(USEINTERFACE), html) INTERFACE = status_html.cma endif ifeq ($(USEGRAPHICS), tk) GRAPHICS := labltk.cma $(GRAPHICS) else ifeq ($(USEGRAPHICS), ocaml) GRAPHICS := graphics.cma $(GRAPHICS) endif endif ifeq ($(USEGRAPHICS), tk) LABLTK = -I +labltk else LABLTK = endif PREPROCESSOR = -pp 'camlp4o pa_extend.cmo' # Encapsulate all the options DEFOPTS := ifeq ($(USEPARALLEL), true) DEFOPTS := $(DEFOPTS) -DUSEPARALLEL ifeq ($(USENOSHAREDHD), true) DEFOPTS := $(DEFOPTS) -DUSENOSHAREDHD endif endif ifeq ($(USEGRAPHICS), tk) DEFOPTS := $(DEFOPTS) -DUSEGRAPHICS=2 endif ifeq ($(USEGRAPHICS), ocaml) DEFOPTS := $(DEFOPTS) -DUSEGRAPHICS=1 endif NCURSES_LIBRARIES := ifeq ($(USEINTERFACE), ncurses) DEFOPTS := $(DEFOPTS) -DUSENCURSES NCURSES_LIBRARIES := -ccopt -lncurses -ccopt -lmenu endif ifeq ($(USEWIN32), true) DEFOPTS := $(DEFOPTS) -DUSEWIN32 endif CPREPROCESSOR := -pp 'gcc -x c -E $(DEFOPTS)' ifeq ($(USEWIN32), true) NCURSES_LIBRARIES := endif SUBDIRS = grappa graphps grappa/grappa.cmxa: $(MAKE) -C grappa grappa.cmxa grappa/grappa.cma: $(MAKE) -C grappa grappa.cma graphps/graphps.cmx: graphps/graphps.mli graphps/graphps.ml $(MAKE) -C graphps graphps.cmx graphps/graphps.cmo: graphps/graphps.mli graphps/graphps.ml $(MAKE) -C graphps graphps.cmo # run as "make target DEBUG=-g" to compile a debug executable DEBUG = -g all: mpoy.opt # Useful groups of components LANGUAGE = intSpec.cmo alphSpec.cmo wordSpec.cmo specIndex.cmo characSpec.cmo \ hashedFuncs.cmo data.cmo poyParser.cmo PARALLEL = methods.cmo # ftol.cmo register.cmo process.cmo comm.cmo parallel.cmo CHROM_OBJS = grappa/grappa.cma utl.cmo chromPam.cmo staMat.cmo utlPoy.cmo \ utlGrappa.cmo incList.cmo sufNode.cmo sufTree.cmo subseq.cmo \ seed.cmo block.cmo genAli.cmo aliMap.cmo chromAli.cmo chrom.cmo chromCS.cmo GENOME_OBJS = grappa/grappa.cma utl.cmo chromPam.cmo staMat.cmo utlPoy.cmo \ utlGrappa.cmo genomeAli.cmo genome.cmo genomeCS.cmo BREAKINV_OBJS = grappa/grappa.cma utl.cmo utlPoy.cmo \ utlGrappa.cmo genAli.cmo breakinvAli.cmo breakinv.cmo breakinvCS.cmo ANNCHROM_OBJS = grappa/grappa.cma utl.cmo utlPoy.cmo \ utlGrappa.cmo genAli.cmo annchromAli.cmo annchrom.cmo annchromCS.cmo CHARACTER = sleep.o timer.cmo array_ops.cmo char_add.cmo char_nonadd.cmo \ sankCS.cmo seqCS.cmo chromCS.cmo genomeCS.cmo breakinvCS.cmo annchromCS.cmo \ dynamicCS.cmo nodeSig.cmo node.cmo allDirNode.cmo edge.cmo \ characterScripting.cmo metric.cmo PARSER = parser.cmo $(LANGUAGE) ifeq ($(USEGRAPHICS), tk) TREEOUTPUT = asciiTree.cmo graphTree.cmo graphicTK.cmo graphicsPs.cmo else ifeq ($(USEGRAPHICS), ocaml) TREEOUTPUT = asciiTree.cmo graphTree.cmo graphicsScreen.cmo graphicsPs.cmo else TREEOUTPUT = asciiTree.cmo graphTree.cmo graphicsPs.cmo endif endif TREE = enum.cmo bitSet.cmo tree.cmo rtree.cmo hash_tbl.cmo gen_rtree.cmo \ graphps/graphps.cmo $(TREEOUTPUT) ptree.cmo searchInformation.cmo \ chartree.cmo sparceMatrix.cmo unionTree.cmo allDirChar.cmo sampler.cmo \ queues.cmo tabus.cmo treeSearch.cmo impliedAlignment.cmo charTransform.cmo \ mst.cmo build.cmo DISTANCE_LIBS = character.cmo addCS.cmo memstack.o add.o nonaddCS8.cmo \ nonaddCSc8.o nonaddCS16.cmo nonaddCSc16.o nonaddCS32.cmo nonaddCSc32.o SEQUENCE = all_sets.cmo alphabet.cmo cost_matrix.cmo matrix.cmo \ primes.cmo fingerPrint.cmo sequence.cmo zarr.o avl.o algn.o # Some personal tests that can be useful for everyone CAMLP4PROCESSED = poyParser.ml poyCommand.ml GETRUSAGE := ifeq ($(USEWIN32), false) GETRUSAGE := getrusage.o endif BASE_OBJS := sleep.o timer.cmo $(GETRUSAGE) compileFlags.cmo buildNumber.cmo \ version.cmo sadmanlib.cma $(INTERFACE) \ sexpr.cmo tags.cmo poyFormaters.cmo fileStream.cmo sequences.cma \ $(PARSER) distances.cma \ $(CHROM_OBJS) $(BREAKINV_OBJS) $(ANNCHROM_OBJS) $(GENOME_OBJS) $(CHARACTER) trees.cma \ diagnosis.cmo supports.cmo help.cmo helpIndex.cmo methods.cmo \ analyzer.cmo poyCommand.cmo poyFile.cmo scripting.cmo MAIN_OBJS = $(BASE_OBJS) arguments.cmo compileFlags.cmo main.cmo BASE_OBJS_OPT = $(patsubst %.cmo,%.cmx, $(patsubst %.cma,%.cmxa, $(BASE_OBJS))) MAIN_OBJS_OPT = $(patsubst %.cmo,%.cmx, $(patsubst %.cma,%.cmxa, $(MAIN_OBJS))) TEST_OBJS = $(BASE_OBJS) sadmanlib.cma test.cmo TEST_OBJS_OPT = $(patsubst %.cmo,%.cmx, $(patsubst %.cma,%.cmxa, $(TEST_OBJS))) UNIT_OBJS = $(BASE_OBJS) test_unit.cmo SADMAN = sadmanOutput.cmo sadman.cmo all_libs: status_ncurses.cma status_flat.cma sequences.cma distances.cma \ trees.cma sadmanlib.cma sequences.cmxa distances.cmxa \ trees.cmxa parsers.cmxa sadmanlib.cmxa # If you keep a set of personal test programs and their make scripts, # set them up in Makefile.local, don't add them on this Makefile directly. -include Makefile.local clean: rm -f *.annot *.cmi *.cmo *.cmx* *.o *.a *.so lparser.ml lparser.mli llexer.ml \ mpoy_console mpoy mpoy.opt *.cma nonaddCS8.ml nonaddCS16.ml nonaddCS32.ml \ nonaddCSc8.c nonaddCSc16.c nonaddCSc32.c mpoy.opt2 status.ml ocaml-str \ $(LOCAL_CLEAN) @for subs in $(SUBDIRS); do \ cd $$subs; \ $(MAKE) clean; \ cd ..; \ done sadmanOutput.cmo: compileFlags.cmo sadmanOutput.cmi sadmanOutput.cmx: compileFlags.cmx sadmanOutput.cmi depend: .depend tags: otags ctags otags: *.ml otags -o otags $(filter-out poyParser.ml, $(wildcard *.ml)) ctags: *.c ctags -o ctags *.c compileFlags.ml: ../config echo "(** automatically generated description of compile-time flags *)" \ > $@ echo >> $@ echo "let cc = \"" `which gcc` `gcc --version` "\"" >> $@ #echo "let ccopt = \"" $(CCOPT) "\"" >> $@ echo "let ccopt = \"\"" >> $@ echo "let ocamlc = \"" `which $(OCAMLC)` `$(OCAMLC) -version` "\"" \ >> $@ echo "let ocamlopt = \"" `which $(OCAMLOPT)` `$(OCAMLOPT) -version` \ "\"" >> $@ echo "let time = \"" `date -r` "\"" >> $@ echo "let str_parallel = \"" `grep USEPARALLEL ../config` "\"" >> $@ echo "let str_interface = \"" `grep USEINTERFACE ../config` "\"" >> $@ echo "let str_graphics = \"" `grep USEGRAPHICS ../config` "\"" >> $@ # The libraries status_ncurses.cma : dequeue.cmo status.cmi ncurses.o ncursesML.cmo \ statusCommon.cmo status_ncurses.ml cp status_ncurses.ml status.ml $(OCAMLC) $(CCOPT) -custom -g -a -o $(@) $(NCURSES_LIBRARIES) ncurses.o \ ncursesML.cmo dequeue.cmo statusCommon.cmo status.ml $(MKLIBOPT) $(PROFILE) status_gtk2.cma: status.cmi statusCommon.cmo status_gtk2.ml cp status_gtk2.ml status.ml $(OCAMLC) -custom -g -a -o $@ -I +lablgtk2 statusCommon.cmo status.ml \ $(MKLIBOPT) $(CCOPT) $(PROFILE) status_cocoa.cma: status.cmi statusCommon.cmo status_cocoa.ml PoyStatus.o \ PoyController.o CocoaCaml.o cp status_cocoa.ml status.ml $(OCAMLC) -custom -g -a -o $@ PoyStatus.o PoyController.o \ CocoaCaml.o statusCommon.cmo status.ml $(MKLIBOPT) $(CCOPT) $(PROFILE) status_html.cma: status.cmi statusCommon.cmo status_html.ml cp status_html.ml status.ml $(OCAMLC) -custom -g -a -o $@ statusCommon.cmo status.ml $(MKLIBOPT) \ $(CCOPT) $(PROFILE) status_flat.cma: status.cmi statusCommon.cmo status_flat.ml cp status_flat.ml status.ml $(OCAMLC) -custom -g -a -o $@ statusCommon.cmo status.ml $(MKLIBOPT) \ $(CCOPT) $(PROFILE) distances.cma: sequences.cma $(DISTANCE_LIBS) $(OCAMLC) $(OCAML_INCLUDES) -custom -a -o $@ $(^:sequences.cma=) $(MKLIBOPT) $(CCOPT) parsers.cma : $(PARSER) $(OCAMLC) $(OCAML_INCLUDES) -custom -a -o $@ $^ $(MKLIBOPT) $(CCOPT) trees.cma : $(CHARACTER) $(TREE) $(OCAMLC) $(OCAML_INCLUDES) -custom -a -o $@ $(MKLIBOPT) $(CCOPT) $(TREE) sequences.cma: $(SEQUENCE) $(OCAMLC) $(OCAML_INCLUDES) -custom -a -o $@ $(^:methods.cmo=) $(MKLIBOPT) $(CCOPT) sadmanlib.cma: $(SADMAN) $(OCAMLC) -a -o $@ $^ $(CCOPT) $(MKLIBOPT) status_ncurses.cmxa : dequeue.cmx status.cmi ncurses.o ncursesML.cmx \ statusCommon.cmx status_ncurses.ml cp status_ncurses.ml status.ml $(OCAMLOPT) $(CCOPT) -a -o $@ $(NCURSES_LIBRARIES) \ ncurses.o dequeue.cmx ncursesML.cmx \ statusCommon.cmx status.ml $(MKLIBOPT) $(PROFILE) status_html.cmxa: status.cmi statusCommon.cmx status_html.ml cp status_html.ml status.ml $(OCAMLOPT) -a -o $@ statusCommon.cmx status.ml $(MKLIBOPT) \ $(CCOPT) $(PROFILE) status_flat.cmxa: status.cmi statusCommon.cmx status_flat.ml cp status_flat.ml status.ml $(OCAMLOPT) -a -o $@ statusCommon.cmx status.ml $(MKLIBOPT) \ $(CCOPT) $(PROFILE) status_gtk2.cmxa: status.cmi statusCommon.cmx status_gtk2.ml cp status_gtk2.ml status.ml $(OCAMLOPT) -a -o $@ -I +lablgtk2 statusCommon.cmx status.ml \ $(MKLIBOPT) $(CCOPT) $(PROFILE) status_cocoa.cmxa: status.cmi statusCommon.cmx status_cocoa.ml PoyStatus.o \ PoyController.o CocoaCaml.o cp status_cocoa.ml status.ml $(OCAMLOPT) -a -o $@ PoyStatus.o PoyController.o \ CocoaCaml.o statusCommon.cmx status.ml $(MKLIBOPT) $(CCOPT) $(PROFILE) sequences.cmxa: $(SEQUENCE:.cmo=.cmx) $(OCAMLOPT) -a -o $@ $^ $(MKLIBOPT) $(CCOPT) $(PROFILE) distances.cmxa: ${DISTANCE_LIBS:.cmo=.cmx} $(OCAMLOPT) -a -o $@ $^ $(MKLIBOPT) $(CCOPT) $(PROFILE) parsers.cmxa : ${PARSER:.cmo=.cmx} $(OCAMLOPT) -a -o $@ $^ $(MKLIBOPT) $(CCOPT) $(PROFILE) trees.cmxa : $(CHARACTER:.cmo=.cmx) ${TREE:.cmo=.cmx} $(OCAMLOPT) $(OCAML_INCLUDES) -a -o $@ $(MKLIBOPT) $(CCOPT) ${TREE:.cmo=.cmx} $(PROFILE) sadmanlib.cmxa: $(SADMAN:.cmo=.cmx) $(OCAMLOPT) -a -o $@ $^ $(MKLIBOPT) $(CCOPT) $(PROFILE) .PHONY: subdirs $(SUBDIRS) clean driver doc buildNumber.ml # -d .. puts stuff in prev directory # -dot outputs dependency graph as .dot FOR_DOC_FILES = $(filter-out $(wildcard $(CAMLP4PROCESSED:.ml=.mli)), $(wildcard *.mli)) \ $(filter-out $(CAMLP4PROCESSED), $(wildcard *.ml)) doc: all_libs ocamldoc.opt -v -latex -keep-code -d ../doc/ -sort -stars $(OCAML_INCLUDES) \ -colorize-code $(FOR_DOC_FILES) || true graph: all_libs ocamldoc -v -dot -d ../doc/dependencies.dot $(OCAML_INCLUDES) \ $(FOR_DOC_FILES) || true subdirs: $(SUBDIRS) # Poy language parser and lexer lparser.mli lparser.ml: lparser.mly $(OCAMLYACC) -v lparser.mly lparser.cmi lparser.cmo: lparser.ml lparser.mli $(OCAMLC) $(DEBUG) -c lparser.mli lparser.ml lparser.cmx: lparser.ml lparser.mli $(OCAMLOPT) -c lparser.mli lparser.ml $(PROFILE) $(CCOPT) llexer.ml: llexer.mll lparser.ml $(OCAMLLEX) llexer.mll llexer.cmi llexer.cmo: llexer.ml $(OCAMLC) $(DEBUG) -c llexer.ml llexer.cmx: llexer.ml $(OCAMLOPT) -c llexer.ml $(PROFILE) $(CCOPT) parser.cmo: fileStream.cmo parser.cmi parser.ml $(OCAMLC) $(OCAML_INCLUDES:-unsafe=) -c $(DEBUG:-unsafe=) parser.ml parser.cmx: fileStream.cmx parser.ml $(OCAMLOPT) $(OCAML_INCLUDES:-unsafe=) -c parser.ml $(PROFILE:-unsafe=) $(CCOPT:-unsafe) status.cma status.cmxa: ../config # All the libraries specialized for certain size in the character set. # First we define the sed scripts that will replace the names with the # approprate needs SED8 = sed "s/nonadd_/nonadd8_/g" SED16 = sed "s/nonadd_/nonadd16_/g" SED32 = sed "s/nonadd_/nonadd32_/g" nonaddCS8.ml: nonaddCS.ml $(SED8) $< > $@ nonaddCS16.ml: nonaddCS.ml $(SED16) $< > $@ nonaddCS32.ml: nonaddCS.ml $(SED32) $< > $@ nonaddCSc8.o: nonaddCSc.c $(SED8) $< > ${@:.o=.c} $(OCAMLOPT) $(CCOPT) -ccopt -DCHARSIZE=8 -c -I $(INCLUDE) ${@:.o=.c} $(PROFILE) nonaddCSc16.o: nonaddCSc.c $(SED16) $< > ${@:.o=.c} $(OCAMLOPT) $(CCOPT) -ccopt -DCHARSIZE=16 -c -I $(INCLUDE) ${@:.o=.c} $(PROFILE) nonaddCSc32.o: nonaddCSc.c $(SED32) $< > ${@:.o=.c} $(OCAMLOPT) $(CCOPT) -ccopt -DCHARSIZE=32 -c -I $(INCLUDE) ${@:.o=.c} $(PROFILE) add.o: memstack.o # Help file gets made using OCaml script help.txt: compileFlags.cmx sadmanOutput.cmx statusCommon.cmx \ fileStream.cmx latex.ml ../doc/allcommands.tex ifeq ($(USEPARALLEL), true) $(OCAMLOPT) $(OCAML_INCLUDES) $(CCOPT) -o latex_helper -cclib \ -L$(OCAMLMPI) -cclib -l$(MPILNAME) \ mpi.cmxa unix.cmxa compileFlags.cmx \ sadmanOutput.cmx statusCommon.cmx fileStream.cmx latex.ml else $(OCAMLOPT) -o latex_helper unix.cmxa compileFlags.cmx \ sadmanOutput.cmx statusCommon.cmx fileStream.cmx latex.ml endif ./latex_helper > help.txt rm latex_helper help.ml: help.txt ocaml-str helpRead.ml ./ocaml-str help.html: help.txt ocaml-str helpRead.ml ./ocaml-str -html # Static loading to support OS X and Cygwin... ocaml-str: $(OCAMLC) str.cma helpRead.ml -o ocaml-str # Poy Parser needs to be preprocessed and remove the unsafe option poyParser.cmo: poyParser.ml ocamlc -g $(PREPROCESSOR:-unsafe=) $(OCAML_INCLUDES:-unsafe=) -c $< poyCommand.cmo: poyCommand.ml ocamlc -g $(PREPROCESSOR:-unsafe=) $(OCAML_INCLUDES:-unsafe=) -c $< poyParser.cmx: poyParser.ml $(OCAMLOPT) $(PREPROCESSOR:-unsafe=) $(OCAML_INCLUDES:-unsafe=) $(CCOPT:-unsafe=) -c $< poyCommand.cmx: poyCommand.ml $(OCAMLOPT) $(PREPROCESSOR:-unsafe=) $(OCAML_INCLUDES:-unsafe=) $(CCOPT:-unsafe=) -c $< poyParser.cma: poyParser.ml $(OCAMLC) -g $(PREPROCESSOR:-unsafe=) -I +camlp4 $(OCAML_INCLUDES:-unsafe=) -c $(DEBUG:-unsafe=) $< status_gtk2.cmo: status_gtk2.ml $(OCAMLC) -g -I +lablgtk2 $(OCAML_INCLUDES) -c $(DEBUG) status_gtk2.ml main.cmo: arguments.cmo main.ml $(OCAMLC) -g $(CPREPROCESSOR) $(OCAML_INCLUDES) -c $(DEBUG) main.ml main.cmx: arguments.cmx main.ml $(OCAMLOPT) $(CPREPROCESSOR) $(OCAML_INCLUDES) -c main.ml scripting.cmo: scripting.cmi scripting.ml $(OCAMLC) $(CPREPROCESSOR) $(OCAML_INCLUDES) -c $(DEBUG) scripting.ml scripting.cmx: scripting.cmi scripting.ml $(OCAMLOPT) $(CPREPROCESSOR) $(OCAML_INCLUDES) -c scripting.ml timer.cmo: timer.cmi timer.ml $(OCAMLC) $(CPREPROCESSOR) $(OCAML_INCLUDES) -c $(DEBUG) timer.ml timer.cmx: timer.cmi timer.ml $(OCAMLOPT) $(CPREPROCESSOR) $(OCAML_INCLUDES) -c timer.ml sampler.cmo: tree.cmi timer.cmi sequence.cmi ptree.cmi nodeSig.cmo edge.cmi \ all_sets.cmi methods.cmi sampler.ml $(OCAMLC) $(CPREPROCESSOR) $(OCAML_INCLUDES) -c $(DEBUG) sampler.ml sampler.cmx: tree.cmx timer.cmx sequence.cmx ptree.cmx nodeSig.cmx edge.cmx \ all_sets.cmx methods.cmx sampler.ml $(OCAMLOPT) $(CPREPROCESSOR) $(OCAML_INCLUDES) -c sampler.ml fileStream.cmo: fileStream.ml $(OCAMLC) $(CPREPROCESSOR) $(OCAML_INCLUDES) -c $(DEBUG) fileStream.ml fileStream.cmx: fileStream.ml $(OCAMLOPT) $(CPREPROCESSOR) $(OCAML_INCLUDES) -c fileStream.ml # Generics for all the builds .SUFFIXES: .ml .mli .cmo .cmx .cmi .c .o CPREPROCESSED = fileStream.ml sampler.ml timer.ml scripting.ml main.ml DOCFILTER = $(CAMLP4PROCESSED) $(CPREPROCESSED) .depend: nonaddCS8.ml nonaddCS16.ml nonaddCS32.ml *.ml *.mli *.c *.h $(OCAMLDEP) $(OCAML_INCLUDES) \ $(filter-out $(DOCFILTER), $(wildcard *.ml)) \ $(filter-out $(DOCFILTER:.ml=.mli), $(wildcard *.mli)) > .depend $(OCAMLDEP) $(PREPROCESSOR) $(CAMLP4PROCESSED) $(CAMLP4PROCESSED:.ml=.mli) >> .depend $(OCAMLDEP) $(CPREPROCESSOR) $(CPREPROCESSED) scripting.mli >> .depend $(OCAMLOPT) $(CCOPT) -ccopt -MM *.c >> .depend ultrametric.cmo: status.cmi ultrametric.cmi ultrametric.ml ocamlfind ocamlc -v -g ultrametric.ml -package ocamlgraph -linkpkg ultrametric.cmx: status.cmx ultrametric.cmi ultrametric.ml ocamlfind ocamlopt -v ultrametric.ml -package ocamlgraph -linkpkg .ml.cmo: $(OCAMLC) $(OCAML_INCLUDES) -c $(DEBUG) $< .ml.cma: $(OCAMLC) -I +camlp4 $(OCAML_INCLUDES) -c $(DEBUG) $< .ml.cmx: $(OCAMLOPT) $(OCAML_INCLUDES) $(CCOPT) -c $< $(PROFILE) .mli.cmi: $(OCAMLC) $(OCAML_INCLUDES) $(DEBUG) $< .m.o: $(CC) -I `$(OCAMLC) -where` -c -framework Cocoa $< .c.o: $(OCAMLOPT) $(CCOPT) -c -I $(INCLUDE) $< $(PROFILE) mpoy: $(MAIN_OBJS) ifeq ($(USEPARALLEL), true) $(OCAMLC) -custom $(OCAML_INCLUDES) -cc mpicc -cclib -L$(OCAMLMPI) \ -cclib -l$(MPILNAME) $(OCAMLMPI)/mpi.cma -cclib -l$(MPILNAME) \ -cclib -lcamlgrappa $(CCOPT) $(DEBUG) -ccopt -L./ -o mpoy \ $(GRAPHICS) camlp4.cma unix.cma str.cma bigarray.cma $^ else $(OCAMLC) -custom $(OCAML_INCLUDES) -cclib -L$(OCAMLMPI) \ -cclib -lcamlgrappa $(CCOPT) $(DEBUG) -ccopt -L./ -o mpoy \ $(GRAPHICS) camlp4.cma unix.cma str.cma bigarray.cma $^ endif mpoy.opt: $(MAIN_OBJS_OPT) ifeq ($(USEPARALLEL), true) $(OCAMLOPT) $(PREPROCESSOR) $(OCAML_INCLUDES) -cclib -L./grappa \ -cclib -L./graphps -cclib -L./ \ -cclib -L$(OCAMLMPI) $(CCOPT) $(NCURSES_LIBRARIES) $(PROFILE) \ -cclib -l$(MPILNAME) -cclib -lcamlgrappa -o $@ mpi.cmxa $(GRAPHICS:.cma=.cmxa) camlp4.cmxa \ unix.cmxa str.cmxa bigarray.cmxa $^ else $(OCAMLOPT) $(PREPROCESSOR) $(OCAML_INCLUDES) -verbose -ccopt -v -cclib -L./grappa \ -cclib -L/usr/lib -cclib -L./graphps -cclib -L./ \ $(CCOPT) -cclib -lcamlgrappa $(NCURSES_LIBRARIES) $(PROFILE) -o mpoy.opt \ $(GRAPHICS:.cma=.cmxa) camlp4.cmxa unix.cmxa str.cmxa bigarray.cmxa $^ endif # Interactive console to test various features #mpoy_console: sequences.cma parsers.cma distances.cma trees.cma mpoy_console: $(BASE_OBJS) scripting.cmo ifeq ($(USEPARALLEL), true) $(OCAMLTOP) $(PREPROCESSOR) $(OCAML_INCLUDES) -cc mpicc -cclib -L./ \ -I $(OCAMLMPI) -cclib -L./grappa -cclib -L./graphps -custom -cclib \ -L$(OCAMLMPI) $(CCOPT) $(PROFILE) \ -cclib -l$(MPILNAME) -cclib -lcamlgrappa -o $@ mpi.cma $(GRAPHICS) camlp4o.cma unix.cma str.cma \ bigarray.cma $^ else $(OCAMLTOP) $(CCOPT) $(PREPROCESSOR) $(OCAML_INCLUDES) -o $@ -cclib -L./grappa \ -cclib -L./graphps -cclib -L./ -cclib -lcamlgrappa $(GRAPHICS) unix.cma camlp4o.cma str.cma \ bigarray.cma $^ endif