1dfc58e3bcfcb8f37796b2ca1c289dd202f26d03cSylvestre Ledru##===- bindings/ocaml/Makefile.ocaml -----------------------*- Makefile -*-===##
20908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# 
30908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen#                     The LLVM Compiler Infrastructure
40908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen#
557360d1f1cede3b26744d0ce3ade814fcc0f332dChris Lattner# This file is distributed under the University of Illinois Open Source
657360d1f1cede3b26744d0ce3ade814fcc0f332dChris Lattner# License. See LICENSE.TXT for details.
70908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# 
80908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen##===----------------------------------------------------------------------===##
90908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# 
10dfc58e3bcfcb8f37796b2ca1c289dd202f26d03cSylvestre Ledru# An OCaml library is a unique project type in the context of LLVM, so rules are
110908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# here rather than in Makefile.rules.
120908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# 
13dfc58e3bcfcb8f37796b2ca1c289dd202f26d03cSylvestre Ledru# Reference materials on installing OCaml libraries:
14c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen# 
15c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen#   https://fedoraproject.org/wiki/Packaging/OCaml
16c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen#   http://pkg-ocaml-maint.alioth.debian.org/ocaml_packaging_policy.txt
17c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen# 
180908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen##===----------------------------------------------------------------------===##
190908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
200908d49c22775d20a88f595845b515f669d528f7Gordon Henrikseninclude $(LEVEL)/Makefile.config
210908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
223b802476d24a6b8c7d1e645f99b4c25ef6e97809Gordon Henriksen# CFLAGS needs to be set before Makefile.rules is included.
239e7aba2739fb3edb3ddcf04c5d36c7c1cccb0581Gordon HenriksenCXX.Flags += -I"$(shell $(OCAMLC) -where)"
249e7aba2739fb3edb3ddcf04c5d36c7c1cccb0581Gordon HenriksenC.Flags += -I"$(shell $(OCAMLC) -where)"
250908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
261ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovifeq ($(ENABLE_SHARED),1)
271ba15ab1340e07d3456e6b91574f15423bdd30e6Peter ZotovLINK_COMPONENTS := all
281ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovendif
291ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov
300908d49c22775d20a88f595845b515f669d528f7Gordon Henrikseninclude $(LEVEL)/Makefile.common
310908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
320908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# Intentionally ignore PROJ_prefix here. We want the ocaml stdlib. However, the
331d4e0782ba9761e3c664de53b837b74c0c818ff1Gordon Henriksen# user can override this with OCAML_LIBDIR or configure --with-ocaml-libdir=.
340908d49c22775d20a88f595845b515f669d528f7Gordon HenriksenPROJ_libocamldir := $(DESTDIR)$(OCAML_LIBDIR)
350908d49c22775d20a88f595845b515f669d528f7Gordon HenriksenOcamlDir := $(LibDir)/ocaml
360908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
370908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# Info from llvm-config and similar
38ae77a201488fc439bfdfa6314b947a1f5457b701Bob Wilsonifndef IS_CLEANING_TARGET
390908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenifdef UsedComponents
4036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen HinesUsedLibs = $(shell $(LLVM_CONFIG) --libs --system-libs $(UsedComponents))
410908d49c22775d20a88f595845b515f669d528f7Gordon HenriksenUsedLibNames = $(shell $(LLVM_CONFIG) --libnames $(UsedComponents))
420908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenendif
43ae77a201488fc439bfdfa6314b947a1f5457b701Bob Wilsonendif
440908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
451ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov# How do we link OCaml executables with LLVM?
461ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov# 1) If this is a --enable-shared build, build stub libraries. This also allows
471ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov#    to use LLVM from toplevels.
481ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov# 2) If this is a --disable-shared build, embed ocamlc options for building
491ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov#    a custom runtime and a static executable. It is not possible to use LLVM
501ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov#    from toplevels.
511ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovifneq ($(ObjectsO),)
521ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovifeq ($(ENABLE_SHARED),1)
531ba15ab1340e07d3456e6b91574f15423bdd30e6Peter ZotovOCAMLSTUBS := 1
541ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovendif
551ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovendif
561ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov
570908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# Tools
5846c95bbe0616fc37cb56866a57939487f45eca00Bob WilsonOCAMLCFLAGS += -I $(ObjDir) -I $(OcamlDir)
59ae77a201488fc439bfdfa6314b947a1f5457b701Bob Wilsonifndef IS_CLEANING_TARGET
60f368dadd9425de65fea4283daef5d197e98cc1cdGordon Henriksenifneq ($(ObjectsO),)
610908d49c22775d20a88f595845b515f669d528f7Gordon HenriksenOCAMLAFLAGS += $(patsubst %,-cclib %, \
62ed29a28464d1b19d3e043a4cf1e95eedca745842Gordon Henriksen                 $(filter-out -L$(LibDir),-l$(LIBRARYNAME) \
63ed29a28464d1b19d3e043a4cf1e95eedca745842Gordon Henriksen                                          $(shell $(LLVM_CONFIG) --ldflags)) \
64ed29a28464d1b19d3e043a4cf1e95eedca745842Gordon Henriksen                                          $(UsedLibs))
65f368dadd9425de65fea4283daef5d197e98cc1cdGordon Henriksenelse
66f368dadd9425de65fea4283daef5d197e98cc1cdGordon HenriksenOCAMLAFLAGS += $(patsubst %,-cclib %, \
67f368dadd9425de65fea4283daef5d197e98cc1cdGordon Henriksen                 $(filter-out -L$(LibDir),$(shell $(LLVM_CONFIG) --ldflags)) \
68f368dadd9425de65fea4283daef5d197e98cc1cdGordon Henriksen                                          $(UsedLibs))
69f368dadd9425de65fea4283daef5d197e98cc1cdGordon Henriksenendif
70ae77a201488fc439bfdfa6314b947a1f5457b701Bob Wilsonendif
712e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 
724e20a09b6fcf616f1a7bbe0dba4b5fa133b8a5e5Gordon Henriksen# -g was introduced in 3.10.0.
734e20a09b6fcf616f1a7bbe0dba4b5fa133b8a5e5Gordon Henriksen#ifneq ($(ENABLE_OPTIMIZED),1)
744e20a09b6fcf616f1a7bbe0dba4b5fa133b8a5e5Gordon Henriksen#  OCAMLDEBUGFLAG := -g
754e20a09b6fcf616f1a7bbe0dba4b5fa133b8a5e5Gordon Henriksen#endif
760908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
772e855e68d861224c9b61e2bc9cecad1536b1534bGordon HenriksenCompile.CMI  := $(strip $(OCAMLC) -c $(OCAMLCFLAGS) $(OCAMLDEBUGFLAG) -o)
782e855e68d861224c9b61e2bc9cecad1536b1534bGordon HenriksenCompile.CMO  := $(strip $(OCAMLC) -c $(OCAMLCFLAGS) $(OCAMLDEBUGFLAG) -o)
791ba15ab1340e07d3456e6b91574f15423bdd30e6Peter ZotovCompile.CMX  := $(strip $(OCAMLOPT) -c $(OCAMLCFLAGS) $(OCAMLDEBUGFLAG) -o)
801ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov
811ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovifdef OCAMLSTUBS
823d52c077a914d0f0818f3a1eab41ed84ae3b346aBill Wendling# Avoid the need for LD_LIBRARY_PATH
833d52c077a914d0f0818f3a1eab41ed84ae3b346aBill Wendlingifneq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
843d52c077a914d0f0818f3a1eab41ed84ae3b346aBill Wendlingifneq ($(HOST_OS),Darwin)
853d52c077a914d0f0818f3a1eab41ed84ae3b346aBill WendlingOCAMLRPATH   := $(RPATH) -Wl,'$(SharedLibDir)'
863d52c077a914d0f0818f3a1eab41ed84ae3b346aBill Wendlingendif
873d52c077a914d0f0818f3a1eab41ed84ae3b346aBill Wendlingendif
883d52c077a914d0f0818f3a1eab41ed84ae3b346aBill Wendlingendif
893d52c077a914d0f0818f3a1eab41ed84ae3b346aBill Wendling
903d52c077a914d0f0818f3a1eab41ed84ae3b346aBill Wendlingifdef OCAMLSTUBS
911ba15ab1340e07d3456e6b91574f15423bdd30e6Peter ZotovArchive.CMA  := $(strip $(OCAMLC) -a -dllib -l$(LIBRARYNAME) $(OCAMLDEBUGFLAG) \
921ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov                                  -o)
931ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovelse
942e855e68d861224c9b61e2bc9cecad1536b1534bGordon HenriksenArchive.CMA  := $(strip $(OCAMLC) -a -custom $(OCAMLAFLAGS) $(OCAMLDEBUGFLAG) \
952e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen                                  -o)
961ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovendif
970908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
981ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovifdef OCAMLSTUBS
991ba15ab1340e07d3456e6b91574f15423bdd30e6Peter ZotovArchive.CMXA := $(strip $(OCAMLOPT) -a $(patsubst %,-cclib %, \
1003d52c077a914d0f0818f3a1eab41ed84ae3b346aBill Wendling                                    $(LLVMLibsOptions) -l$(LIBRARYNAME) \
101f204272976c23aa801043393417a1de47253c194Bill Wendling                                    -L$(SharedLibDir) $(OCAMLRPATH)) \
1021ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov                                    $(OCAMLDEBUGFLAG) -o)
1031ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovelse
1042e855e68d861224c9b61e2bc9cecad1536b1534bGordon HenriksenArchive.CMXA := $(strip $(OCAMLOPT) -a $(OCAMLAFLAGS) $(OCAMLDEBUGFLAG) -o)
1051ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovendif
1060908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
10749457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarifdef OCAMLOPT
1083d841cb9d38aa98ba4fb15938e2124f67c000ca7Sylvestre LedruArchive.EXE := $(strip $(OCAMLOPT) -cc $(CXX) $(OCAMLCFLAGS) $(UsedOcamlLibs:%=%.cmxa) $(OCAMLDEBUGFLAG) -o)
10949457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarelse
11049457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick TryzelaarArchive.EXE := $(strip $(OCAMLC) -cc $(CXX) $(OCAMLCFLAGS) $(OCAMLDEBUGFLAG:%=%.cma) -o)
11149457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarendif
11249457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar
1130908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# Source files
11401b4ccb6f7f59373c397274b82b3d65701336c03Erick Tryzelaarifndef OcamlSources1
115a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon HenriksenOcamlSources1 := $(sort $(wildcard $(PROJ_SRC_DIR)/*.ml))
11601b4ccb6f7f59373c397274b82b3d65701336c03Erick Tryzelaarendif
11701b4ccb6f7f59373c397274b82b3d65701336c03Erick Tryzelaar
11801b4ccb6f7f59373c397274b82b3d65701336c03Erick Tryzelaarifndef OcamlHeaders1
11949457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick TryzelaarOcamlHeaders1 := $(sort $(wildcard $(PROJ_SRC_DIR)/*.mli))
12001b4ccb6f7f59373c397274b82b3d65701336c03Erick Tryzelaarendif
12149457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar
12249457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick TryzelaarOcamlSources2 := $(filter-out $(ExcludeSources),$(OcamlSources1))
12349457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick TryzelaarOcamlHeaders2 := $(filter-out $(ExcludeHeaders),$(OcamlHeaders1))
124a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
12549457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick TryzelaarOcamlSources := $(OcamlSources2:$(PROJ_SRC_DIR)/%=$(ObjDir)/%)
12649457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick TryzelaarOcamlHeaders := $(OcamlHeaders2:$(PROJ_SRC_DIR)/%=$(ObjDir)/%)
127a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
128a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen# Intermediate files
129a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon HenriksenObjectsCMI   := $(OcamlSources:%.ml=%.cmi)
130a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon HenriksenObjectsCMO   := $(OcamlSources:%.ml=%.cmo)
131a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon HenriksenObjectsCMX   := $(OcamlSources:%.ml=%.cmx)
132a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
13349457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarifdef LIBRARYNAME
13449457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick TryzelaarLibraryCMA   := $(ObjDir)/$(LIBRARYNAME).cma
13549457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick TryzelaarLibraryCMXA  := $(ObjDir)/$(LIBRARYNAME).cmxa
13649457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarendif
13749457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar
13849457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarifdef TOOLNAME
13949457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick TryzelaarToolEXE      := $(ObjDir)/$(TOOLNAME)$(EXEEXT)
14049457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarendif
14149457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar
142a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen# Output files
143a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen#   The .cmo files are the only intermediates; all others are to be installed.
144a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon HenriksenOutputsCMI := $(ObjectsCMI:$(ObjDir)/%.cmi=$(OcamlDir)/%.cmi)
145a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon HenriksenOutputsCMX := $(ObjectsCMX:$(ObjDir)/%.cmx=$(OcamlDir)/%.cmx)
146516276edd4adadf8d521ae6ba29713dacc353c0aGordon HenriksenOutputLibs := $(UsedLibNames:%=$(OcamlDir)/%)
1470908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
14849457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarifdef LIBRARYNAME
14949457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick TryzelaarLibraryA   := $(OcamlDir)/lib$(LIBRARYNAME).a
15049457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick TryzelaarOutputCMA  := $(LibraryCMA:$(ObjDir)/%.cma=$(OcamlDir)/%.cma)
15149457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick TryzelaarOutputCMXA := $(LibraryCMXA:$(ObjDir)/%.cmxa=$(OcamlDir)/%.cmxa)
15249457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarendif
15349457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar
1541ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovifdef OCAMLSTUBS
15568f4dae1c078df09c9b19a0bda9bc8b8d0aae9bePeter ZotovSharedLib := $(OcamlDir)/dll$(LIBRARYNAME)$(SHLIBEXT)
1561ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovendif
1571ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov
15849457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarifdef TOOLNAME
15949457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarifdef EXAMPLE_TOOL
16049457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick TryzelaarOutputEXE := $(ExmplDir)/$(strip $(TOOLNAME))$(EXEEXT)
16149457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarelse
16249457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick TryzelaarOutputEXE := $(ToolDir)/$(strip $(TOOLNAME))$(EXEEXT)
16349457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarendif
16449457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarendif
16549457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar
1660908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# Installation targets
16749457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick TryzelaarDestLibs := $(UsedLibNames:%=$(PROJ_libocamldir)/%)
16849457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar
16949457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarifdef LIBRARYNAME
1700908d49c22775d20a88f595845b515f669d528f7Gordon HenriksenDestA    := $(PROJ_libocamldir)/lib$(LIBRARYNAME).a
1710908d49c22775d20a88f595845b515f669d528f7Gordon HenriksenDestCMA  := $(PROJ_libocamldir)/$(LIBRARYNAME).cma
1720908d49c22775d20a88f595845b515f669d528f7Gordon HenriksenDestCMXA := $(PROJ_libocamldir)/$(LIBRARYNAME).cmxa
17349457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarendif
1740908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
1751ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovifdef OCAMLSTUBS
17668f4dae1c078df09c9b19a0bda9bc8b8d0aae9bePeter ZotovDestSharedLib := $(PROJ_libocamldir)/dll$(LIBRARYNAME)$(SHLIBEXT)
1771ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovendif
1781ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov
179a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen##===- Dependencies -------------------------------------------------------===##
180a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen# Copy the sources into the intermediate directory because older ocamlc doesn't
181a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen# support -o except when linking (outputs are placed next to inputs).
182a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
183a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen$(ObjDir)/%.mli: $(PROJ_SRC_DIR)/%.mli $(ObjDir)/.dir
184a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(CP) -f $< $@
185a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
186a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen$(ObjDir)/%.ml: $(PROJ_SRC_DIR)/%.ml $(ObjDir)/.dir
187a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(CP) -f $< $@
188a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
18949457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar$(ObjectsCMI): $(UsedOcamlInterfaces:%=$(OcamlDir)/%.cmi)
19049457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar
19149457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarifdef LIBRARYNAME
192ab4456f10a72f3a7c73dac0e95578b9b7e4250b8Gordon Henriksen$(ObjDir)/$(LIBRARYNAME).ocamldep: $(OcamlSources) $(OcamlHeaders) \
193ab4456f10a72f3a7c73dac0e95578b9b7e4250b8Gordon Henriksen                                   $(OcamlDir)/.dir $(ObjDir)/.dir
194e6074a027fd78939cc69a8c5db72f789b4e1b2c7Gordon Henriksen	$(Verb) $(OCAMLDEP) $(OCAMLCFLAGS) $(OcamlSources) $(OcamlHeaders) > $@
195a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
196a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen-include $(ObjDir)/$(LIBRARYNAME).ocamldep
19749457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarendif
19849457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar
19949457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarifdef TOOLNAME
20049457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar$(ObjDir)/$(TOOLNAME).ocamldep: $(OcamlSources) $(OcamlHeaders) \
20149457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar                                $(OcamlDir)/.dir $(ObjDir)/.dir
20249457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar	$(Verb) $(OCAMLDEP) $(OCAMLCFLAGS) $(OcamlSources) $(OcamlHeaders) > $@
203a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
20449457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar-include $(ObjDir)/$(TOOLNAME).ocamldep
20549457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarendif
206a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
2070908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen##===- Build static library from C sources --------------------------------===##
2080908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
20949457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarifdef LibraryA
2100908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenall-local:: $(LibraryA)
2110908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenclean-local:: clean-a
2120908d49c22775d20a88f595845b515f669d528f7Gordon Henrikseninstall-local:: install-a
2130908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenuninstall-local:: uninstall-a
2140908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
2150908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen$(LibraryA): $(ObjectsO) $(OcamlDir)/.dir
2160908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Building $(BuildMode) $(notdir $@)"
2170908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	-$(Verb) $(RM) -f $@
2180908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(Archive) $@ $(ObjectsO)
2190908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(Ranlib) $@
2200908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
2210908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenclean-a::
2220908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	-$(Verb) $(RM) -f $(LibraryA)
2230908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
2240908d49c22775d20a88f595845b515f669d528f7Gordon Henrikseninstall-a:: $(LibraryA)
2250908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Installing $(BuildMode) $(DestA)"
2260908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(MKDIR) $(PROJ_libocamldir)
227a15dc035a6d4153bece7a067e037e5d6f5d58b16Nick Lewycky	$(Verb) $(INSTALL) $(LibraryA) $(DestA)
2280908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) 
2290908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
2300908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenuninstall-a::
2310908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Uninstalling $(DestA)"
2320908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	-$(Verb) $(RM) -f $(DestA)
233f368dadd9425de65fea4283daef5d197e98cc1cdGordon Henriksenendif
2340908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
2350908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
2361ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov##===- Build stub library from C sources ----------------------------------===##
2371ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov
2381ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovifdef SharedLib
2391ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovall-local:: $(SharedLib)
2401ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovclean-local:: clean-shared
2411ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovinstall-local:: install-shared
2421ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovuninstall-local:: uninstall-shared
2431ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov
2441ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov$(SharedLib): $(ObjectsO) $(OcamlDir)/.dir
2451ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov	$(Echo) "Building $(BuildMode) $(notdir $@)"
2463d52c077a914d0f0818f3a1eab41ed84ae3b346aBill Wendling	$(Verb) $(Link) $(SharedLinkOptions) $(OCAMLRPATH) $(LLVMLibsOptions) \
2471ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov			-o $@ $(ObjectsO)
2481ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov
2491ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovclean-shared::
2501ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov	-$(Verb) $(RM) -f $(SharedLib)
2511ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov
2521ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovinstall-shared:: $(SharedLib)
2531ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov	$(Echo) "Installing $(BuildMode) $(DestSharedLib)"
2541ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov	$(Verb) $(MKDIR) $(PROJ_libocamldir)
2551ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov	$(Verb) $(INSTALL) $(SharedLib) $(DestSharedLib)
2561ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov	$(Verb)
2571ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov
2581ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovuninstall-shared::
2591ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov	$(Echo) "Uninstalling $(DestSharedLib)"
2601ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov	-$(Verb) $(RM) -f $(DestSharedLib)
2611ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotovendif
2621ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov
2631ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov
264516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen##===- Deposit dependent libraries adjacent to Ocaml libs -----------------===##
265516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen
266516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksenall-local:: build-deplibs
267516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksenclean-local:: clean-deplibs
268516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henrikseninstall-local:: install-deplibs
269516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksenuninstall-local:: uninstall-deplibs
270516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen
271516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksenbuild-deplibs: $(OutputLibs)
272516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen
273516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen$(OcamlDir)/%.a: $(LibDir)/%.a
274516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen	$(Verb) ln -sf $< $@
275516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen
2762e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen$(OcamlDir)/%.o: $(LibDir)/%.o
2772e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen	$(Verb) ln -sf $< $@
2782e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen
279516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksenclean-deplibs:
28049457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar	$(Verb) $(RM) -f $(OutputLibs)
281516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen
282516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henrikseninstall-deplibs:
2833994b4b05e02736c98744647d1d495e77c844413Bob Wilson	$(Verb) $(MKDIR) $(PROJ_libocamldir)
284516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen	$(Verb) for i in $(DestLibs:$(PROJ_libocamldir)/%=%); do \
285516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen	  ln -sf "$(PROJ_libdir)/$$i" "$(PROJ_libocamldir)/$$i"; \
286516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen	done
287516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen
288516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksenuninstall-deplibs:
28949457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar	$(Verb) $(RM) -f $(DestLibs)
290516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen
291516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen
2920908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen##===- Build ocaml interfaces (.mli's -> .cmi's) --------------------------===##
2930908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
29449457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarifneq ($(OcamlHeaders),)
2950908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenall-local:: build-cmis
2960908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenclean-local:: clean-cmis
2970908d49c22775d20a88f595845b515f669d528f7Gordon Henrikseninstall-local:: install-cmis
2980908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenuninstall-local:: uninstall-cmis
2990908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
300a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksenbuild-cmis: $(OutputsCMI)
301a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
302a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen$(OcamlDir)/%.cmi: $(ObjDir)/%.cmi $(OcamlDir)/.dir
303a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(CP) -f $< $@
3040908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
305a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen$(ObjDir)/%.cmi: $(ObjDir)/%.mli $(ObjDir)/.dir
3060908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Compiling $(notdir $<) for $(BuildMode) build"
3070908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(Compile.CMI) $@ $<
3080908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
3090908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenclean-cmis::
310a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	-$(Verb) $(RM) -f $(OutputsCMI)
3110908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
3120908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# Also install the .mli's (headers) as documentation.
313a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henrikseninstall-cmis: $(OutputsCMI) $(OcamlHeaders)
3140908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(MKDIR) $(PROJ_libocamldir)
315a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) for i in $(OcamlHeaders:$(ObjDir)/%=%); do \
3160908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	  $(EchoCmd) "Installing $(BuildMode) $(PROJ_libocamldir)/$$i"; \
317a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	  $(DataInstall) $(ObjDir)/$$i "$(PROJ_libocamldir)/$$i"; \
3180908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	done
3196f274a5e81b028baa7290dd5645e8796850e8c7aWojciech Matyjewicz	$(Verb) for i in $(OutputsCMI:$(OcamlDir)/%=%); do \
3206f274a5e81b028baa7290dd5645e8796850e8c7aWojciech Matyjewicz	  $(EchoCmd) "Installing $(BuildMode) $(PROJ_libocamldir)/$$i"; \
3216f274a5e81b028baa7290dd5645e8796850e8c7aWojciech Matyjewicz	  $(DataInstall) $(OcamlDir)/$$i "$(PROJ_libocamldir)/$$i"; \
3226f274a5e81b028baa7290dd5645e8796850e8c7aWojciech Matyjewicz	done
3230908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
3240908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenuninstall-cmis::
325a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) for i in $(OutputsCMI:$(OcamlDir)/%=%); do \
3260908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	  $(EchoCmd) "Uninstalling $(PROJ_libocamldir)/$$i"; \
3270908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	  $(RM) -f "$(PROJ_libocamldir)/$$i"; \
3280908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	done
329a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) for i in $(OcamlHeaders:$(ObjDir)/%=%); do \
3300908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	  $(EchoCmd) "Uninstalling $(PROJ_libocamldir)/$$i"; \
3310908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	  $(RM) -f "$(PROJ_libocamldir)/$$i"; \
3320908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	done
33349457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarendif
3340908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
3350908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
3360908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen##===- Build ocaml bytecode archive (.ml's -> .cmo's -> .cma) -------------===##
3370908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
33849457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar$(ObjDir)/%.cmo: $(ObjDir)/%.ml
33949457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar	$(Echo) "Compiling $(notdir $<) for $(BuildMode) build"
34049457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar	$(Verb) $(Compile.CMO) $@ $<
34149457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar
34249457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarifdef LIBRARYNAME
343a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksenall-local:: $(OutputCMA)
3440908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenclean-local:: clean-cma
3450908d49c22775d20a88f595845b515f669d528f7Gordon Henrikseninstall-local:: install-cma
3460908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenuninstall-local:: uninstall-cma
3470908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
348a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen$(OutputCMA): $(LibraryCMA) $(OcamlDir)/.dir
349a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(CP) -f $< $@
350a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
3510908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen$(LibraryCMA): $(ObjectsCMO) $(OcamlDir)/.dir
3520908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Archiving $(notdir $@) for $(BuildMode) build"
3530908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(Archive.CMA) $@ $(ObjectsCMO)
3540908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
3550908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenclean-cma::
356a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(RM) -f $(OutputCMA) $(UsedLibNames:%=$(OcamlDir)/%)
3570908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
358a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henrikseninstall-cma:: $(OutputCMA)
3590908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Installing $(BuildMode) $(DestCMA)"
3600908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(MKDIR) $(PROJ_libocamldir)
361a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(DataInstall) $(OutputCMA) "$(DestCMA)"
3620908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
3630908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenuninstall-cma::
3640908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Uninstalling $(DestCMA)"
3650908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	-$(Verb) $(RM) -f $(DestCMA)
36649457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarendif
3670908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
3680908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen##===- Build optimized ocaml archive (.ml's -> .cmx's -> .cmxa, .a) -------===##
3690908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
3700908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# The ocamlopt compiler is supported on a set of targets disjoint from LLVM's.
3710908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# If unavailable, 'configure' will not define OCAMLOPT in Makefile.config.
3720908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenifdef OCAMLOPT
3730908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
37449457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar$(OcamlDir)/%.cmx: $(ObjDir)/%.cmx
37549457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar	$(Verb) $(CP) -f $< $@
37649457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar
37749457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar$(ObjDir)/%.cmx: $(ObjDir)/%.ml
37849457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar	$(Echo) "Compiling optimized $(notdir $<) for $(BuildMode) build"
37949457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar	$(Verb) $(Compile.CMX) $@ $<
38049457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar
38149457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarifdef LIBRARYNAME
382a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksenall-local:: $(OutputCMXA) $(OutputsCMX)
3830908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenclean-local:: clean-cmxa
3840908d49c22775d20a88f595845b515f669d528f7Gordon Henrikseninstall-local:: install-cmxa
3850908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenuninstall-local:: uninstall-cmxa
3860908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
387a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen$(OutputCMXA): $(LibraryCMXA)
388a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(CP) -f $< $@
389a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(CP) -f $(<:.cmxa=.a) $(@:.cmxa=.a)
390a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
3910908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen$(LibraryCMXA): $(ObjectsCMX)
3920908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Archiving $(notdir $@) for $(BuildMode) build"
3930908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(Archive.CMXA) $@ $(ObjectsCMX)
3940908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(RM) -f $(@:.cmxa=.o)
3950908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
3960908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenclean-cmxa::
3974b169cd1ebf96d8ed71505a1e1bde3764747361aGordon Henriksen	$(Verb) $(RM) -f $(OutputCMXA) $(OutputCMXA:.cmxa=.a) $(OutputsCMX)
3980908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
399a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henrikseninstall-cmxa:: $(OutputCMXA) $(OutputsCMX)
4000908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(MKDIR) $(PROJ_libocamldir)
4010908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Installing $(BuildMode) $(DestCMXA)"
402a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(DataInstall) $(OutputCMXA) $(DestCMXA)
4030908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Installing $(BuildMode) $(DestCMXA:.cmxa=.a)"
404a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(DataInstall) $(OutputCMXA:.cmxa=.a) $(DestCMXA:.cmxa=.a)
405a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) for i in $(OutputsCMX:$(OcamlDir)/%=%); do \
4060908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	  $(EchoCmd) "Installing $(BuildMode) $(PROJ_libocamldir)/$$i"; \
4070908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	  $(DataInstall) $(OcamlDir)/$$i "$(PROJ_libocamldir)/$$i"; \
4080908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	done
4090908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
410a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksenuninstall-cmxa::
4110908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Uninstalling $(DestCMXA)"
4120908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(RM) -f $(DestCMXA)
4130908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Uninstalling $(DestCMXA:.cmxa=.a)"
4140908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(RM) -f $(DestCMXA:.cmxa=.a)
415a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) for i in $(OutputsCMX:$(OcamlDir)/%=%); do \
4160908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	  $(EchoCmd) "Uninstalling $(PROJ_libocamldir)/$$i"; \
4170908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	  $(RM) -f $(PROJ_libocamldir)/$$i; \
4180908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	done
41949457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarendif
42049457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarendif
42149457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar
42249457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar##===- Build executables --------------------------------------------------===##
42349457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar
42449457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarifdef TOOLNAME
42549457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarall-local:: $(OutputEXE)
42649457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarclean-local:: clean-exe
42749457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar
42849457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar$(OutputEXE): $(ToolEXE) $(OcamlDir)/.dir
42949457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar	$(Verb) $(CP) -f $< $@
4300908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
43149457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarifndef OCAMLOPT
43249457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar$(ToolEXE): $(ObjectsCMO) $(OcamlDir)/.dir
43349457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar	$(Echo) "Archiving $(notdir $@) for $(BuildMode) build"
43401b4ccb6f7f59373c397274b82b3d65701336c03Erick Tryzelaar	$(Verb) $(Archive.EXE) $@ $(ObjectsCMO)
43549457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarelse
43649457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar$(ToolEXE): $(ObjectsCMX) $(OcamlDir)/.dir
43749457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar	$(Echo) "Archiving $(notdir $@) for $(BuildMode) build"
43801b4ccb6f7f59373c397274b82b3d65701336c03Erick Tryzelaar	$(Verb) $(Archive.EXE) $@ $(ObjectsCMX)
43949457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaarendif
4400908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenendif
4410908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
442b04776696359e54153e20c426419fe54b6766473Gordon Henriksen##===- Generate documentation ---------------------------------------------===##
443b04776696359e54153e20c426419fe54b6766473Gordon Henriksen
444b04776696359e54153e20c426419fe54b6766473Gordon Henriksen$(ObjDir)/$(LIBRARYNAME).odoc: $(ObjectsCMI)
445b04776696359e54153e20c426419fe54b6766473Gordon Henriksen	$(Echo) "Documenting $(notdir $@)"
44646c95bbe0616fc37cb56866a57939487f45eca00Bob Wilson	$(Verb) $(OCAMLDOC) -I $(ObjDir) -I $(OcamlDir) -dump $@ $(OcamlHeaders)
447b04776696359e54153e20c426419fe54b6766473Gordon Henriksen
448b04776696359e54153e20c426419fe54b6766473Gordon Henriksenocamldoc: $(ObjDir)/$(LIBRARYNAME).odoc
4490908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
4500908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen##===- Debugging gunk -----------------------------------------------------===##
4510908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenprintvars:: printcamlvars
4520908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
4530908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenprintcamlvars::
4540908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "LLVM_CONFIG  : " '$(LLVM_CONFIG)'
4550908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "OCAMLCFLAGS  : " '$(OCAMLCFLAGS)'
4560908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "OCAMLAFLAGS  : " '$(OCAMLAFLAGS)'
4570908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "OCAMLC       : " '$(OCAMLC)'
4580908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "OCAMLOPT     : " '$(OCAMLOPT)'
459a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Echo) "OCAMLDEP     : " '$(OCAMLDEP)'
4600908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Compile.CMI  : " '$(Compile.CMI)'
4610908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Compile.CMO  : " '$(Compile.CMO)'
4620908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Archive.CMA  : " '$(Archive.CMA)'
4630908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Compile.CMX  : " '$(Compile.CMX)'
4640908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Archive.CMXA : " '$(Archive.CMXA)'
4650908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "CAML_LIBDIR  : " '$(CAML_LIBDIR)'
4660908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "LibraryCMA   : " '$(LibraryCMA)'
4670908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "LibraryCMXA  : " '$(LibraryCMXA)'
4681ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov	$(Echo) "SharedLib    : " '$(SharedLib)'
469a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Echo) "OcamlSources1: " '$(OcamlSources1)'
47049457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar	$(Echo) "OcamlSources2: " '$(OcamlSources2)'
4710908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "OcamlSources : " '$(OcamlSources)'
47249457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar	$(Echo) "OcamlHeaders1: " '$(OcamlHeaders1)'
47349457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar	$(Echo) "OcamlHeaders2: " '$(OcamlHeaders2)'
474a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Echo) "OcamlHeaders : " '$(OcamlHeaders)'
4750908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "ObjectsCMI   : " '$(ObjectsCMI)'
4760908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "ObjectsCMO   : " '$(ObjectsCMO)'
4770908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "ObjectsCMX   : " '$(ObjectsCMX)'
4780908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "OCAML_LIBDIR : " '$(OCAML_LIBDIR)'
4790908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "DestA        : " '$(DestA)'
4800908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "DestCMA      : " '$(DestCMA)'
4810908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "DestCMXA     : " '$(DestCMXA)'
4821ba15ab1340e07d3456e6b91574f15423bdd30e6Peter Zotov	$(Echo) "DestSharedLib: " '$(DestSharedLib)'
4830908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "UsedLibs     : " '$(UsedLibs)'
4840908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "UsedLibNames : " '$(UsedLibNames)'
4850908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
4860908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen.PHONY: printcamlvars   build-cmis \
4870908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen            clean-a     clean-cmis     clean-cma     clean-cmxa \
4880908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen          install-a   install-cmis   install-cma   install-cmxa \
48949457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar          install-exe \
49049457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar		uninstall-a uninstall-cmis uninstall-cma uninstall-cmxa \
49149457b81589c6a3ef384caa8fdf1463ad2ada7c7Erick Tryzelaar		uninstall-exe
492