Makefile.ocaml revision 57360d1f1cede3b26744d0ce3ade814fcc0f332d
10908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen##===- tools/ml/Makefile -----------------------------------*- 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# 
100908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# 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# 
13c0491ac8b6c24a7d0db8c0a60f76cfb1d66f84abGordon Henriksen# 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.
233b802476d24a6b8c7d1e645f99b4c25ef6e97809Gordon HenriksenCFLAGS += -I$(shell $(OCAMLC) -where)
240908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
250908d49c22775d20a88f595845b515f669d528f7Gordon Henrikseninclude $(LEVEL)/Makefile.common
260908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
270908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# Intentionally ignore PROJ_prefix here. We want the ocaml stdlib. However, the
281d4e0782ba9761e3c664de53b837b74c0c818ff1Gordon Henriksen# user can override this with OCAML_LIBDIR or configure --with-ocaml-libdir=.
290908d49c22775d20a88f595845b515f669d528f7Gordon HenriksenPROJ_libocamldir := $(DESTDIR)$(OCAML_LIBDIR)
300908d49c22775d20a88f595845b515f669d528f7Gordon HenriksenOcamlDir := $(LibDir)/ocaml
310908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
320908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# Info from llvm-config and similar
330908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenifdef UsedComponents
340908d49c22775d20a88f595845b515f669d528f7Gordon HenriksenUsedLibs = $(shell $(LLVM_CONFIG) --libs $(UsedComponents))
350908d49c22775d20a88f595845b515f669d528f7Gordon HenriksenUsedLibNames = $(shell $(LLVM_CONFIG) --libnames $(UsedComponents))
360908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenendif
370908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
380908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# Tools
39a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon HenriksenOCAMLCFLAGS += -I $(OcamlDir) -I $(ObjDir)
400908d49c22775d20a88f595845b515f669d528f7Gordon HenriksenOCAMLAFLAGS += $(patsubst %,-cclib %, \
41ed29a28464d1b19d3e043a4cf1e95eedca745842Gordon Henriksen                 $(filter-out -L$(LibDir),-l$(LIBRARYNAME) \
42ed29a28464d1b19d3e043a4cf1e95eedca745842Gordon Henriksen                                          $(shell $(LLVM_CONFIG) --ldflags)) \
43ed29a28464d1b19d3e043a4cf1e95eedca745842Gordon Henriksen                                          $(UsedLibs))
442e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen 
454e20a09b6fcf616f1a7bbe0dba4b5fa133b8a5e5Gordon Henriksen# -g was introduced in 3.10.0.
464e20a09b6fcf616f1a7bbe0dba4b5fa133b8a5e5Gordon Henriksen#ifneq ($(ENABLE_OPTIMIZED),1)
474e20a09b6fcf616f1a7bbe0dba4b5fa133b8a5e5Gordon Henriksen#  OCAMLDEBUGFLAG := -g
484e20a09b6fcf616f1a7bbe0dba4b5fa133b8a5e5Gordon Henriksen#endif
490908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
502e855e68d861224c9b61e2bc9cecad1536b1534bGordon HenriksenCompile.CMI  := $(strip $(OCAMLC) -c $(OCAMLCFLAGS) $(OCAMLDEBUGFLAG) -o)
512e855e68d861224c9b61e2bc9cecad1536b1534bGordon HenriksenCompile.CMO  := $(strip $(OCAMLC) -c $(OCAMLCFLAGS) $(OCAMLDEBUGFLAG) -o)
522e855e68d861224c9b61e2bc9cecad1536b1534bGordon HenriksenArchive.CMA  := $(strip $(OCAMLC) -a -custom $(OCAMLAFLAGS) $(OCAMLDEBUGFLAG) \
532e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen                                  -o)
540908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
552e855e68d861224c9b61e2bc9cecad1536b1534bGordon HenriksenCompile.CMX  := $(strip $(OCAMLOPT) -c $(OCAMLCFLAGS) $(OCAMLDEBUGFLAG) -o)
562e855e68d861224c9b61e2bc9cecad1536b1534bGordon HenriksenArchive.CMXA := $(strip $(OCAMLOPT) -a $(OCAMLAFLAGS) $(OCAMLDEBUGFLAG) -o)
570908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
580908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# Source files
59a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon HenriksenOcamlSources1 := $(sort $(wildcard $(PROJ_SRC_DIR)/*.ml))
60a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon HenriksenOcamlHeaders1 := $(OcamlSources1:.ml=.mli)
61a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
62a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon HenriksenOcamlSources := $(OcamlSources1:$(PROJ_SRC_DIR)/%=$(ObjDir)/%)
63a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon HenriksenOcamlHeaders := $(OcamlHeaders1:$(PROJ_SRC_DIR)/%=$(ObjDir)/%)
64a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
65a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen# Intermediate files
66a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon HenriksenLibraryCMA   := $(ObjDir)/$(LIBRARYNAME).cma
67a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon HenriksenLibraryCMXA  := $(ObjDir)/$(LIBRARYNAME).cmxa
68a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon HenriksenObjectsCMI   := $(OcamlSources:%.ml=%.cmi)
69a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon HenriksenObjectsCMO   := $(OcamlSources:%.ml=%.cmo)
70a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon HenriksenObjectsCMX   := $(OcamlSources:%.ml=%.cmx)
71a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
72a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen# Output files
73a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen#   The .cmo files are the only intermediates; all others are to be installed.
74a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon HenriksenLibraryA   := $(OcamlDir)/lib$(LIBRARYNAME).a
75a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon HenriksenOutputCMA  := $(LibraryCMA:$(ObjDir)/%.cma=$(OcamlDir)/%.cma)
76a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon HenriksenOutputCMXA := $(LibraryCMXA:$(ObjDir)/%.cmxa=$(OcamlDir)/%.cmxa)
77a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon HenriksenOutputsCMI := $(ObjectsCMI:$(ObjDir)/%.cmi=$(OcamlDir)/%.cmi)
78a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon HenriksenOutputsCMX := $(ObjectsCMX:$(ObjDir)/%.cmx=$(OcamlDir)/%.cmx)
79516276edd4adadf8d521ae6ba29713dacc353c0aGordon HenriksenOutputLibs := $(UsedLibNames:%=$(OcamlDir)/%)
800908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
810908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# Installation targets
820908d49c22775d20a88f595845b515f669d528f7Gordon HenriksenDestA    := $(PROJ_libocamldir)/lib$(LIBRARYNAME).a
830908d49c22775d20a88f595845b515f669d528f7Gordon HenriksenDestCMA  := $(PROJ_libocamldir)/$(LIBRARYNAME).cma
840908d49c22775d20a88f595845b515f669d528f7Gordon HenriksenDestCMXA := $(PROJ_libocamldir)/$(LIBRARYNAME).cmxa
85516276edd4adadf8d521ae6ba29713dacc353c0aGordon HenriksenDestLibs := $(UsedLibNames:%=$(PROJ_libocamldir)/%)
860908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
870908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
88a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen##===- Dependencies -------------------------------------------------------===##
89a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen# Copy the sources into the intermediate directory because older ocamlc doesn't
90a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen# support -o except when linking (outputs are placed next to inputs).
91a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
92a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen$(ObjDir)/%.mli: $(PROJ_SRC_DIR)/%.mli $(ObjDir)/.dir
93a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(CP) -f $< $@
94a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
95a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen$(ObjDir)/%.ml: $(PROJ_SRC_DIR)/%.ml $(ObjDir)/.dir
96a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(CP) -f $< $@
97a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
98ab4456f10a72f3a7c73dac0e95578b9b7e4250b8Gordon Henriksen$(ObjDir)/$(LIBRARYNAME).ocamldep: $(OcamlSources) $(OcamlHeaders) \
99ab4456f10a72f3a7c73dac0e95578b9b7e4250b8Gordon Henriksen                                   $(OcamlDir)/.dir $(ObjDir)/.dir
100a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(OCAMLDEP) $(OCAMLCFLAGS) $(OcamlSources) $(OcamlHeader) > $@
101a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
10246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen$(ObjectsCMI): $(UsedOcamlInterfaces:%=$(OcamlDir)/%.cmi)
10346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen
104a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen-include $(ObjDir)/$(LIBRARYNAME).ocamldep
105a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
106a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
1070908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen##===- Build static library from C sources --------------------------------===##
1080908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
1090908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenall-local:: $(LibraryA)
1100908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenclean-local:: clean-a
1110908d49c22775d20a88f595845b515f669d528f7Gordon Henrikseninstall-local:: install-a
1120908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenuninstall-local:: uninstall-a
1130908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
1140908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen$(LibraryA): $(ObjectsO) $(OcamlDir)/.dir
1150908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Building $(BuildMode) $(notdir $@)"
1160908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	-$(Verb) $(RM) -f $@
1170908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(Archive) $@ $(ObjectsO)
1180908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(Ranlib) $@
1190908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
1200908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenclean-a::
1210908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	-$(Verb) $(RM) -f $(LibraryA)
1220908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
1230908d49c22775d20a88f595845b515f669d528f7Gordon Henrikseninstall-a:: $(LibraryA)
1240908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Installing $(BuildMode) $(DestA)"
1250908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(MKDIR) $(PROJ_libocamldir)
1260908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(LTInstall) $(LibraryA) $(DestA)
1270908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) 
1280908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
1290908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenuninstall-a::
1300908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Uninstalling $(DestA)"
1310908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	-$(Verb) $(RM) -f $(DestA)
1320908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
1330908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
134516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen##===- Deposit dependent libraries adjacent to Ocaml libs -----------------===##
135516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen
136516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksenall-local:: build-deplibs
137516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksenclean-local:: clean-deplibs
138516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henrikseninstall-local:: install-deplibs
139516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksenuninstall-local:: uninstall-deplibs
140516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen
141516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksenbuild-deplibs: $(OutputLibs)
142516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen
143516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen$(OcamlDir)/%.a: $(LibDir)/%.a
144516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen	$(Verb) ln -sf $< $@
145516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen
1462e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen$(OcamlDir)/%.o: $(LibDir)/%.o
1472e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen	$(Verb) ln -sf $< $@
1482e855e68d861224c9b61e2bc9cecad1536b1534bGordon Henriksen
149516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksenclean-deplibs:
150516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen	$(Verb) rm -f $(OutputLibs)
151516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen
152516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henrikseninstall-deplibs:
153516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen	$(Verb) for i in $(DestLibs:$(PROJ_libocamldir)/%=%); do \
154516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen	  ln -sf "$(PROJ_libdir)/$$i" "$(PROJ_libocamldir)/$$i"; \
155516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen	done
156516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen
157516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksenuninstall-deplibs:
158516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen	$(Verb) rm -f $(DestLibs)
159516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen
160516276edd4adadf8d521ae6ba29713dacc353c0aGordon Henriksen
1610908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen##===- Build ocaml interfaces (.mli's -> .cmi's) --------------------------===##
1620908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
1630908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenall-local:: build-cmis
1640908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenclean-local:: clean-cmis
1650908d49c22775d20a88f595845b515f669d528f7Gordon Henrikseninstall-local:: install-cmis
1660908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenuninstall-local:: uninstall-cmis
1670908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
168a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksenbuild-cmis: $(OutputsCMI)
169a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
170a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen$(OcamlDir)/%.cmi: $(ObjDir)/%.cmi $(OcamlDir)/.dir
171a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(CP) -f $< $@
1720908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
173a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen$(ObjDir)/%.cmi: $(ObjDir)/%.mli $(ObjDir)/.dir
1740908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Compiling $(notdir $<) for $(BuildMode) build"
1750908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(Compile.CMI) $@ $<
1760908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
1770908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenclean-cmis::
178a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	-$(Verb) $(RM) -f $(OutputsCMI)
1790908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
1800908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# Also install the .mli's (headers) as documentation.
181a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henrikseninstall-cmis: $(OutputsCMI) $(OcamlHeaders)
1820908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(MKDIR) $(PROJ_libocamldir)
183a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) for i in $(OutputsCMI:$(OcamlDir)/%=%); do \
1840908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	  $(EchoCmd) "Installing $(BuildMode) $(PROJ_libocamldir)/$$i"; \
1850908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	  $(DataInstall) $(OcamlDir)/$$i "$(PROJ_libocamldir)/$$i"; \
1860908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	done
187a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) for i in $(OcamlHeaders:$(ObjDir)/%=%); do \
1880908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	  $(EchoCmd) "Installing $(BuildMode) $(PROJ_libocamldir)/$$i"; \
189a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	  $(DataInstall) $(ObjDir)/$$i "$(PROJ_libocamldir)/$$i"; \
1900908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	done
1910908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
1920908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenuninstall-cmis::
193a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) for i in $(OutputsCMI:$(OcamlDir)/%=%); do \
1940908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	  $(EchoCmd) "Uninstalling $(PROJ_libocamldir)/$$i"; \
1950908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	  $(RM) -f "$(PROJ_libocamldir)/$$i"; \
1960908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	done
197a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) for i in $(OcamlHeaders:$(ObjDir)/%=%); do \
1980908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	  $(EchoCmd) "Uninstalling $(PROJ_libocamldir)/$$i"; \
1990908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	  $(RM) -f "$(PROJ_libocamldir)/$$i"; \
2000908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	done
2010908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
2020908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
2030908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen##===- Build ocaml bytecode archive (.ml's -> .cmo's -> .cma) -------------===##
2040908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
205a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksenall-local:: $(OutputCMA)
2060908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenclean-local:: clean-cma
2070908d49c22775d20a88f595845b515f669d528f7Gordon Henrikseninstall-local:: install-cma
2080908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenuninstall-local:: uninstall-cma
2090908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
210a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen$(OutputCMA): $(LibraryCMA) $(OcamlDir)/.dir
211a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(CP) -f $< $@
212a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
2130908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen$(LibraryCMA): $(ObjectsCMO) $(OcamlDir)/.dir
2140908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Archiving $(notdir $@) for $(BuildMode) build"
2150908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(Archive.CMA) $@ $(ObjectsCMO)
2160908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
217a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen$(ObjDir)/%.cmo: $(ObjDir)/%.ml
2180908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Compiling $(notdir $<) for $(BuildMode) build"
2190908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(Compile.CMO) $@ $<
2200908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
2210908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenclean-cma::
222a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(RM) -f $(OutputCMA) $(UsedLibNames:%=$(OcamlDir)/%)
2230908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
224a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henrikseninstall-cma:: $(OutputCMA)
2250908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Installing $(BuildMode) $(DestCMA)"
2260908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(MKDIR) $(PROJ_libocamldir)
227a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(DataInstall) $(OutputCMA) "$(DestCMA)"
2280908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
2290908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenuninstall-cma::
2300908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Uninstalling $(DestCMA)"
2310908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	-$(Verb) $(RM) -f $(DestCMA)
2320908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
2330908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
2340908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen##===- Build optimized ocaml archive (.ml's -> .cmx's -> .cmxa, .a) -------===##
2350908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
2360908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# The ocamlopt compiler is supported on a set of targets disjoint from LLVM's.
2370908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen# If unavailable, 'configure' will not define OCAMLOPT in Makefile.config.
2380908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenifdef OCAMLOPT
2390908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
240a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksenall-local:: $(OutputCMXA) $(OutputsCMX)
2410908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenclean-local:: clean-cmxa
2420908d49c22775d20a88f595845b515f669d528f7Gordon Henrikseninstall-local:: install-cmxa
2430908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenuninstall-local:: uninstall-cmxa
2440908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
245a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen$(OutputCMXA): $(LibraryCMXA)
246a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(CP) -f $< $@
247a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(CP) -f $(<:.cmxa=.a) $(@:.cmxa=.a)
248a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
249a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen$(OcamlDir)/%.cmx: $(ObjDir)/%.cmx
250a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(CP) -f $< $@
251a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen
2520908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen$(LibraryCMXA): $(ObjectsCMX)
2530908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Archiving $(notdir $@) for $(BuildMode) build"
2540908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(Archive.CMXA) $@ $(ObjectsCMX)
2550908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(RM) -f $(@:.cmxa=.o)
2560908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
257a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen$(ObjDir)/%.cmx: $(ObjDir)/%.ml
2580908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Compiling optimized $(notdir $<) for $(BuildMode) build"
2590908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(Compile.CMX) $@ $<
2600908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
2610908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenclean-cmxa::
262a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(RM) -f $(OutputCMXA) $(OutputCMXA:.cmxa=.o) $(OutputsCMX)
2630908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
264a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henrikseninstall-cmxa:: $(OutputCMXA) $(OutputsCMX)
2650908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(MKDIR) $(PROJ_libocamldir)
2660908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Installing $(BuildMode) $(DestCMXA)"
267a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(DataInstall) $(OutputCMXA) $(DestCMXA)
2680908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Installing $(BuildMode) $(DestCMXA:.cmxa=.a)"
269a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) $(DataInstall) $(OutputCMXA:.cmxa=.a) $(DestCMXA:.cmxa=.a)
270a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) for i in $(OutputsCMX:$(OcamlDir)/%=%); do \
2710908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	  $(EchoCmd) "Installing $(BuildMode) $(PROJ_libocamldir)/$$i"; \
2720908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	  $(DataInstall) $(OcamlDir)/$$i "$(PROJ_libocamldir)/$$i"; \
2730908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	done
2740908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
275a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksenuninstall-cmxa::
2760908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Uninstalling $(DestCMXA)"
2770908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(RM) -f $(DestCMXA)
2780908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Uninstalling $(DestCMXA:.cmxa=.a)"
2790908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Verb) $(RM) -f $(DestCMXA:.cmxa=.a)
280a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Verb) for i in $(OutputsCMX:$(OcamlDir)/%=%); do \
2810908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	  $(EchoCmd) "Uninstalling $(PROJ_libocamldir)/$$i"; \
2820908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	  $(RM) -f $(PROJ_libocamldir)/$$i; \
2830908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	done
2840908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
2850908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenendif
2860908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
2870908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
2880908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen##===- Debugging gunk -----------------------------------------------------===##
2890908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenprintvars:: printcamlvars
2900908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
2910908d49c22775d20a88f595845b515f669d528f7Gordon Henriksenprintcamlvars::
2920908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "LLVM_CONFIG  : " '$(LLVM_CONFIG)'
2930908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "OCAMLCFLAGS  : " '$(OCAMLCFLAGS)'
2940908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "OCAMLAFLAGS  : " '$(OCAMLAFLAGS)'
2950908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "OCAMLC       : " '$(OCAMLC)'
2960908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "OCAMLOPT     : " '$(OCAMLOPT)'
297a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Echo) "OCAMLDEP     : " '$(OCAMLDEP)'
2980908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Compile.CMI  : " '$(Compile.CMI)'
2990908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Compile.CMO  : " '$(Compile.CMO)'
3000908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Archive.CMA  : " '$(Archive.CMA)'
3010908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Compile.CMX  : " '$(Compile.CMX)'
3020908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "Archive.CMXA : " '$(Archive.CMXA)'
3030908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "CAML_LIBDIR  : " '$(CAML_LIBDIR)'
3040908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "LibraryCMA   : " '$(LibraryCMA)'
3050908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "LibraryCMXA  : " '$(LibraryCMXA)'
306a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Echo) "OcamlSources1: " '$(OcamlSources1)'
3070908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "OcamlSources : " '$(OcamlSources)'
308a8c3660c1a4be5d4887f1899bc3c8e62b875c6c0Gordon Henriksen	$(Echo) "OcamlHeaders : " '$(OcamlHeaders)'
3090908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "ObjectsCMI   : " '$(ObjectsCMI)'
3100908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "ObjectsCMO   : " '$(ObjectsCMO)'
3110908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "ObjectsCMX   : " '$(ObjectsCMX)'
3120908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "OCAML_LIBDIR : " '$(OCAML_LIBDIR)'
3130908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "DestA        : " '$(DestA)'
3140908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "DestCMA      : " '$(DestCMA)'
3150908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "DestCMXA     : " '$(DestCMXA)'
3160908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "UsedLibs     : " '$(UsedLibs)'
3170908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen	$(Echo) "UsedLibNames : " '$(UsedLibNames)'
3180908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen
3190908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen.PHONY: printcamlvars   build-cmis \
3200908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen            clean-a     clean-cmis     clean-cma     clean-cmxa \
3210908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen          install-a   install-cmis   install-cma   install-cmxa \
3220908d49c22775d20a88f595845b515f669d528f7Gordon Henriksen		uninstall-a uninstall-cmis uninstall-cma uninstall-cmxa
323