Commit | Line | Data |
---|---|---|
feec80c3 C |
1 | # Bundles the original menhirLib package without modifications. |
2 | # This Makefile integrates its build process with coccinelle. | |
3 | ||
4 | # the build process is conventional build of the ml files, with | |
5 | # the exception that all modules are packed as a submodule of | |
6 | # a master module "MenhirLib" instead of an archive file. | |
7 | ||
8 | ifneq ($(MAKECMDGOALS),distclean) | |
9 | include ../../Makefile.config | |
10 | endif | |
11 | ||
d6ce1786 C |
12 | OCAMLCFLAGS ?= -g -dtypes |
13 | OPTFLAGS ?= -g -dtypes | |
14 | ||
feec80c3 C |
15 | VERSION=20120123 |
16 | MENHIRDIR=menhir-$(VERSION) | |
17 | MENHIRLIB=$(MENHIRDIR)/src | |
18 | MENHIRMARKER=$(MENHIRLIB)/.marker | |
19 | ||
d6ce1786 | 20 | OCAMLC_CMD=$(OCAMLC) $(OCAMLCFLAGS) -I $(MENHIRLIB) -thread |
feec80c3 C |
21 | OCAMLOPT_CMD=$(OCAMLOPT) $(OPTFLAGS) -I $(MENHIRLIB) -thread |
22 | OCAMLDEP_CMD=$(OCAMLDEP) -I $(MENHIRLIB) | |
23 | ||
d6ce1786 C |
24 | all: .depend |
25 | @$(MAKE) all-build | |
26 | all-build: .depend menhirLib.cma META | |
27 | ||
28 | all.opt: .depend | |
29 | @$(MAKE) all-opt-build | |
30 | all-opt-build: .depend menhirLib.cmxa META | |
feec80c3 C |
31 | |
32 | clean: | |
33 | rm -f menhirLib.cma menhirLib.cmxa META \ | |
34 | $(MENHIRLIB)/*.cm[ioxa] \ | |
35 | $(MENHIRLIB)/*.o \ | |
36 | $(MENHIRLIB)/engineTypes.mli $(MENHIRLIB)/tableFormat.mli \ | |
37 | menhirLib.cm[ioxa] menhirLib.[oa] \ | |
38 | .depend | |
39 | ||
40 | distclean: clean | |
41 | rm -rf $(MENHIRDIR) | |
42 | ||
43 | $(MENHIRMARKER): $(MENHIRDIR).tar.gz | |
44 | $(TAR) xfvz $< | |
45 | touch $@ | |
46 | ||
47 | $(MENHIRDIR).tar.gz: | |
48 | @echo "$@ not found. Please download it and drop it in this directory ($(pwd))." | |
49 | @false | |
50 | ||
d6ce1786 | 51 | .PHONEY: all all.opt all-build all-opt-build clean distclean depend depend-build |
feec80c3 C |
52 | |
53 | # Sources needed for coccinelle | |
54 | MODULES=infiniteArray packedIntArray rowDisplacement engineTypes \ | |
55 | engine tableFormat tableInterpreter convert | |
56 | ||
57 | MLI=$(MODULES:%=$(MENHIRLIB)/%.mli) | |
58 | SRC=$(MODULES:%=$(MENHIRLIB)/%.ml) | |
59 | ||
60 | # Link | |
61 | menhirLib.cma: .depend $(MLI:.mli=.cmi) $(SRC:.ml=.cmo) | |
62 | $(OCAMLC_CMD) -pack -o menhirLib.cmo $(SRC:.ml=.cmo) | |
63 | $(OCAMLC_CMD) -a -o menhirLib.cma menhirLib.cmo | |
64 | ||
65 | menhirLib.cmxa: .depend $(MLI:.mli=.cmi) $(SRC:.ml=.cmx) | |
66 | $(OCAMLOPT) -pack -o menhirLib.cmx $(SRC:.ml=.cmx) | |
67 | $(OCAMLOPT) -a -o menhirLib.cmxa menhirLib.cmx | |
68 | ||
69 | # Generic rules | |
70 | .SUFFIXES: .ml .mli .cmo .cmi .cmx | |
71 | .PRECIOUS: $(MLI) | |
72 | ||
73 | .ml.mli: | |
d6ce1786 | 74 | $(OCAMLC_CMD) -for-pack MenhirLib -i $< > $@ |
feec80c3 C |
75 | |
76 | .mli.cmi: | |
77 | $(OCAMLC_CMD) -for-pack MenhirLib -c $< | |
78 | ||
79 | .ml.cmo: | |
80 | $(OCAMLC_CMD) -for-pack MenhirLib -c $< | |
81 | ||
82 | .ml.cmx: | |
83 | $(OCAMLOPT_CMD) -for-pack MenhirLib -c $< | |
84 | ||
85 | META: $(MENHIRLIB)/META | |
86 | cp $< $@ | |
87 | ||
88 | # the 'depend' target | |
89 | .depend depend: $(MENHIRMARKER) | |
d6ce1786 C |
90 | @$(MAKE) depend-build |
91 | ||
92 | depend-build: $(MENHIRMARKER) $(SRC) $(MLI) | |
feec80c3 C |
93 | $(OCAMLDEP_CMD) $(MENHIRLIB)/*.mli $(MENHIRLIB)/*.ml > .depend |
94 | ||
d6ce1786 C |
95 | # extra dependencies that are needed to generate mli files |
96 | # that are needed for ocamldep | |
97 | $(MENHIRLIB)/tableFormat.mli: $(MENHIRLIB)/packedIntArray.cmi $(MENHIRLIB)/engineTypes.cmi | |
98 | ||
feec80c3 C |
99 | ifneq ($(MAKECMDGOALS),clean) |
100 | ifneq ($(MAKECMDGOALS),distclean) | |
d6ce1786 C |
101 | ifneq ($(MAKECMDGOALS),depend-build) |
102 | include .depend | |
103 | endif | |
feec80c3 C |
104 | endif |
105 | endif | |
d6ce1786 C |
106 | |
107 | include ../../Makefile.common |