##===- tools/ml/Makefile -----------------------------------*- 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

# CFLAGS needs to be set before Makefile.rules is included.
CXX.Flags += -I"$(shell $(OCAMLC) -where)"
C.Flags += -I"$(shell $(OCAMLC) -where)"

include $(LEVEL)/Makefile.common

# 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 $(UsedComponents))
UsedLibNames = $(shell $(LLVM_CONFIG) --libnames $(UsedComponents))
endif
endif

# Tools
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) $(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) $(OCAMLDEBUGFLAG) -o)
Archive.CMXA := $(strip $(OCAMLOPT) -a $(OCAMLAFLAGS) $(OCAMLDEBUGFLAG) -o)

# Source files
OcamlSources1 := $(sort $(wildcard $(PROJ_SRC_DIR)/*.ml))
OcamlHeaders1 := $(OcamlSources1:.ml=.mli)

OcamlSources := $(OcamlSources1:$(PROJ_SRC_DIR)/%=$(ObjDir)/%)
OcamlHeaders := $(OcamlHeaders1:$(PROJ_SRC_DIR)/%=$(ObjDir)/%)

# Intermediate files
LibraryCMA   := $(ObjDir)/$(LIBRARYNAME).cma
LibraryCMXA  := $(ObjDir)/$(LIBRARYNAME).cmxa
ObjectsCMI   := $(OcamlSources:%.ml=%.cmi)
ObjectsCMO   := $(OcamlSources:%.ml=%.cmo)
ObjectsCMX   := $(OcamlSources:%.ml=%.cmx)

# Output files
#   The .cmo files are the only intermediates; all others are to be installed.
LibraryA   := $(OcamlDir)/lib$(LIBRARYNAME).a
OutputCMA  := $(LibraryCMA:$(ObjDir)/%.cma=$(OcamlDir)/%.cma)
OutputCMXA := $(LibraryCMXA:$(ObjDir)/%.cmxa=$(OcamlDir)/%.cmxa)
OutputsCMI := $(ObjectsCMI:$(ObjDir)/%.cmi=$(OcamlDir)/%.cmi)
OutputsCMX := $(ObjectsCMX:$(ObjDir)/%.cmx=$(OcamlDir)/%.cmx)
OutputLibs := $(UsedLibNames:%=$(OcamlDir)/%)

# Installation targets
DestA    := $(PROJ_libocamldir)/lib$(LIBRARYNAME).a
DestCMA  := $(PROJ_libocamldir)/$(LIBRARYNAME).cma
DestCMXA := $(PROJ_libocamldir)/$(LIBRARYNAME).cmxa
DestLibs := $(UsedLibNames:%=$(PROJ_libocamldir)/%)


##===- 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 $< $@

$(ObjDir)/$(LIBRARYNAME).ocamldep: $(OcamlSources) $(OcamlHeaders) \
                                   $(OcamlDir)/.dir $(ObjDir)/.dir
	$(Verb) $(OCAMLDEP) $(OCAMLCFLAGS) $(OcamlSources) $(OcamlHeaders) > $@

$(ObjectsCMI): $(UsedOcamlInterfaces:%=$(OcamlDir)/%.cmi)

-include $(ObjDir)/$(LIBRARYNAME).ocamldep


##===- Build static library from C sources --------------------------------===##

ifneq ($(ObjectsO),)
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


##===- Deposit dependent libraries adjacent to Ocaml libs -----------------===##

all-local:: build-deplibs
clean-local:: clean-deplibs
install-local:: install-deplibs
uninstall-local:: uninstall-deplibs

build-deplibs: $(OutputLibs)

$(OcamlDir)/%.a: $(LibDir)/%.a
	$(Verb) ln -sf $< $@

$(OcamlDir)/%.o: $(LibDir)/%.o
	$(Verb) ln -sf $< $@

clean-deplibs:
	$(Verb) rm -f $(OutputLibs)

install-deplibs:
	$(Verb) for i in $(DestLibs:$(PROJ_libocamldir)/%=%); do \
	  ln -sf "$(PROJ_libdir)/$$i" "$(PROJ_libocamldir)/$$i"; \
	done

uninstall-deplibs:
	$(Verb) rm -f $(DestLibs)


##===- Build ocaml interfaces (.mli's -> .cmi's) --------------------------===##

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 $(OutputsCMI:$(OcamlDir)/%=%); do \
	  $(EchoCmd) "Installing $(BuildMode) $(PROJ_libocamldir)/$$i"; \
	  $(DataInstall) $(OcamlDir)/$$i "$(PROJ_libocamldir)/$$i"; \
	done
	$(Verb) for i in $(OcamlHeaders:$(ObjDir)/%=%); do \
	  $(EchoCmd) "Installing $(BuildMode) $(PROJ_libocamldir)/$$i"; \
	  $(DataInstall) $(ObjDir)/$$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


##===- Build ocaml bytecode archive (.ml's -> .cmo's -> .cma) -------------===##

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)

$(ObjDir)/%.cmo: $(ObjDir)/%.ml
	$(Echo) "Compiling $(notdir $<) for $(BuildMode) build"
	$(Verb) $(Compile.CMO) $@ $<

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)


##===- 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 not define OCAMLOPT in Makefile.config.
ifdef OCAMLOPT

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)

$(OcamlDir)/%.cmx: $(ObjDir)/%.cmx
	$(Verb) $(CP) -f $< $@

$(LibraryCMXA): $(ObjectsCMX)
	$(Echo) "Archiving $(notdir $@) for $(BuildMode) build"
	$(Verb) $(Archive.CMXA) $@ $(ObjectsCMX)
	$(Verb) $(RM) -f $(@:.cmxa=.o)

$(ObjDir)/%.cmx: $(ObjDir)/%.ml
	$(Echo) "Compiling optimized $(notdir $<) for $(BuildMode) build"
	$(Verb) $(Compile.CMX) $@ $<

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

##===- 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

printcamlvars::
	$(Echo) "LLVM_CONFIG  : " '$(LLVM_CONFIG)'
	$(Echo) "OCAMLCFLAGS  : " '$(OCAMLCFLAGS)'
	$(Echo) "OCAMLAFLAGS  : " '$(OCAMLAFLAGS)'
	$(Echo) "OCAMLC       : " '$(OCAMLC)'
	$(Echo) "OCAMLOPT     : " '$(OCAMLOPT)'
	$(Echo) "OCAMLDEP     : " '$(OCAMLDEP)'
	$(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) "LibraryCMA   : " '$(LibraryCMA)'
	$(Echo) "LibraryCMXA  : " '$(LibraryCMXA)'
	$(Echo) "OcamlSources1: " '$(OcamlSources1)'
	$(Echo) "OcamlSources : " '$(OcamlSources)'
	$(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) "UsedLibs     : " '$(UsedLibs)'
	$(Echo) "UsedLibNames : " '$(UsedLibNames)'

.PHONY: printcamlvars   build-cmis \
            clean-a     clean-cmis     clean-cma     clean-cmxa \
          install-a   install-cmis   install-cma   install-cmxa \
		uninstall-a uninstall-cmis uninstall-cma uninstall-cmxa
