flitter/Makefile.common
Joey Yakimowich-Payne fa600b98f7 Add poc files
2018-05-26 10:55:38 +09:00

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