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