170 lines
4.6 KiB
Makefile
170 lines
4.6 KiB
Makefile
# -*- makefile -*-
|
|
|
|
##############################################################################
|
|
# Prelude
|
|
##############################################################################
|
|
|
|
# This file assumes the "includer" has set a few variables and then has done a
|
|
# include Makefile.common. Here are those variables:
|
|
# - TOP
|
|
# - SRC
|
|
# - INCLUDEDIRS
|
|
|
|
# For literate programming, it also assumes a few variables:
|
|
# - SRCNW
|
|
# - TEXMAIN
|
|
# - TEX
|
|
|
|
# For (un)installation, it assumes:
|
|
# - LIBNAME
|
|
|
|
# this can set extra flags like -bin-annot that we want to be everywhere
|
|
-include $(TOP)/Makefile.config
|
|
# this can set extra flags like -warn-error
|
|
-include $(TOP)/Makefile.user
|
|
|
|
##############################################################################
|
|
# Generic variables
|
|
##############################################################################
|
|
|
|
INCLUDES?=$(INCLUDEDIRS:%=-I %) $(SYSINCLUDES)
|
|
|
|
OBJS?= $(SRC:.ml=.cmo)
|
|
OPTOBJS?= $(SRC:.ml=.cmx)
|
|
|
|
|
|
##############################################################################
|
|
# Generic ocaml variables
|
|
##############################################################################
|
|
|
|
#dont use -custom, it makes the bytecode unportable.
|
|
|
|
#-4 allow | _ patterns in match
|
|
#-6 allow omit labels
|
|
#-29 alow multiline strings
|
|
#-45 allow shadowing open (TODO: fix them though)
|
|
#-41 allow ambiguous constructor in 2 opned modules (TODO: fix them though)
|
|
#-44 allow shadow module identifier (TODO: fix them)
|
|
#-48 allow eliminating optional arguments, unclear how to fix without wide
|
|
# changes
|
|
ifeq "$(wildcard $(TOP)/.git)" ""
|
|
WARNING_FLAGS?=-w +A-4-29-6-45-41-44-48
|
|
else
|
|
WARNING_FLAGS?=-w +A-4-29-6-45-41-44-48
|
|
endif
|
|
|
|
OCAMLCFLAGS=-g -thread -dtypes $(WARNING_FLAGS) $(OCAMLCFLAGS_EXTRA)
|
|
|
|
# This flag is also used in subdirectories so don't change its name here
|
|
# the -w y is to silence errors on the visitor_xxx files with the unused
|
|
# variable false positive
|
|
OPTFLAGS?=-thread -g -w y
|
|
|
|
OCAMLC=ocamlc$(OPTBIN) $(OCAMLCFLAGS) $(PP) $(INCLUDES)
|
|
OCAMLOPT=ocamlopt$(OPTBIN) $(OPTFLAGS) $(PP) $(INCLUDES)
|
|
OCAMLLEX=ocamllex #-ml # -ml for debugging lexer, but slightly slower
|
|
OCAMLYACC=ocamlyacc -v
|
|
OCAMLDEP=ocamldep $(PP) $(INCLUDES)
|
|
OCAMLMKTOP=ocamlmktop -g -custom $(INCLUDES) -thread
|
|
|
|
# can also be set via 'make static'
|
|
STATIC= #-ccopt -static
|
|
|
|
# can also be unset via 'make purebytecode'
|
|
BYTECODE_STATIC=-custom
|
|
|
|
##############################################################################
|
|
# Top rules
|
|
##############################################################################
|
|
all::
|
|
|
|
##############################################################################
|
|
# Generic Literate programming variables
|
|
##############################################################################
|
|
|
|
SYNCFLAGS=-md5sum_in_auxfile -less_marks
|
|
|
|
SYNCWEB=~/github/syncweb/syncweb $(SYNCFLAGS)
|
|
NOWEB=~/github/syncweb/scripts/noweblatex
|
|
OCAMLDOC=ocamldoc $(INCLUDES)
|
|
|
|
PDFLATEX=pdflatex --shell-escape
|
|
|
|
lpclean::
|
|
rm -f *.aux *.toc *.log *.brf *.out
|
|
|
|
##############################################################################
|
|
# Developer rules
|
|
##############################################################################
|
|
|
|
#old: otags -no-mli-tags -r . but does not work very well
|
|
# better to use my own tagger :)
|
|
otags:
|
|
echo "you should use pfff_tags"
|
|
|
|
ovisual:
|
|
echo "you should use pfff_visual"
|
|
|
|
distclean::
|
|
rm -f TAGS
|
|
|
|
DOTCOLORS=green,darkgoldenrod2,cyan,red,magenta,yellow,burlywood1,aquamarine,purple,lightpink,salmon,mediumturquoise,black,slategray3
|
|
|
|
dot:
|
|
$(OCAMLDOC) -I +threads $(SRC) -dot -dot-reduce \
|
|
-dot-colors $(DOTCOLORS)
|
|
dot -Tps ocamldoc.out > dot.ps
|
|
mv dot.ps Fig_graph_ml.ps
|
|
ps2pdf Fig_graph_ml.ps
|
|
rm -f Fig_graph_ml.ps
|
|
|
|
doti:
|
|
$(OCAMLDOC) -I +threads $(SRC:.ml=.mli) -dot
|
|
dot -Tps ocamldoc.out > dot.ps
|
|
mv dot.ps Fig_graph_mli.ps
|
|
ps2pdf Fig_graph_mli.ps
|
|
rm -f Fig_graph_mli.ps
|
|
|
|
##############################################################################
|
|
# Install
|
|
##############################################################################
|
|
|
|
uninstall-findlib::
|
|
ocamlfind remove $(LIBNAME)
|
|
|
|
reinstall-findlib:
|
|
$(MAKE) uninstall-findlib
|
|
$(MAKE) install-findlib
|
|
|
|
##############################################################################
|
|
# Generic ocaml rules
|
|
##############################################################################
|
|
|
|
.SUFFIXES: .ml .mli .cmo .cmi .cmx .cmt
|
|
|
|
.ml.cmo:
|
|
$(OCAMLC) -c $<
|
|
.mli.cmi:
|
|
$(OCAMLC) -c $<
|
|
.ml.cmx:
|
|
$(OCAMLOPT) -c $<
|
|
|
|
.ml.mldepend:
|
|
$(OCAMLC) -i $<
|
|
|
|
clean::
|
|
rm -f *.cm[ioxa] *.cmt* *.o *.a *.cmxa *.annot
|
|
rm -f *~ .*~ *.exe gmon.out #*#
|
|
|
|
clean::
|
|
rm -f *.aux *.toc *.log *.brf *.out
|
|
|
|
distclean::
|
|
rm -f .depend
|
|
|
|
beforedepend::
|
|
|
|
depend:: beforedepend
|
|
$(OCAMLDEP) *.mli *.ml > .depend
|
|
|
|
-include .depend
|