Fix pr4820: Don't run llvm-config during "make clean" since it may have
[oota-llvm.git] / bindings / ocaml / Makefile.ocaml
index b7f4fdec29fcdfdbfb2e08ebfbea5911583f5bf8..c46f6027cf634696c165ffe895a6fd3db6985d44 100644 (file)
@@ -2,8 +2,8 @@
 # 
 #                     The LLVM Compiler Infrastructure
 #
-# This file was developed by Gordon Henriksen and is distributed under the
-# University of Illinois Open Source License. See LICENSE.TXT for details.
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
 # 
 ##===----------------------------------------------------------------------===##
 # 
@@ -20,7 +20,8 @@
 include $(LEVEL)/Makefile.config
 
 # CFLAGS needs to be set before Makefile.rules is included.
-CFLAGS += -I$(shell $(OCAMLC) -where)
+CXX.Flags += -I"$(shell $(OCAMLC) -where)"
+C.Flags += -I"$(shell $(OCAMLC) -where)"
 
 include $(LEVEL)/Makefile.common
 
@@ -30,24 +31,40 @@ PROJ_libocamldir := $(DESTDIR)$(OCAML_LIBDIR)
 OcamlDir := $(LibDir)/ocaml
 
 # Info from llvm-config and similar
+ifndef IS_CLEANING_TARGET
 ifdef UsedComponents
 UsedLibs = $(shell $(LLVM_CONFIG) --libs $(UsedComponents))
 UsedLibNames = $(shell $(LLVM_CONFIG) --libnames $(UsedComponents))
 endif
+endif
 
 # Tools
-OCAMLCFLAGS += -I $(OcamlDir) -I $(ObjDir)
+OCAMLCFLAGS += -I $(ObjDir) -I $(OcamlDir)
+ifndef IS_CLEANING_TARGET
+ifneq ($(ObjectsO),)
 OCAMLAFLAGS += $(patsubst %,-cclib %, \
                  $(filter-out -L$(LibDir),-l$(LIBRARYNAME) \
                                           $(shell $(LLVM_CONFIG) --ldflags)) \
                                           $(UsedLibs))
+else
+OCAMLAFLAGS += $(patsubst %,-cclib %, \
+                 $(filter-out -L$(LibDir),$(shell $(LLVM_CONFIG) --ldflags)) \
+                                          $(UsedLibs))
+endif
+endif
+# -g was introduced in 3.10.0.
+#ifneq ($(ENABLE_OPTIMIZED),1)
+#  OCAMLDEBUGFLAG := -g
+#endif
 
-Compile.CMI  := $(strip $(OCAMLC) -c $(OCAMLCFLAGS) -o)
-Compile.CMO  := $(strip $(OCAMLC) -c $(OCAMLCFLAGS) -o)
-Archive.CMA  := $(strip $(OCAMLC) -a -custom $(OCAMLAFLAGS) -o)
+Compile.CMI  := $(strip $(OCAMLC) -c $(OCAMLCFLAGS) $(OCAMLDEBUGFLAG) -o)
+Compile.CMO  := $(strip $(OCAMLC) -c $(OCAMLCFLAGS) $(OCAMLDEBUGFLAG) -o)
+Archive.CMA  := $(strip $(OCAMLC) -a -custom $(OCAMLAFLAGS) $(OCAMLDEBUGFLAG) \
+                                  -o)
 
-Compile.CMX  := $(strip $(OCAMLOPT) -c $(OCAMLCFLAGS) -o)
-Archive.CMXA := $(strip $(OCAMLOPT) -a $(OCAMLAFLAGS) -o)
+Compile.CMX  := $(strip $(OCAMLOPT) -c $(OCAMLCFLAGS) $(OCAMLDEBUGFLAG) -o)
+Archive.CMXA := $(strip $(OCAMLOPT) -a $(OCAMLAFLAGS) $(OCAMLDEBUGFLAG) -o)
 
 # Source files
 OcamlSources1 := $(sort $(wildcard $(PROJ_SRC_DIR)/*.ml))
@@ -91,7 +108,7 @@ $(ObjDir)/%.ml: $(PROJ_SRC_DIR)/%.ml $(ObjDir)/.dir
 
 $(ObjDir)/$(LIBRARYNAME).ocamldep: $(OcamlSources) $(OcamlHeaders) \
                                    $(OcamlDir)/.dir $(ObjDir)/.dir
-       $(Verb) $(OCAMLDEP) $(OCAMLCFLAGS) $(OcamlSources) $(OcamlHeader) > $@
+       $(Verb) $(OCAMLDEP) $(OCAMLCFLAGS) $(OcamlSources) $(OcamlHeaders) > $@
 
 $(ObjectsCMI): $(UsedOcamlInterfaces:%=$(OcamlDir)/%.cmi)
 
@@ -100,6 +117,7 @@ $(ObjectsCMI): $(UsedOcamlInterfaces:%=$(OcamlDir)/%.cmi)
 
 ##===- Build static library from C sources --------------------------------===##
 
+ifneq ($(ObjectsO),)
 all-local:: $(LibraryA)
 clean-local:: clean-a
 install-local:: install-a
@@ -117,12 +135,13 @@ clean-a::
 install-a:: $(LibraryA)
        $(Echo) "Installing $(BuildMode) $(DestA)"
        $(Verb) $(MKDIR) $(PROJ_libocamldir)
-       $(Verb) $(LTInstall) $(LibraryA) $(DestA)
+       $(Verb) $(INSTALL) $(LibraryA) $(DestA)
        $(Verb) 
 
 uninstall-a::
        $(Echo) "Uninstalling $(DestA)"
        -$(Verb) $(RM) -f $(DestA)
+endif
 
 
 ##===- Deposit dependent libraries adjacent to Ocaml libs -----------------===##
@@ -137,6 +156,9 @@ build-deplibs: $(OutputLibs)
 $(OcamlDir)/%.a: $(LibDir)/%.a
        $(Verb) ln -sf $< $@
 
+$(OcamlDir)/%.o: $(LibDir)/%.o
+       $(Verb) ln -sf $< $@
+
 clean-deplibs:
        $(Verb) rm -f $(OutputLibs)
 
@@ -250,7 +272,7 @@ $(ObjDir)/%.cmx: $(ObjDir)/%.ml
        $(Verb) $(Compile.CMX) $@ $<
 
 clean-cmxa::
-       $(Verb) $(RM) -f $(OutputCMXA) $(OutputCMXA:.cmxa=.o) $(OutputsCMX)
+       $(Verb) $(RM) -f $(OutputCMXA) $(OutputCMXA:.cmxa=.a) $(OutputsCMX)
 
 install-cmxa:: $(OutputCMXA) $(OutputsCMX)
        $(Verb) $(MKDIR) $(PROJ_libocamldir)
@@ -275,6 +297,13 @@ uninstall-cmxa::
 
 endif
 
+##===- Generate documentation ---------------------------------------------===##
+
+$(ObjDir)/$(LIBRARYNAME).odoc: $(ObjectsCMI)
+       $(Echo) "Documenting $(notdir $@)"
+       $(Verb) $(OCAMLDOC) -I $(ObjDir) -I $(OcamlDir) -dump $@ $(OcamlHeaders)
+
+ocamldoc: $(ObjDir)/$(LIBRARYNAME).odoc
 
 ##===- Debugging gunk -----------------------------------------------------===##
 printvars:: printcamlvars