]> matita.cs.unibo.it Git - helm.git/blob - helm/software/lambda-delta/Makefile.common
- performance data added for reference
[helm.git] / helm / software / lambda-delta / Makefile.common
1 H=@
2
3 DIRECTORIES = $(shell cat Make)
4
5 INCLUDES = $(DIRECTORIES:%=-I %) 
6
7 OCAMLDEP  = ocamlfind ocamldep -native $(INCLUDES)
8 OCAMLOPT  = ocamlfind opt -linkpkg -package "$(REQUIRES)" $(INCLUDES)
9 OCAMLLEX  = ocamllex.opt
10 OCAMLYACC = ocamlyacc -v
11 TAR       = tar -czf $(MAIN:%=%.tgz)
12
13 define DIR_TEMPLATE
14    MODULES += $$(addprefix $(1)/,$$(shell cat $(1)/Make))
15 endef
16
17 define MOD_TEMPLATE
18    SOURCES += $$(if $$(wildcard $(1).ml[yi]),$(1).mli $(1).ml,$(1).ml)  
19    CMXS    += $(1).cmx
20    CLEAN   += $(1).cmi $(1).cmx $(1).o 
21    CLEAN   += $$(if $$(wildcard $(1).ml[ly]),$(1).ml,)
22    CLEAN   += $$(if $$(wildcard $(1).mly),$(1).mli $(1).output,)
23    KEEP    += $$(if $$(wildcard $(1).mly),$(1).mly,\
24                $$(if $$(wildcard $(1).mll),$(1).mll,\
25                 $$(if $$(wildcard $(1).mli),$(1).mli $(1).ml,$(1).ml)\
26                )\
27               )
28 endef
29
30 define INCLUDE_TEMPLATE
31    ifeq ($(MAKECMDGOALS), $(1))
32       include .depend.opt
33    endif
34 endef
35
36 $(foreach DIR, $(DIRECTORIES), $(eval $(call DIR_TEMPLATE, $(DIR))))
37 $(foreach MOD, $(MODULES), $(eval $(call MOD_TEMPLATE, $(MOD))))
38
39 OBJECTS = $(patsubst %.ml,%.cmx,$(SOURCES:%.mli=%.cmi))
40 CLEAN += $(MAIN).opt
41
42 all opt: .depend.opt
43         @$(MAKE) --no-print-directory $(MAIN).opt
44
45 $(MAIN).opt: $(OBJECTS)
46         @echo "  OCAMLOPT -o $(MAIN).opt"
47         $(H)$(OCAMLOPT) -o $(MAIN).opt $(CMXS)
48
49 .depend.opt: $(SOURCES) 
50         @echo "  OCAMLDEP -native"
51         $(H)$(OCAMLDEP) $^ > .depend.opt
52
53 clean:
54         @echo "  CLEAN . $(DIRECTORIES)"
55         $(H)find -name "*~" | xargs $(RM) $(CLEAN)
56
57 tgz: clean
58         @echo "  TAR -czf $(MAIN:%=%.tgz) . $(DIRECTORIES)" 
59         $(H)find -name "Make*" | xargs $(TAR) $(KEEP)
60
61 %.ml %.mli: %.mly
62         @echo "  OCAMLYACC $<"
63         $(H)$(OCAMLYACC) $<
64 %.ml: %.mll
65         @echo "  OCAMLLEX $<"
66         $(H)$(OCAMLLEX) $<
67 %.cmi: %.mli
68         @echo "  OCAMLOPT $<"
69         $(H)$(OCAMLOPT) -c $<
70 %.cmx: %.ml
71         @echo "  OCAMLOPT $<"
72         $(H)$(OCAMLOPT) -c $<
73
74 TAGS += $(MAIN).opt
75
76 $(foreach TAG, $(TAGS), $(eval $(call INCLUDE_TEMPLATE, $(TAG))))