forked from rbonichon/portugol
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
126 lines (93 loc) · 3.37 KB
/
Makefile
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# Basename of the executable we want to produce
EXE=portuml
TOPLEVEL=porttop
JS=portjs
# default target (activate when you invoke only 'make')
default: interpreter
interpreter: $(EXE) $(EXE).byt
repl: $(REPL) $(REPL).byt
all: interpreter repl js
# list of targets that should be recompiled every time
.PHONY: default
CAMLGRAPH = /home/ubuntu/.opam/4.02.1/lib/ocamlgraph
JSOFOCAML = /home/ubuntu/.opam/4.02.1/lib/js_of_ocaml
STUBLIBS = /home/ubuntu/.opam/4.02.1/lib/stublibs/
CAMLINCLUDES = -I $(CAMLGRAPH) -I $(STUBLIBS)
DLLS=-dllpath-pkg lwt,lwt.unix -dllpath $(STUBLIBS)
CAMLJS=/home/ubuntu/.opam/4.02.1/bin/js_of_ocaml
# Load the default OCaml rules from the file Caml.mk
include ./Caml.mk
PARSER = parser
LEXER = lexer
ANALYSES = analyze_variables
EXEMAIN = exe_main
REPLMAIN = repl_main
JSMAIN = js_main
ENTRIES = $(EXEMAIN) $(REPLMAIN) # $(JSMAIN)
MLFILES_PRE = utils location driver io \
types values env builtins ast_utils ast
MLFILES_POST = preprocess $(ANALYSES) typer interp
MLOTHER=cfg
MLIFILES =
SRCFILES = $(MLFILES_PRE:%=%.ml) \
$(MLFILES_POST:%=%.ml) \
$(MLOTHER:%=%.ml) \
$(MLIFILES:%=%.mli)
PACKAGES="lwt,lwt.unix"
GENFILES = $(LEXER:%=%.ml) $(PARSER:%=%.ml) $(PARSER:%=%.mli)
CAMLFILES = $(SRCFILES) $(GENFILES) $(ENTRIES:%=%.ml)
JSCMXFILES = $(MLFILES_PRE:%=%.cmx) \
$(LEXER:%=%.cmx) \
$(PARSER:%=%.cmx) \
$(MLFILES_POST:%=%.cmx)
JSCMIFILES = $(MLIFILES:%=%.cmi)
JSCMOFILES = $(JSCMXFILES:%.cmx=%.cmo)
MORECMX = $(MLOTHER:%=%.cmx)
MORECMI = $(MLOTHER:%=%.cmi)
MORECMO = $(MLOTHER:%=%.cmo)
CMXFILES = $(JSCMXFILES) $(MORECMX)
CMIFILES = $(JSCMIFILES) $(MORECMI)
CMOFILES = $(JSCMOFILES) $(MORECMO)
LIBS = graph
OPTLIBDEPS = $(LIBS:%=%.cmxa)
LIBDEPS = $(LIBS:%=%.cma)
JSLIBS = js_of_ocaml.cma
$(EXE): depend $(CMXFILES) $(EXEMAIN).cmx
$(CAMLFIND) $(CAMLBIN) -package $(PACKAGES) $(CAMLINCLUDES) -linkpkg \
-o $@ $(OPTLIBDEPS) $(CMXFILES) $(EXEMAIN).cmx
# $(EXE).byt: depend $(CMIFILES) $(CMOFILES) $(EXEMAIN).cmo
# @echo "Linking bytecode executable ..."
# $(CAMLBYT) $(CAMLINCLUDES) -o $@ $(LIBDEPS) $(CMOFILES) $(EXEMAIN).cmo
$(EXE).byt: depend $(CMIFILES) $(CMOFILES) $(EXEMAIN).cmo
@echo "Linking bytecode executable ..."
$(CAMLFIND) $(CAMLBYT) -package $(PACKAGES) $(CAMLINCLUDES) $(DLLS) \
-linkpkg -o $@ $(LIBDEPS) $(CMOFILES) $(EXEMAIN).cmo
$(REPL): depend $(CMXFILES) $(REPLMAIN).cmx
$(CAMLBIN) $(CAMLINCLUDES) -o $@ $(OPTLIBDEPS) $(CMXFILES) $(REPLMAIN).cmx
$(REPL).byt: depend $(CMIFILES) $(CMOFILES) $(REPLMAIN).cmo
$(CAMLBYT) $(CAMLINCLUDES) -o $@ $(LIBDEPS) $(CMOFILES) $(REPLMAIN).cmo
JSCAMLBYT = $(CAMLFIND) $(CAMLBYT) -package js_of_ocaml -package js_of_ocaml.syntax \
-syntax camlp4o -I $(STUBLIBS)
$(JSMAIN).cmo: $(JSMAIN).ml
$(JSCAMLBYT) -c $<
$(JS).byt: depend $(CMIFILES) $(JSCMOFILES) $(JSMAIN).cmo
$(JSCAMLBYT) -linkpkg -o $@ $(JSCMOFILES) $(JSMAIN).cmo
js: $(JS).byt
$(CAMLJS) $<
clean::
-$(RM) $(EXE) $(EXE).byt *.annot
for i in $(PARSER) $(LEXER); do\
$(RM) -f $$i.ml $$i.mli; \
done
-$(RM) *.dot *.png *.svg
.PHONY: beforedepend depend codestats
# There are genereated files so we might need to do depend twice
# beforedepend serves exactly that purpose
beforedepend: $(CAMLFILES)
$(CAMLDEP) $(CAMLINCLUDES) $(CAMLFILES) > .depend
depend:: beforedepend $(CAMLFILES)
OCAMLMETRICS=/home/ubuntu/src/ocaml-metrics/src/ocamlmetrics
codestats:
@echo "Word count"
@wc -l $(SRCFILES)
@$(OCAMLMETRICS) -h $(SRCFILES) > metrics.html