Mercurial > hg > Members > tobaru > cbc > CbC_llvm
view bindings/ocaml/Makefile.ocaml @ 107:a03ddd01be7e
resolve warnings
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 31 Jan 2016 17:34:49 +0900 |
parents | 7d135dc70f03 |
children |
line wrap: on
line source
##===- bindings/ocaml/Makefile.ocaml -----------------------*- Makefile -*-===## # # The LLVM Compiler Infrastructure # # This file is distributed under the University of Illinois Open Source # License. See LICENSE.TXT for details. # ##===----------------------------------------------------------------------===## # # An OCaml library is a unique project type in the context of LLVM, so rules are # here rather than in Makefile.rules. # # Reference materials on installing OCaml libraries: # # https://fedoraproject.org/wiki/Packaging/OCaml # http://pkg-ocaml-maint.alioth.debian.org/ocaml_packaging_policy.txt # ##===----------------------------------------------------------------------===## include $(LEVEL)/Makefile.config # We have our own rules for building static libraries. NO_BUILD_ARCHIVE = 1 # CFLAGS needs to be set before Makefile.rules is included. CXX.Flags += -I"$(shell $(OCAMLFIND) c -where)" C.Flags += -I"$(shell $(OCAMLFIND) c -where)" ifeq ($(ENABLE_SHARED),1) LINK_COMPONENTS := all endif include $(LEVEL)/Makefile.common # Used in out-of-tree builds of OCaml bindings only. ifdef SYSTEM_LLVM_CONFIG LLVM_CONFIG = $(SYSTEM_LLVM_CONFIG) LLVMLibsOptions += $(shell $(LLVM_CONFIG) --ldflags) endif # Intentionally ignore PROJ_prefix here. We want the ocaml stdlib. However, the # user can override this with OCAML_LIBDIR or configure --with-ocaml-libdir=. 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 --system-libs $(UsedComponents)) UsedLibNames = $(shell $(LLVM_CONFIG) --libnames $(UsedComponents)) endif endif # How do we link OCaml executables with LLVM? # 1) If this is a --enable-shared build, build stub libraries. This also allows # to use LLVM from toplevels. # 2) If this is a --disable-shared build, embed ocamlc options for building # a custom runtime and a static executable. It is not possible to use LLVM # from toplevels. ifneq ($(ObjectsO),) ifeq ($(ENABLE_SHARED),1) OCAMLSTUBS := 1 OCAMLSTUBFLAGS := $(patsubst %,-cclib %, $(LLVMLibsOptions) -l$(LIBRARYNAME)) endif endif # Avoid the need for LD_LIBRARY_PATH ifneq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW)) ifneq ($(HOST_OS),Darwin) OCAMLRPATH := $(RPATH) -Wl,'$$ORIGIN/../../lib' endif endif # See http://caml.inria.fr/mantis/view.php?id=6642 OCAMLORIGIN := -ccopt -L'$$CAMLORIGIN/..' \ -ccopt $(RPATH) -ccopt -Wl,'$$CAMLORIGIN/..' # Tools OCAMLCFLAGS += -I $(OcamlDir) $(addprefix -package ,$(FindlibPackages)) ifndef IS_CLEANING_TARGET ifneq ($(ObjectsO),) OCAMLAFLAGS += $(patsubst %,-cclib %, \ $(filter-out -L$(LibDir),-l$(LIBRARYNAME) \ $(shell $(LLVM_CONFIG) --ldflags)) \ $(UsedLibs) $(ExtraLibs)) else OCAMLAFLAGS += $(patsubst %,-cclib %, \ $(filter-out -L$(LibDir),$(shell $(LLVM_CONFIG) --ldflags)) \ $(UsedLibs) $(ExtraLibs)) endif endif ifneq ($(DEBUG_SYMBOLS),1) OCAMLDEBUGFLAG := -g endif Compile.CMI := $(strip $(OCAMLFIND) c -c $(OCAMLCFLAGS) $(OCAMLDEBUGFLAG) -o) Compile.CMO := $(strip $(OCAMLFIND) c -c $(OCAMLCFLAGS) $(OCAMLDEBUGFLAG) -o) Compile.CMX := $(strip $(OCAMLFIND) opt -c $(OCAMLCFLAGS) $(OCAMLDEBUGFLAG) -o) ifdef OCAMLSTUBS # -dllib is engaged with ocamlc builds, $(OCAMLSTUBFLAGS) in ocamlc -custom builds. Archive.CMA := $(strip $(OCAMLFIND) c -a -dllib -l$(LIBRARYNAME) $(OCAMLSTUBFLAGS) \ $(OCAMLDEBUGFLAG) $(OCAMLORIGIN) -o) else Archive.CMA := $(strip $(OCAMLFIND) c -a -custom $(OCAMLAFLAGS) $(OCAMLDEBUGFLAG) \ $(OCAMLORIGIN) -o) endif ifdef OCAMLSTUBS Archive.CMXA := $(strip $(OCAMLFIND) opt -a $(OCAMLSTUBFLAGS) $(OCAMLDEBUGFLAG) \ $(OCAMLORIGIN) -o) else Archive.CMXA := $(strip $(OCAMLFIND) opt -a $(OCAMLAFLAGS) $(OCAMLDEBUGFLAG) \ $(OCAMLORIGIN) -o) endif # Source files ifndef OcamlSources1 OcamlSources1 := $(sort $(wildcard $(PROJ_SRC_DIR)/*.ml)) endif ifndef OcamlHeaders1 OcamlHeaders1 := $(sort $(wildcard $(PROJ_SRC_DIR)/*.mli)) endif OcamlSources2 := $(filter-out $(ExcludeSources),$(OcamlSources1)) OcamlHeaders2 := $(filter-out $(ExcludeHeaders),$(OcamlHeaders1)) OcamlSources := $(OcamlSources2:$(PROJ_SRC_DIR)/%=$(ObjDir)/%) OcamlHeaders := $(OcamlHeaders2:$(PROJ_SRC_DIR)/%=$(ObjDir)/%) # Intermediate files ObjectsCMI := $(OcamlSources:%.ml=%.cmi) ObjectsCMO := $(OcamlSources:%.ml=%.cmo) ObjectsCMX := $(OcamlSources:%.ml=%.cmx) ifdef LIBRARYNAME LibraryCMA := $(ObjDir)/$(LIBRARYNAME).cma LibraryCMXA := $(ObjDir)/$(LIBRARYNAME).cmxa endif ifdef TOOLNAME ToolEXE := $(ObjDir)/$(TOOLNAME)$(EXEEXT) endif # Output files # The .cmo files are the only intermediates; all others are to be installed. OutputsCMI := $(ObjectsCMI:$(ObjDir)/%.cmi=$(OcamlDir)/%.cmi) OutputsCMX := $(ObjectsCMX:$(ObjDir)/%.cmx=$(OcamlDir)/%.cmx) OutputLibs := $(UsedLibNames:%=$(OcamlDir)/%) ifdef LIBRARYNAME LibraryA := $(OcamlDir)/lib$(LIBRARYNAME).a OutputCMA := $(LibraryCMA:$(ObjDir)/%.cma=$(OcamlDir)/%.cma) OutputCMXA := $(LibraryCMXA:$(ObjDir)/%.cmxa=$(OcamlDir)/%.cmxa) endif ifdef OCAMLSTUBS SharedLib := $(OcamlDir)/dll$(LIBRARYNAME)$(SHLIBEXT) endif ifdef TOOLNAME ifdef EXAMPLE_TOOL OutputEXE := $(ExmplDir)/$(strip $(TOOLNAME))$(EXEEXT) else OutputEXE := $(ToolDir)/$(strip $(TOOLNAME))$(EXEEXT) endif endif # Installation targets DestLibs := $(UsedLibNames:%=$(PROJ_libocamldir)/%) ifdef LIBRARYNAME DestA := $(PROJ_libocamldir)/lib$(LIBRARYNAME).a DestCMA := $(PROJ_libocamldir)/$(LIBRARYNAME).cma DestCMXA := $(PROJ_libocamldir)/$(LIBRARYNAME).cmxa endif ifdef OCAMLSTUBS DestSharedLib := $(PROJ_libocamldir)/dll$(LIBRARYNAME)$(SHLIBEXT) endif ##===- Dependencies -------------------------------------------------------===## # Copy the sources into the intermediate directory because older ocamlc doesn't # support -o except when linking (outputs are placed next to inputs). $(ObjDir)/%.mli: $(PROJ_SRC_DIR)/%.mli $(ObjDir)/.dir $(Verb) $(CP) -f $< $@ $(ObjDir)/%.ml: $(PROJ_SRC_DIR)/%.ml $(ObjDir)/.dir $(Verb) $(CP) -f $< $@ $(ObjectsCMI): $(UsedOcamlInterfaces:%=$(OcamlDir)/%.cmi) ifdef LIBRARYNAME $(ObjDir)/$(LIBRARYNAME).ocamldep: $(OcamlSources) $(OcamlHeaders) \ $(OcamlDir)/.dir $(ObjDir)/.dir $(Verb) $(OCAMLFIND) dep $(OCAMLCFLAGS) $(OcamlSources) $(OcamlHeaders) > $@ -include $(ObjDir)/$(LIBRARYNAME).ocamldep endif ifdef TOOLNAME $(ObjDir)/$(TOOLNAME).ocamldep: $(OcamlSources) $(OcamlHeaders) \ $(OcamlDir)/.dir $(ObjDir)/.dir $(Verb) $(OCAMLFIND) dep $(OCAMLCFLAGS) $(OcamlSources) $(OcamlHeaders) > $@ -include $(ObjDir)/$(TOOLNAME).ocamldep endif ##===- Build static library from C sources --------------------------------===## ifdef LibraryA all-local:: $(LibraryA) clean-local:: clean-a install-local:: install-a uninstall-local:: uninstall-a $(LibraryA): $(ObjectsO) $(OcamlDir)/.dir $(Echo) "Building $(BuildMode) $(notdir $@)" -$(Verb) $(RM) -f $@ $(Verb) $(Archive) $@ $(ObjectsO) $(Verb) $(Ranlib) $@ clean-a:: -$(Verb) $(RM) -f $(LibraryA) install-a:: $(LibraryA) $(Echo) "Installing $(BuildMode) $(DestA)" $(Verb) $(MKDIR) $(PROJ_libocamldir) $(Verb) $(INSTALL) $(LibraryA) $(DestA) $(Verb) uninstall-a:: $(Echo) "Uninstalling $(DestA)" -$(Verb) $(RM) -f $(DestA) endif ##===- Build stub library from C sources ----------------------------------===## ifdef SharedLib all-local:: $(SharedLib) clean-local:: clean-shared install-local:: install-shared uninstall-local:: uninstall-shared $(SharedLib): $(ObjectsO) $(OcamlDir)/.dir $(Echo) "Building $(BuildMode) $(notdir $@)" $(Verb) $(Link) $(SharedLinkOptions) $(OCAMLRPATH) -o $@ $(ObjectsO) \ $(LLVMLibsOptions) clean-shared:: -$(Verb) $(RM) -f $(SharedLib) install-shared:: $(SharedLib) $(Echo) "Installing $(BuildMode) $(DestSharedLib)" $(Verb) $(MKDIR) $(PROJ_libocamldir) $(Verb) $(INSTALL) $(SharedLib) $(DestSharedLib) $(Verb) uninstall-shared:: $(Echo) "Uninstalling $(DestSharedLib)" -$(Verb) $(RM) -f $(DestSharedLib) endif ##===- Deposit dependent libraries adjacent to OCaml libs -----------------===## ifndef SYSTEM_LLVM_CONFIG all-local:: build-deplibs clean-local:: clean-deplibs install-local:: install-deplibs uninstall-local:: uninstall-deplibs build-deplibs: $(OutputLibs) $(OcamlDir)/%.so: $(LibDir)/%.so $(Verb) ln -sf $< $@ $(OcamlDir)/%.a: $(LibDir)/%.a $(Verb) ln -sf $< $@ $(OcamlDir)/%.o: $(LibDir)/%.o $(Verb) ln -sf $< $@ clean-deplibs: $(Verb) $(RM) -f $(OutputLibs) install-deplibs: $(Verb) $(MKDIR) $(PROJ_libocamldir) $(Verb) for i in $(DestLibs:$(PROJ_libocamldir)/%=%); do \ ln -sf "$(PROJ_libdir)/$$i" "$(PROJ_libocamldir)/$$i"; \ done uninstall-deplibs: $(Verb) $(RM) -f $(DestLibs) endif ##===- Build ocaml interfaces (.mli's -> .cmi's) --------------------------===## ifneq ($(OcamlHeaders),) all-local:: build-cmis clean-local:: clean-cmis install-local:: install-cmis uninstall-local:: uninstall-cmis build-cmis: $(OutputsCMI) $(OcamlDir)/%.cmi: $(ObjDir)/%.cmi $(OcamlDir)/.dir $(Verb) $(CP) -f $< $@ $(ObjDir)/%.cmi: $(ObjDir)/%.mli $(ObjDir)/.dir $(Echo) "Compiling $(notdir $<) for $(BuildMode) build" $(Verb) $(Compile.CMI) $@ $< clean-cmis:: -$(Verb) $(RM) -f $(OutputsCMI) # Also install the .mli's (headers) as documentation. install-cmis: $(OutputsCMI) $(OcamlHeaders) $(Verb) $(MKDIR) $(PROJ_libocamldir) $(Verb) for i in $(OcamlHeaders:$(ObjDir)/%=%); do \ $(EchoCmd) "Installing $(BuildMode) $(PROJ_libocamldir)/$$i"; \ $(DataInstall) $(ObjDir)/$$i "$(PROJ_libocamldir)/$$i"; \ done $(Verb) for i in $(OutputsCMI:$(OcamlDir)/%=%); do \ $(EchoCmd) "Installing $(BuildMode) $(PROJ_libocamldir)/$$i"; \ $(DataInstall) $(OcamlDir)/$$i "$(PROJ_libocamldir)/$$i"; \ done uninstall-cmis:: $(Verb) for i in $(OutputsCMI:$(OcamlDir)/%=%); do \ $(EchoCmd) "Uninstalling $(PROJ_libocamldir)/$$i"; \ $(RM) -f "$(PROJ_libocamldir)/$$i"; \ done $(Verb) for i in $(OcamlHeaders:$(ObjDir)/%=%); do \ $(EchoCmd) "Uninstalling $(PROJ_libocamldir)/$$i"; \ $(RM) -f "$(PROJ_libocamldir)/$$i"; \ done endif ##===- Build ocaml bytecode archive (.ml's -> .cmo's -> .cma) -------------===## $(ObjDir)/%.cmo: $(ObjDir)/%.ml $(Echo) "Compiling $(notdir $<) for $(BuildMode) build" $(Verb) $(Compile.CMO) $@ $< ifdef LIBRARYNAME all-local:: $(OutputCMA) clean-local:: clean-cma install-local:: install-cma uninstall-local:: uninstall-cma $(OutputCMA): $(LibraryCMA) $(OcamlDir)/.dir $(Verb) $(CP) -f $< $@ $(LibraryCMA): $(ObjectsCMO) $(OcamlDir)/.dir $(Echo) "Archiving $(notdir $@) for $(BuildMode) build" $(Verb) $(Archive.CMA) $@ $(ObjectsCMO) clean-cma:: $(Verb) $(RM) -f $(OutputCMA) $(UsedLibNames:%=$(OcamlDir)/%) install-cma:: $(OutputCMA) $(Echo) "Installing $(BuildMode) $(DestCMA)" $(Verb) $(MKDIR) $(PROJ_libocamldir) $(Verb) $(DataInstall) $(OutputCMA) "$(DestCMA)" uninstall-cma:: $(Echo) "Uninstalling $(DestCMA)" -$(Verb) $(RM) -f $(DestCMA) endif ##===- Build optimized ocaml archive (.ml's -> .cmx's -> .cmxa, .a) -------===## # The ocamlopt compiler is supported on a set of targets disjoint from LLVM's. # If unavailable, 'configure' will set HAVE_OCAMLOPT to 0 in Makefile.config. ifeq ($(HAVE_OCAMLOPT),1) $(OcamlDir)/%.cmx: $(ObjDir)/%.cmx $(Verb) $(CP) -f $< $@ $(ObjDir)/%.cmx: $(ObjDir)/%.ml $(Echo) "Compiling optimized $(notdir $<) for $(BuildMode) build" $(Verb) $(Compile.CMX) $@ $< ifdef LIBRARYNAME all-local:: $(OutputCMXA) $(OutputsCMX) clean-local:: clean-cmxa install-local:: install-cmxa uninstall-local:: uninstall-cmxa $(OutputCMXA): $(LibraryCMXA) $(Verb) $(CP) -f $< $@ $(Verb) $(CP) -f $(<:.cmxa=.a) $(@:.cmxa=.a) $(LibraryCMXA): $(ObjectsCMX) $(Echo) "Archiving $(notdir $@) for $(BuildMode) build" $(Verb) $(Archive.CMXA) $@ $(ObjectsCMX) $(Verb) $(RM) -f $(@:.cmxa=.o) clean-cmxa:: $(Verb) $(RM) -f $(OutputCMXA) $(OutputCMXA:.cmxa=.a) $(OutputsCMX) install-cmxa:: $(OutputCMXA) $(OutputsCMX) $(Verb) $(MKDIR) $(PROJ_libocamldir) $(Echo) "Installing $(BuildMode) $(DestCMXA)" $(Verb) $(DataInstall) $(OutputCMXA) $(DestCMXA) $(Echo) "Installing $(BuildMode) $(DestCMXA:.cmxa=.a)" $(Verb) $(DataInstall) $(OutputCMXA:.cmxa=.a) $(DestCMXA:.cmxa=.a) $(Verb) for i in $(OutputsCMX:$(OcamlDir)/%=%); do \ $(EchoCmd) "Installing $(BuildMode) $(PROJ_libocamldir)/$$i"; \ $(DataInstall) $(OcamlDir)/$$i "$(PROJ_libocamldir)/$$i"; \ done uninstall-cmxa:: $(Echo) "Uninstalling $(DestCMXA)" $(Verb) $(RM) -f $(DestCMXA) $(Echo) "Uninstalling $(DestCMXA:.cmxa=.a)" $(Verb) $(RM) -f $(DestCMXA:.cmxa=.a) $(Verb) for i in $(OutputsCMX:$(OcamlDir)/%=%); do \ $(EchoCmd) "Uninstalling $(PROJ_libocamldir)/$$i"; \ $(RM) -f $(PROJ_libocamldir)/$$i; \ done endif endif ##===- Generate documentation ---------------------------------------------===## $(ObjDir)/$(LIBRARYNAME).odoc: $(ObjectsCMI) $(Echo) "Documenting $(notdir $@)" $(Verb) $(OCAMLFIND) doc -I $(ObjDir) -I $(OcamlDir) -dump $@ $(OcamlHeaders) ocamldoc: $(ObjDir)/$(LIBRARYNAME).odoc ##===- Debugging gunk -----------------------------------------------------===## printvars:: printcamlvars printcamlvars:: $(Echo) "LLVM_CONFIG : " '$(LLVM_CONFIG)' $(Echo) "OCAMLCFLAGS : " '$(OCAMLCFLAGS)' $(Echo) "OCAMLAFLAGS : " '$(OCAMLAFLAGS)' $(Echo) "OCAMLRPATH : " '$(OCAMLRPATH)' $(Echo) "OCAMLSTUBS : " '$(OCAMLSTUBS)' $(Echo) "OCAMLSTUBFLAGS : " '$(OCAMLSTUBFLAGS)' $(Echo) "OCAMLFIND : " '$(OCAMLFIND)' $(Echo) "Compile.CMI : " '$(Compile.CMI)' $(Echo) "Compile.CMO : " '$(Compile.CMO)' $(Echo) "Archive.CMA : " '$(Archive.CMA)' $(Echo) "Compile.CMX : " '$(Compile.CMX)' $(Echo) "Archive.CMXA : " '$(Archive.CMXA)' $(Echo) "CAML_LIBDIR : " '$(CAML_LIBDIR)' $(Echo) "LibraryA : " '$(LibraryA)' $(Echo) "LibraryCMA : " '$(LibraryCMA)' $(Echo) "LibraryCMXA : " '$(LibraryCMXA)' $(Echo) "SharedLib : " '$(SharedLib)' $(Echo) "OcamlSources1: " '$(OcamlSources1)' $(Echo) "OcamlSources2: " '$(OcamlSources2)' $(Echo) "OcamlSources : " '$(OcamlSources)' $(Echo) "OcamlHeaders1: " '$(OcamlHeaders1)' $(Echo) "OcamlHeaders2: " '$(OcamlHeaders2)' $(Echo) "OcamlHeaders : " '$(OcamlHeaders)' $(Echo) "ObjectsCMI : " '$(ObjectsCMI)' $(Echo) "ObjectsCMO : " '$(ObjectsCMO)' $(Echo) "ObjectsCMX : " '$(ObjectsCMX)' $(Echo) "OCAML_LIBDIR : " '$(OCAML_LIBDIR)' $(Echo) "DestA : " '$(DestA)' $(Echo) "DestCMA : " '$(DestCMA)' $(Echo) "DestCMXA : " '$(DestCMXA)' $(Echo) "DestSharedLib: " '$(DestSharedLib)' $(Echo) "UsedLibs : " '$(UsedLibs)' $(Echo) "UsedLibNames : " '$(UsedLibNames)' $(Echo) "ExtraLibs : " '$(ExtraLibs)' .PHONY: printcamlvars build-cmis \ clean-a clean-cmis clean-cma clean-cmxa \ install-a install-cmis install-cma install-cmxa \ install-exe \ uninstall-a uninstall-cmis uninstall-cma uninstall-cmxa \ uninstall-exe