-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile.common
More file actions
75 lines (63 loc) · 2.27 KB
/
Makefile.common
File metadata and controls
75 lines (63 loc) · 2.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
ifndef OCAMLOUTDIR
OCAMLOUTDIR=./
endif
OCAMLFLAGS=-g -annot -dtypes -I $(OCAMLOUTDIR)
OCAMLOPTFLAGS=$(OCAMLFLAGS)
findprog=$(firstword $(wildcard $(addsuffix /$(1),$(subst :, ,$(PATH)))))
ifndef target
OCAMLC := $(call findprog,ocamlc.opt)
OCAMLOPT := $(subst ocamlc,ocamlopt,$(OCAMLC))
PREFIX := $(dir $(OCAMLC))
EXEEXT=
else ifeq ($(target),win32)
OCAMLC := $(call findprog,i*86-w64-mingw32-ocamlc)
OCAMLOPT := $(subst ocamlc,ocamlopt,$(OCAMLC))
PREFIX := $(patsubst %ocamlc,%,$(OCAMLC))
EXEEXT=.exe
else
OCAMLC := $(call findprog,x86_64-w64-mingw32-ocamlc)
OCAMLOPT := $(subst ocamlc,ocamlopt,$(OCAMLC))
PREFIX := $(patsubst %ocamlc,%,$(OCAMLC))
EXEEXT=.exe
endif
# Use typerex unless cross-compiling, or typerex is set to 'no'.
ifndef target
ifneq ($(typerex),no)
WRAPPER := $(call findprog,ocp-wrapper)
OCAMLC := $(if $(WRAPPER),$(WRAPPER) -save-types ocamlc.opt,$(OCAMLC))
OCAMLOPT := $(if $(WRAPPER),$(WRAPPER) -save-types ocamlopt.opt,$(OCAMLOPT))
endif
endif
OCAMLCP := $(PREFIX)ocamlcp -p a
OCAMLDEP := $(PREFIX)ocamldep
OCAMLMKLIB = $(PREFIX)ocamlmklib
OCAMLYACC = ocamlyacc
OCAMLLEX = ocamllex
OCAMLFIND = ocamlfind
cmo-files = $(patsubst %.ml,$(OCAMLOUTDIR)/%.cmo,$(filter-out %.mli,$(1)))
cmx-files = $(patsubst %.ml,$(OCAMLOUTDIR)/%.cmx,$(filter-out %.mli,$(1)))
cmi-files = $(patsubst %.mli,$(OCAMLOUTDIR)/%.cmi,$(filter %.mli,$(1)))
.DEFAULT_GOAL_TMP:=$(.DEFAULT_GOAL)
$(OCAMLOUTDIR):
mkdir -p $@
.DEFAULT_GOAL:=$(.DEFAULT_GOAL_TMP)
OCAMLOUTPUTS=.ocamldeps *.annot *.cm[aiotx]* *.a *.o *.exe
CLEAN=.ocamldeps *.output *.exe
COMPILE = @echo " $(1) $(2)" && $(3) || \
(! echo "===\nCompiling $2 failed with command line: \n$(3)\n===")
$(OCAMLOUTDIR)/%.cmx: CMD=$(OCAMLOPT) $(OCAMLOPTFLAGS) -o $@ $(LIBDIRS) -c $<
$(OCAMLOUTDIR)/%.cmx: %.ml | $(OCAMLOUTDIR)
$(call COMPILE,OCAMLOPT,$<,$(CMD))
$(OCAMLOUTDIR)/%.cmo:
CMD = $(if $(OCAMLPROF),$(OCAMLCP),$(OCAMLC))
CMDNAME = $(if $(OCAMLPROF),OCAMLCP,OCAMLC)
ARGS = $(OCAMLFLAGS) $(LIBDIRS) -o $@ -c $<
$(OCAMLOUTDIR)/%.cmo: %.ml | $(OCAMLOUTDIR)
$(call COMPILE,$(CMDNAME),$<,$(CMD) $(ARGS))
$(OCAMLOUTDIR)/%.cmi: CMD=$(OCAMLC) $(OCAMLFLAGS) $(LIBDIRS) -o $@ -c $<
$(OCAMLOUTDIR)/%.cmi: %.mli | $(OCAMLOUTDIR)
$(call COMPILE,OCAMLC,$<,$(CMD))
%.ml: %.mll
$(OCAMLLEX) -o $@ $<
%.ml: %.mly
$(OCAMLYACC) -v $<