summaryrefslogblamecommitdiff
path: root/Makefile.bad
blob: 691e0fa07ee460dc83c551f15ec5e28b7a038cc6 (plain) (tree)


























































































































































                                                                                            
# Cours "Sémantique et Application à la Vérification de programmes"
#
# Antoine Miné 2014
# Ecole normale supérieure, Paris, France / CNRS / INRIA

# Makefile


# points to compilers
#
# (we rely heavily on ocamlfind)
# (no change needed, the default ones in /usr/bin should be good)
# 
OCAMLFIND = ocamlfind
OCAMLLEX = ocamllex
MENHIR = menhir


# options for compilers
#
# (change this if you want to enable/disable debugging)
#
OCAMLCFLAGS = -g
OCAMLOPTFLAGS = -g
OCAMLLEXFLAGS =
MENHIRFLAGS = --explain


# library paths
#
# (change this if you add new subdirectories or libraries)
#
OCAMLINC = -I frontend -I libs -I corrections -I +zarith

# libraries
#
# (change this to add new libraries)
#
LIBS = -package zarith
CMXA =
CMA =

# name of the compiled executable
#
# (change to a better name matching your project)
#
TARGET = main


# compile either to byte code or native code
#
# uncomment only one of the two lines!
#
all: $(TARGET).byte
#all: $(TARGET).opt


# list of automatically generated files (by ocamllex and menhir)
#
# (this will probably not change during the project)
#
AUTOGEN = \
  frontend/lexer.ml \
  frontend/parser.ml \
  frontend/parser.mli


# list of ML source files to compile (including automatically generated)
#
# add your files here, in the right order!
#
MLFILES = \
  libs/mapext.ml \
  frontend/abstract_syntax_tree.ml \
  frontend/abstract_syntax_printer.ml \
  frontend/parser.ml \
  frontend/lexer.ml \
  frontend/file_parser.ml \
  main.ml


# list of MLI source files
#
# add your files here
# (this is only used for ocamldep)
#
MLIFILES = \
  libs/mapext.mli \
  frontend/parser.mli \
  frontend/abstract_syntax_printer.mli \
  frontend/file_parser.mli


# below are general compilation rules
#
# you probably don't need to change anything below this point


# list of object files, derived from ML sources
#
CMOFILES = $(MLFILES:%.ml=%.cmo)
CMXFILES = $(MLFILES:%.ml=%.cmx)

$(TARGET).byte: $(CMOFILES)
	$(OCAMLFIND) ocamlc -o $@ $(OCAMLCFLAGS) $(OCAMLINC) $(LIBS) $(CMA) -linkpkg $+

# native link
$(TARGET).opt: $(CMXFILES)
	$(OCAMLFIND) ocamlopt -o $@ $(OCAMLOPTFLAGS) $(OCAMLINC) $(LIBS) $(CMXA) -linkpkg $+


# compilation rules

%.cmo: %.ml %.cmi
	$(OCAMLFIND) ocamlc $(OCAMLCFLAGS) $(OCAMLINC) $(LIBS) -c $*.ml

%.cmx: %.ml %.cmi
	$(OCAMLFIND) ocamlopt $(OCAMLOPTFLAGS) $(OCAMLINC) $(LIBS) -c $*.ml

%.cmi: %.mli
	$(OCAMLFIND) ocamlc $(OCAMLCFLAGS) $(OCAMLINC) $(LIBS) -c $*.mli

%.cmo: %.ml
	$(OCAMLFIND) ocamlc $(OCAMLCFLAGS) $(OCAMLINC) $(LIBS) -c $*.ml

%.cmx: %.ml
	$(OCAMLFIND) ocamlopt $(OCAMLOPTFLAGS) $(OCAMLINC) $(LIBS) -c $*.ml

%.ml: %.mll
	$(OCAMLLEX) $(OCAMLLEXFLAGS) $*.mll

%.ml %.mli: %.mly
	$(MENHIR) $(MENHIRFLAGS) $*.mly


# remove temporaries and binaries
#
clean:
	rm -f depend $(AUTOGEN) $(TARGET).byte $(TARGET).opt
	rm -f `find . -name "*.o"`
	rm -f `find . -name "*.a"`
	rm -f `find . -name "*.cm*"`
	rm -f `find . -name "*~"`
	rm -f `find . -name "\#*"`
	rm -f `find . -name "*.conflicts"`

.phony:	clean


# automatic dependencies
#
depend: $(MLFILES) $(MLIFILES)
	-$(OCAMLFIND) ocamldep -native $(OCAMLINC) $+ > depend

include depend