############################################################################## # Variables ############################################################################## TARGET=commons # note: if you add a file (a .mli or .ml), dont forget to redo a 'make depend' MYSRC=common.ml common_extra.ml \ interfaces.ml objet.ml \ ocollection.ml \ seti.ml \ oset.ml oassoc.ml osequence.ml ograph.ml \ oseti.ml oseth.ml osetb.ml osetpt.ml \ oassocb.ml oassoch.ml oassoc_buffer.ml oassocid.ml \ oarray.ml \ ograph2way.ml ograph_extended.ml \ ofullcommon.ml \ glimpse.ml parser_combinators.ml # src from other authors, got from the web or caml hump SRC=ocamlextra/dumper.ml SRC+=ocamlextra/ANSITerminal.ml SRC+=ocamlextra/setb.ml ocamlextra/mapb.ml # defunctorized version of standard set/map SRC+=ocamlextra/setPt.ml SRC+=$(MYSRC) SRC+=ocamlextra/enum.ml ocamlextra/dynArray.ml SRC+=ocamlextra/suffix_tree.ml ocamlextra/suffix_tree_ext.ml SYSLIBS=str.cma unix.cma INCLUDEDIRS=ocamlextra SUBDIR=ocamlextra #----------------------------------------------------------------------------- # Other common (thin wrapper) libraries #----------------------------------------------------------------------------- #gdbm MYGDBMSRC=oassocdbm.ml GDBMSYSLIBS=dbm.cma #berkeley db BDBINCLUDES=-I ../ocamlbdb MYBDBSRC=oassocbdb.ml BDBSYSLIBS=bdb.cma #ocamlgtk GUIINCLUDES=-I +lablgtk2 -I +lablgtksourceview -I ../ocamlgtk/src MYGUISRC=gui.ml GUISYSLIBS=lablgtk.cma lablgtksourceview.cma #pycaml PYINCLUDES=-I ../ocamlpython -I ../../ocamlpython MYPYSRC=python.ml PYSYSLIBS=python.cma #ocamlmpi MPIINCLUDES=-I ../ocamlmpi -I ../../ocamlmpi -I +ocamlmpi MYMPISRC=distribution.ml MPISYSLIBS=mpi.cma #----------------------------------------------------------------------------- # Other stuff #----------------------------------------------------------------------------- #backtrace BACKTRACEINCLUDES=-I $(shell ocamlc -where) MYBACKTRACESRC=backtrace.ml ############################################################################## # Generic variables ############################################################################## INCLUDES=$(INCLUDEDIRS:%=-I %) $(INCLUDESEXTRA) ############################################################################## # Generic ocaml variables ############################################################################## # This flag can also be used in subdirectories so don't change its name here. # For profiling use: -p -inline 0 OPTFLAGS= #-thread # The OPTBIN variable is here to allow to use ocamlc.opt instead of # ocaml, when it is available, which speeds up compilation. So # if you want the fast version of the ocaml chain tools, set this var # or setenv it to ".opt" in your startup script. OPTBIN= #.opt OCAMLCFLAGS ?= -g -dtypes # The OCaml tools. OCAMLC =ocamlc$(OPTBIN) $(OCAMLCFLAGS) $(INCLUDES) OCAMLOPT=ocamlopt$(OPTBIN) $(OPTFLAGS) $(INCLUDES) OCAMLLEX = ocamllex$(OPTBIN) OCAMLYACC= ocamlyacc -v OCAMLDEP = ocamldep$(OPTBIN) $(INCLUDES) OCAMLMKTOP=ocamlmktop -g -custom $(INCLUDES) # if need C code OCAMLMKLIB=ocamlmklib CC=gcc ############################################################################## # Top rules ############################################################################## LIB=$(TARGET).cma OPTLIB=$(LIB:.cma=.cmxa) OBJS = $(SRC:.ml=.cmo) OPTOBJS = $(SRC:.ml=.cmx) all: $(LIB) all.opt: $(OPTLIB) opt: all.opt top: $(TARGET).top $(LIB): $(OBJS) $(OCAMLC) -a -o $@ $^ $(OPTLIB): $(OPTOBJS) $(OCAMLOPT) -a -o $@ $^ $(TARGET).top: $(OBJS) $(OCAMLMKTOP) -o $@ $(SYSLIBS) $^ clean:: rm -f $(TARGET).top ############################################################################## # Other commons libs target ############################################################################## all_libs: gdbm bdb gui mpi backtrace gdbm: commons_gdbm.cma gdbm.opt: commons_gdbm.cmxa commons_gdbm.cma: $(MYGDBMSRC:.ml=.cmo) $(OCAMLC) -a -o $@ $^ commons_gdbm.cmxa: $(MYGDBMSRC:.ml=.cmx) $(OCAMLOPT) -a -o $@ $^ bdb: $(MAKE) INCLUDESEXTRA="$(BDBINCLUDES)" commons_bdb.cma bdb.opt: $(MAKE) INCLUDESEXTRA="$(BDBINCLUDES)" commons_bdb.cmxa commons_bdb.cma: $(MYBDBSRC:.ml=.cmo) $(OCAMLC) -a -o $@ $^ commons_bdb.cmxa: $(MYBDBSRC:.ml=.cmx) $(OCAMLOPT) -a -o $@ $^ gui: $(MAKE) INCLUDESEXTRA="$(GUIINCLUDES)" commons_gui.cma gui.opt: $(MAKE) INCLUDESEXTRA="$(GUIINCLUDES)" commons_gui.cmxa commons_gui.cma: $(MYGUISRC:.ml=.cmo) $(OCAMLC) -a -o $@ $^ commons_gui.cmxa: $(MYGUISRC:.ml=.cmx) $(OCAMLOPT) -a -o $@ $^ mpi: $(MAKE) INCLUDESEXTRA="$(MPIINCLUDES)" commons_mpi.cma mpi.opt: $(MAKE) INCLUDESEXTRA="$(MPIINCLUDES)" commons_mpi.cmxa commons_mpi.cma: $(MYMPISRC:.ml=.cmo) $(OCAMLC) -a -o $@ $^ commons_mpi.cmxa: $(MYMPISRC:.ml=.cmx) $(OCAMLOPT) -a -o $@ $^ #alias distribution: mpi distribution.opt: mpi.opt python: $(MAKE) INCLUDESEXTRA="$(PYINCLUDES)" commons_python.cma python.opt: $(MAKE) INCLUDESEXTRA="$(PYINCLUDES)" commons_python.cmxa commons_python.cma: $(MYPYSRC:.ml=.cmo) $(OCAMLC) -a -o $@ $^ commons_python.cmxa: $(MYPYSRC:.ml=.cmx) $(OCAMLOPT) -a -o $@ $^ backtrace: commons_backtrace.cma backtrace.opt: commons_backtrace.cmxa backtrace_c.o: backtrace_c.c $(CC) $(BACKTRACEINCLUDES) -c $^ commons_backtrace.cma: $(MYBACKTRACESRC:.ml=.cmo) backtrace_c.o $(OCAMLMKLIB) -o commons_backtrace $^ commons_backtrace.cmxa: $(MYBACKTRACESRC:.ml=.cmx) backtrace_c.o $(OCAMLMKLIB) -o commons_backtrace $^ clean:: rm -f dllcommons_backtrace.so ############################################################################## # Developer rules ############################################################################## tags: otags -no-mli-tags -r . clean:: rm -f gmon.out forprofiling: $(MAKE) OPTFLAGS="-p -inline 0 " opt dependencygraph: ocamldep *.mli *.ml > /tmp/dependfull.depend ocamldot -fullgraph /tmp/dependfull.depend > /tmp/dependfull.dot dot -Tps /tmp/dependfull.dot > /tmp/dependfull.ps dependencygraph2: find -name "*.ml" |grep -v "scripts" | xargs ocamldep -I commons -I globals -I ctl -I parsing_cocci -I parsing_c -I engine -I popl -I extra > /tmp/dependfull.depend ocamldot -fullgraph /tmp/dependfull.depend > /tmp/dependfull.dot dot -Tps /tmp/dependfull.dot > /tmp/dependfull.ps ############################################################################## # Generic rules ############################################################################## .SUFFIXES: .SUFFIXES: .ml .mli .cmo .cmi .cmx .ml.cmo: $(OCAMLC) -c $< .mli.cmi: $(OCAMLC) -c $< .ml.cmx: $(OCAMLOPT) -c $< clean:: rm -f *.cm[iox] *.o *.a *.cma *.cmxa *.annot rm -f *~ .*~ #*# clean:: rm -f $(SUBDIR)/*.cm[iox] $(SUBDIR)/*.o $(SUBDIR)/*.a rm -f $(SUBDIR)/*.cma $(SUBDIR)/*.cmxa $(SUBDIR)/*.annot rm -f $(SUBDIR)/*~ $(SUBDIR)/.*~ #*# depend: $(OCAMLDEP) *.mli *.ml $(SUBDIR)/*.ml $(SUBDIR)/*.mli > .depend distclean:: rm -f .depend -include .depend