]> matita.cs.unibo.it Git - helm.git/blob - helm/software/helena/Makefile.common
initial support for bytecode 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) $(INCLUDES)
21 OCAMLOPT  = $(OCAMLFIND) ocamlopt $(CAMLP) $(OCAMLOPTIONS) -linkpkg -package "$(REQUIRES)" $(INCLUDES)
22 OCAMLC    = $(OCAMLFIND) ocamlc $(CAMLP) $(OCAMLOPTIONS) -linkpkg -package "$(REQUIRES)" $(INCLUDES)
23 OCAMLLEX  = ocamllex.opt
24 OCAMLYACC = ocamlyacc -v
25 TAR       = tar -czf etc/$(MAIN:%=%.tgz)
26
27 define DIR_TEMPLATE
28    MODULES += $$(addprefix $(1)/,$$(shell cat $(1)/Make))
29 endef
30
31 define MOD_TEMPLATE
32    SOURCES += $$(if $$(wildcard $(1).ml[yi]),$(1).mli $(1).ml,$(1).ml)  
33    CMXS    += $(1).cmx
34    CMOS    += $(1).cmo
35    CLEAN   += $(1).cmi $(1).cmx $(1).o $(1).cmo
36    CLEAN   += $$(if $$(wildcard $(1).ml[ly]),$(1).ml,)
37    CLEAN   += $$(if $$(wildcard $(1).mly),$(1).mli $(1).output,)
38    KEEP    += $$(if $$(wildcard $(1).mly),$(1).mly,\
39                $$(if $$(wildcard $(1).mll),$(1).mll,\
40                 $$(if $$(wildcard $(1).mli),$(1).mli $(1).ml,$(1).ml)\
41                )\
42               )
43 endef
44
45 define INCLUDE_O_TEMPLATE
46    ifeq ($(MAKECMDGOALS), $(1))
47 %.cmi: %.mli
48         @echo "  OCAMLOPT $$<"
49         $$(H)$(OCAMLOPT) -c $$<
50
51 include .depend.opt
52    endif
53 endef
54
55 define INCLUDE_B_TEMPLATE
56    ifeq ($(MAKECMDGOALS), $(1))
57 %.cmi: %.mli
58         @echo "  OCAMLC $$<"
59         $$(H)$(OCAMLC) -c $$<
60
61 include .depend.byte
62    endif
63 endef
64
65 $(foreach DIR, $(DIRECTORIES), $(eval $(call DIR_TEMPLATE, $(DIR))))
66 $(foreach MOD, $(MODULES), $(eval $(call MOD_TEMPLATE, $(MOD))))
67 O_OBJECTS = $(patsubst %.ml,%.cmx,$(SOURCES:%.mli=%.cmi))
68 B_OBJECTS = $(patsubst %.ml,%.cmo,$(SOURCES:%.mli=%.cmi))
69
70 CLEAN += $(MAIN).opt
71
72 all opt: .depend.opt
73         @$(MAKE) --no-print-directory $(MAIN).opt
74
75 byte: .depend.byte
76         @$(MAKE) --no-print-directory $(MAIN).byte
77
78 $(MAIN).opt: $(O_OBJECTS)
79         @echo "  OCAMLOPT -o $(MAIN).opt"
80         $(H)$(OCAMLOPT) -o $(MAIN).opt $(CMXS)
81
82 $(MAIN).byte: $(B_OBJECTS)
83         @echo "  OCAMC -o $(MAIN).byte"
84         $(H)$(OCAMLC) -o $(MAIN).byte $(CMOS)
85
86 .depend.opt: $(SOURCES) 
87         @echo "  OCAMLDEP -native"
88         $(H)$(OCAMLDEP) -native $^ > .depend.opt
89
90 .depend.byte: $(SOURCES) 
91         @echo "  OCAMLDEP -byte"
92         $(H)$(OCAMLDEP) $^ > .depend.byte
93
94 clean:
95         @echo "  CLEAN . $(SRC)"
96         $(H)find -name "*~" | xargs $(RM) $(CLEAN)
97
98 relise: clean
99         @echo "  RELISE $(RELISE)"
100         $(H)mkdir -p $(RELISE)
101         $(H)$(foreach FILE, $(shell cat Make), cp --parents $(FILE) $(RELISE);)
102         $(H)tar -czf etc/$(RELISE).tar.gz $(RELISE)
103         $(H)scp etc/$(RELISE).tar.gz $(DOWNDIR)
104
105 tgz: clean
106         @echo "  TAR -czf $(MAIN:%=%.tgz) . $(DIRECTORIES)" 
107         $(H)find -name "Make*" | xargs $(TAR) $(KEEP)
108
109 etc:
110         @echo "  MKDIR etc"
111         $(H)mkdir etc
112
113 %.ml %.mli: %.mly
114         @echo "  OCAMLYACC $<"
115         $(H)$(OCAMLYACC) $<
116 %.ml: %.mll
117         @echo "  OCAMLLEX $<"
118         $(H)$(OCAMLLEX) $<
119 %.cmx: %.ml
120         @echo "  OCAMLOPT $<"
121         $(H)$(OCAMLOPT) -c $<
122 %.cmo: %.ml
123         @echo "  OCAMLC $<"
124         $(H)$(OCAMLC) -c $<
125
126 O_TAGS += all opt $(MAIN).opt
127
128 B_TAGS += byte $(MAIN).byte
129
130 $(foreach TAG, $(O_TAGS), $(eval $(call INCLUDE_O_TEMPLATE, $(TAG))))
131
132 $(foreach TAG, $(B_TAGS), $(eval $(call INCLUDE_B_TEMPLATE, $(TAG))))