]> matita.cs.unibo.it Git - helm.git/blob - helm/software/helena/Makefile.common
we are optimizing the code by conditional compilation.
[helm.git] / helm / software / helena / Makefile.common
1 H=@
2 ifeq ($(origin OCAMLPATH), undefined)
3    OCAMLFIND = OCAMLPATH=$(HOME)/svn/claudio/components/METAS ocamlfind
4 else
5    OCAMLFIND = ocamlfind
6 endif
7
8 RELISE = $(MAIN:%=%_$(shell cat MakeVersion))
9
10 DOWNDIR = ../../www/lambdadelta/download
11
12 DIRECTORIES = $(addprefix $(SRC)/,$(shell cat $(SRC)/Make))
13
14 INCLUDES = $(DIRECTORIES:%=-I %) 
15
16 CAMLP = -pp "camlp5o pa_macro.cmo $(CAMLPOPTIONS)"
17
18 CAMLPOPTIONS = $(F:%=-D%)
19
20 OCAMLDEP  = $(OCAMLFIND) ocamldep $(CAMLP) -native $(INCLUDES)
21 OCAMLOPT  = $(OCAMLFIND) opt $(CAMLP) $(OCAMLOPTIONS) -linkpkg -package "$(REQUIRES)" $(INCLUDES)
22 OCAMLLEX  = ocamllex.opt
23 OCAMLYACC = ocamlyacc -v
24 TAR       = tar -czf etc/$(MAIN:%=%.tgz)
25
26 define DIR_TEMPLATE
27    MODULES += $$(addprefix $(1)/,$$(shell cat $(1)/Make))
28 endef
29
30 define MOD_TEMPLATE
31    SOURCES += $$(if $$(wildcard $(1).ml[yi]),$(1).mli $(1).ml,$(1).ml)  
32    CMXS    += $(1).cmx
33    CLEAN   += $(1).cmi $(1).cmx $(1).o 
34    CLEAN   += $$(if $$(wildcard $(1).ml[ly]),$(1).ml,)
35    CLEAN   += $$(if $$(wildcard $(1).mly),$(1).mli $(1).output,)
36    KEEP    += $$(if $$(wildcard $(1).mly),$(1).mly,\
37                $$(if $$(wildcard $(1).mll),$(1).mll,\
38                 $$(if $$(wildcard $(1).mli),$(1).mli $(1).ml,$(1).ml)\
39                )\
40               )
41 endef
42
43 define INCLUDE_TEMPLATE
44    ifeq ($(MAKECMDGOALS), $(1))
45       include .depend.opt
46    endif
47 endef
48
49 $(foreach DIR, $(DIRECTORIES), $(eval $(call DIR_TEMPLATE, $(DIR))))
50 $(foreach MOD, $(MODULES), $(eval $(call MOD_TEMPLATE, $(MOD))))
51
52 OBJECTS = $(patsubst %.ml,%.cmx,$(SOURCES:%.mli=%.cmi))
53 CLEAN += $(MAIN).opt
54
55 all opt: .depend.opt
56         @$(MAKE) --no-print-directory $(MAIN).opt
57
58 $(MAIN).opt: $(OBJECTS)
59         @echo "  OCAMLOPT -o $(MAIN).opt"
60         $(H)$(OCAMLOPT) -o $(MAIN).opt $(CMXS)
61
62 .depend.opt: $(SOURCES) 
63         @echo "  OCAMLDEP -native"
64         $(H)$(OCAMLDEP) $^ > .depend.opt
65
66 clean:
67         @echo "  CLEAN . $(SRC)"
68         $(H)find -name "*~" | xargs $(RM) $(CLEAN)
69
70 relise: clean
71         @echo "  RELISE $(RELISE)"
72         $(H)mkdir -p $(RELISE)
73         $(H)$(foreach FILE, $(shell cat Make), cp --parents $(FILE) $(RELISE);)
74         $(H)tar -czf etc/$(RELISE).tar.gz $(RELISE)
75         $(H)scp etc/$(RELISE).tar.gz $(DOWNDIR)
76
77 tgz: clean
78         @echo "  TAR -czf $(MAIN:%=%.tgz) . $(DIRECTORIES)" 
79         $(H)find -name "Make*" | xargs $(TAR) $(KEEP)
80
81 etc:
82         @echo "  MKDIR etc"
83         $(H)mkdir etc
84
85 %.ml %.mli: %.mly
86         @echo "  OCAMLYACC $<"
87         $(H)$(OCAMLYACC) $<
88 %.ml: %.mll
89         @echo "  OCAMLLEX $<"
90         $(H)$(OCAMLLEX) $<
91 %.cmi: %.mli
92         @echo "  OCAMLOPT $<"
93         $(H)$(OCAMLOPT) -c $<
94 %.cmx: %.ml
95         @echo "  OCAMLOPT $<"
96         $(H)$(OCAMLOPT) -c $<
97
98 TAGS += all opt $(MAIN).opt
99
100 $(foreach TAG, $(TAGS), $(eval $(call INCLUDE_TEMPLATE, $(TAG))))