60 lines
2.8 KiB
Makefile
60 lines
2.8 KiB
Makefile
#**************************************************************************
|
|
#* *
|
|
#* OCaml *
|
|
#* *
|
|
#* Gabriel Scherer, projet Parsifal, INRIA Saclay *
|
|
#* *
|
|
#* Copyright 2019 Institut National de Recherche en Informatique et *
|
|
#* en Automatique. *
|
|
#* *
|
|
#* All rights reserved. This file is distributed under the terms of *
|
|
#* the GNU Lesser General Public License version 2.1, with the *
|
|
#* special exception on linking described in the file LICENSE. *
|
|
#* *
|
|
#**************************************************************************
|
|
|
|
# This Makefile should be included.
|
|
|
|
# It expects:
|
|
# - Makefile.common to be included as well
|
|
# - a ROOTDIR variable pointing to the repository root
|
|
# relative to the including Makefile
|
|
|
|
# It exports definitions of BEST_OCAML{C,OPT,LEX,DEP} commands that
|
|
# run to either the bytecode binary built in the repository or the
|
|
# native binary, if available. Note that they never use the boot/
|
|
# versions: we assume that ocamlc, ocamlopt, etc. have been run first.
|
|
|
|
# Set this to empty to force use of the bytecode compilers at all times
|
|
USE_BEST_BINARIES ?= true
|
|
|
|
check_not_stale = \
|
|
$(if $(shell test $(ROOTDIR)/$1 -nt $(ROOTDIR)/$2 && echo stale), \
|
|
$(info Warning: we are not using the native binary $2 \
|
|
because it is older than the bytecode binary $1; \
|
|
you should silence this warning by either removing $2 \
|
|
or rebuilding it (or `touch`-ing it) if you want it used.), \
|
|
ok)
|
|
|
|
choose_best = $(strip $(if \
|
|
$(and $(USE_BEST_BINARIES),$(wildcard $(ROOTDIR)/$1.opt$(EXE)),$(strip \
|
|
$(call check_not_stale,$1$(EXE),$1.opt$(EXE)))), \
|
|
$(ROOTDIR)/$1.opt$(EXE), \
|
|
$(CAMLRUN) $(ROOTDIR)/$1$(EXE)))
|
|
|
|
BEST_OCAMLC := $(call choose_best,ocamlc)
|
|
BEST_OCAMLOPT := $(call choose_best,ocamlopt)
|
|
BEST_OCAMLLEX := $(call choose_best,lex/ocamllex)
|
|
|
|
# We want to be able to compute dependencies even if the bytecode compiler
|
|
# is not built yet, using the bootstrap compiler.
|
|
|
|
# Unlike other tools, there is no risk of mixing incompatible
|
|
# bootrap-compiler and host-compiler object files, as ocamldep only
|
|
# produces text output.
|
|
BEST_OCAMLDEP := $(strip $(if \
|
|
$(and $(USE_BEST_BINARIES),$(wildcard $(ROOTDIR)/ocamlc.opt$(EXE)),$(strip \
|
|
$(call check_not_stale,boot/ocamlc,ocamlc.opt$(EXE)))), \
|
|
$(ROOTDIR)/ocamlc.opt$(EXE) -depend, \
|
|
$(BOOT_OCAMLC) -depend))
|