#*********************************************************************# # # # Objective Caml # # # # Pierre Weis, projet Cristal, INRIA Rocquencourt # # # # Copyright 1998 Institut National de Recherche en Informatique et # # en Automatique. Distributed only by permission. # # # #*********************************************************************# # Generic Makefile for Objective Caml Programs ############################ Documentation ###################### # # To use this Makefile: # -- You must fix the value of the variable SOURCES below. # (The variable SOURCES is the list of your Caml source files.) # -- You must create a file .depend, using # $touch .depend # (This file will contain the dependancies between your Caml modules, # automatically computed by this Makefile.) # Usage of this Makefile: # To incrementally recompile the system, type # make # To recompute dependancies between modules, type # make depend # To remove the executable and all the compiled files, type # make clean # To compile using the native code compiler # make opt # ################################################################## ################################################################## # # Advanced usage: # --------------- # If you want to fix the name of the executable, set the variable # EXEC, for instance, if you want to obtain a program named my_prog: # EXEC = my_prog # If you need special libraries provided with the Caml system, # (graphics, arbitrary precision numbers, regular expression on strings, ...), # you must set the variable LIBS to the proper set of libraries. For # instance, to use the graphics library set LIBS to $(WITHGRAPHICS): # LIBS=$(WITHGRAPHICS) # You may use any of the following predefined variable # WITHGRAPHICS : provides the graphics library # WITHUNIX : provides the Unix interface library # WITHSTR : provides the regular expression string manipulation library # WITHNUMS : provides the arbitrary precision arithmetic package # WITHTHREADS : provides the byte-code threads library # WITHDBM : provides the Data Base Manager library # # ########################## End of Documentation #################### ########################## User's variables ##################### # # The Caml sources (including camlyacc and camllex source files) SOURCES = errormsg.ml merr.ml absyn.ml \ lexer.mll merr_parsing.ml grammar.mly \ temp.ml ir.ml bitlist.ml \ frame.ml constfold.ml \ translate.ml assem.ml munch.ml \ regalloc.ml finalize.ml \ checker.ml block.ml \ main.ml types.ml # The executable file to generate (default a.out under Unix) EXEC = compile ########################## PATH ##################### # # The path where to find the OCaml and glut installation # If you work on andrew, you can set 411PATH=/afs/andrew/course/15/411 # If OCaml and glut are in your PATH, leave 411PATH empty. # If make is called in an /afs directory, make tries to use # /afs/andrew/course/15/411 as source for OCaml and glut. ifeq ($(findstring /afs/, $(shell pwd)), /afs/) #These are the variables set in the /afs/ environment 411PATH=/afs/andrew/course/15/411/ # Where to find the binaries of OCaml BINPATH=$(411PATH)bin/ # Where to find the libraries of OCaml # LIBPATH=$(411PATH)lib/ # Define USEGLUT if the interpreter should be able to handle graphics # USEGLUT=true else #These are the variables set in your personal environment #Leve the paths empty if OCaml is installed and in your path 411PATH= # Where to find the binaries of OCaml BINPATH= # Where to find the libraries of OCaml # LIBPATH=/usr/local/lib # Define USEGLUT if the interpreter should be able to handle graphics USEGLUT=true endif ########################## Advanced user's variables ##################### # # The Caml compilers. # You may fix here the path to access the Caml compiler on your machine CAMLC = $(BINPATH)ocamlc -g CAMLOPT = $(BINPATH)ocamlopt -p CAMLDEP = $(BINPATH)ocamldep CAMLLEX = $(BINPATH)ocamllex CAMLYACC = $(BINPATH)ocamlyacc -v # The list of Caml libraries needed by the program # For instance: # LIBS=$(WITHGRAPHICS) $(WITHUNIX) $(WITHSTR) $(WITHNUMS) $(WITHTHREADS)\ # $(WITHDBM) LIBS= $(WITHSTR) # Should be set to -custom if you use any of the libraries above # or if any C code have to be linked with your program # (irrelevant for ocamlopt) CUSTOM=-custom # 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 ################ End of user's variables ##################### ############################################################## ################ This part should be generic ################ Nothing to set up or fix here ############################################################## all: depend $(EXEC) opt : $(EXEC).opt #ocamlc -custom other options graphics.cma other files -cclib -lgraphics -cclib -lX11 #ocamlc -thread -custom other options threads.cma other files -cclib -lthreads #ocamlc -custom other options str.cma other files -cclib -lstr #ocamlc -custom other options nums.cma other files -cclib -lnums #ocamlc -custom other options unix.cma other files -cclib -lunix #ocamlc -custom other options dbm.cma other files -cclib -lmldbm -cclib -lndbm SOURCES1 = $(SOURCES:.mly=.ml) SOURCES2 = $(SOURCES1:.mll=.ml) OBJS = $(SOURCES2:.ml=.cmo) OPTOBJS = $(SOURCES2:.ml=.cmx) $(EXEC): $(OBJS) $(CAMLC) $(CUSTOM) -o $(EXEC) $(LIBS) $(OBJS) $(EXEC).opt: $(OPTOBJS) $(CAMLOPT) -o $(EXEC).opt $(LIBS:.cma=.cmxa) $(OPTOBJS) .SUFFIXES: .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) $< sed s/Parsing/Merr_parsing/ $@ >temp.temp.temp mv temp.temp.temp $@ ocamlmerr: ocamlmerr.c gcc -O3 -o ocamlmerr ocamlmerr.c merr.ml: ocamlmerr meta.err ./ocamlmerr -w ./compile clean: rm -f *.cm[iox] *~ .*~ *.o rm -f grammar.ml grammar.mli lexer.ml grammar.output rm -f merr.ml ocamlmerr rm -f $(EXEC) rm -f $(EXEC).opt .depend: $(SOURCES2) $(CAMLDEP) *.mli *.ml > .depend depend: $(SOURCES2) $(CAMLDEP) *.mli *.ml > .depend include .depend