]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/helena/Makefile.common
initial support for bytecode compilation
[helm.git] / helm / software / helena / Makefile.common
index 0fdcc05d6342830d8a71edd530811461a293a9c7..6845800d5653f24dc5430cb8243a1fccae4dfad5 100644 (file)
@@ -17,8 +17,9 @@ CAMLP = -pp "camlp5o pa_macro.cmo $(CAMLPOPTIONS)"
 
 CAMLPOPTIONS = $(F:%=-D%)
 
-OCAMLDEP  = $(OCAMLFIND) ocamldep $(CAMLP) -native $(INCLUDES)
-OCAMLOPT  = $(OCAMLFIND) opt $(CAMLP) $(OCAMLOPTIONS) -linkpkg -package "$(REQUIRES)" $(INCLUDES)
+OCAMLDEP  = $(OCAMLFIND) ocamldep $(CAMLP) $(INCLUDES)
+OCAMLOPT  = $(OCAMLFIND) ocamlopt $(CAMLP) $(OCAMLOPTIONS) -linkpkg -package "$(REQUIRES)" $(INCLUDES)
+OCAMLC    = $(OCAMLFIND) ocamlc $(CAMLP) $(OCAMLOPTIONS) -linkpkg -package "$(REQUIRES)" $(INCLUDES)
 OCAMLLEX  = ocamllex.opt
 OCAMLYACC = ocamlyacc -v
 TAR       = tar -czf etc/$(MAIN:%=%.tgz)
@@ -30,7 +31,8 @@ endef
 define MOD_TEMPLATE
    SOURCES += $$(if $$(wildcard $(1).ml[yi]),$(1).mli $(1).ml,$(1).ml)  
    CMXS    += $(1).cmx
-   CLEAN   += $(1).cmi $(1).cmx $(1).o 
+   CMOS    += $(1).cmo
+   CLEAN   += $(1).cmi $(1).cmx $(1).o $(1).cmo
    CLEAN   += $$(if $$(wildcard $(1).ml[ly]),$(1).ml,)
    CLEAN   += $$(if $$(wildcard $(1).mly),$(1).mli $(1).output,)
    KEEP    += $$(if $$(wildcard $(1).mly),$(1).mly,\
@@ -40,28 +42,54 @@ define MOD_TEMPLATE
              )
 endef
 
-define INCLUDE_TEMPLATE
+define INCLUDE_O_TEMPLATE
    ifeq ($(MAKECMDGOALS), $(1))
-      include .depend.opt
+%.cmi: %.mli
+       @echo "  OCAMLOPT $$<"
+       $$(H)$(OCAMLOPT) -c $$<
+
+include .depend.opt
+   endif
+endef
+
+define INCLUDE_B_TEMPLATE
+   ifeq ($(MAKECMDGOALS), $(1))
+%.cmi: %.mli
+       @echo "  OCAMLC $$<"
+       $$(H)$(OCAMLC) -c $$<
+
+include .depend.byte
    endif
 endef
 
 $(foreach DIR, $(DIRECTORIES), $(eval $(call DIR_TEMPLATE, $(DIR))))
 $(foreach MOD, $(MODULES), $(eval $(call MOD_TEMPLATE, $(MOD))))
+O_OBJECTS = $(patsubst %.ml,%.cmx,$(SOURCES:%.mli=%.cmi))
+B_OBJECTS = $(patsubst %.ml,%.cmo,$(SOURCES:%.mli=%.cmi))
 
-OBJECTS = $(patsubst %.ml,%.cmx,$(SOURCES:%.mli=%.cmi))
 CLEAN += $(MAIN).opt
 
 all opt: .depend.opt
        @$(MAKE) --no-print-directory $(MAIN).opt
 
-$(MAIN).opt: $(OBJECTS)
+byte: .depend.byte
+       @$(MAKE) --no-print-directory $(MAIN).byte
+
+$(MAIN).opt: $(O_OBJECTS)
        @echo "  OCAMLOPT -o $(MAIN).opt"
        $(H)$(OCAMLOPT) -o $(MAIN).opt $(CMXS)
 
+$(MAIN).byte: $(B_OBJECTS)
+       @echo "  OCAMC -o $(MAIN).byte"
+       $(H)$(OCAMLC) -o $(MAIN).byte $(CMOS)
+
 .depend.opt: $(SOURCES) 
        @echo "  OCAMLDEP -native"
-       $(H)$(OCAMLDEP) $^ > .depend.opt
+       $(H)$(OCAMLDEP) -native $^ > .depend.opt
+
+.depend.byte: $(SOURCES) 
+       @echo "  OCAMLDEP -byte"
+       $(H)$(OCAMLDEP) $^ > .depend.byte
 
 clean:
        @echo "  CLEAN . $(SRC)"
@@ -88,13 +116,17 @@ etc:
 %.ml: %.mll
        @echo "  OCAMLLEX $<"
        $(H)$(OCAMLLEX) $<
-%.cmi: %.mli
-       @echo "  OCAMLOPT $<"
-       $(H)$(OCAMLOPT) -c $<
 %.cmx: %.ml
        @echo "  OCAMLOPT $<"
        $(H)$(OCAMLOPT) -c $<
+%.cmo: %.ml
+       @echo "  OCAMLC $<"
+       $(H)$(OCAMLC) -c $<
+
+O_TAGS += all opt $(MAIN).opt
+
+B_TAGS += byte $(MAIN).byte
 
-TAGS += all opt $(MAIN).opt
+$(foreach TAG, $(O_TAGS), $(eval $(call INCLUDE_O_TEMPLATE, $(TAG))))
 
-$(foreach TAG, $(TAGS), $(eval $(call INCLUDE_TEMPLATE, $(TAG))))
+$(foreach TAG, $(B_TAGS), $(eval $(call INCLUDE_B_TEMPLATE, $(TAG))))