-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
96 lines (63 loc) · 2.01 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
#
# Mettre la liste des fichiers .ml, .mly, .mll et .mli
# constituant le projet. Si un fichier b.ml dépend d'un fichier
# a.ml, a.ml doit se trouver avant dans la liste.
#
SOURCES = error.ml ast.mli parser.mly lexer.mll printast.ml main.ml
# Nom du binaire
EXEC = deca
#######################################################################
# Partie générique, ne pas modifier.
#######################################################################
# Compilateurs
CAMLC = ocamlc -g
CAMLOPT = ocamlopt
CAMLDEP = ocamldep
CAMLLEX = ocamllex
CAMLYACC = ocamlyacc
# Sources
# Un peu de magie noire pour détecter les .mly/.mll et convaincre make
# d'appliquer les bonnes règles pour générer les .ml, .mli etc. correpondants.
PARSER_MLY=$(filter %.mly, $(SOURCES))
PARSER_MLI=$(PARSER_MLY:.mly=.mli)
PARSER_ML=$(PARSER_MLY:.mly=.ml)
LEXER_MLL=$(filter %.mll, $(SOURCES))
LEXER_ML=$(LEXER_MLL:.mll=.ml)
ALL_SOURCES=$(patsubst $(LEXER_MLL), $(LEXER_ML), $(patsubst $(PARSER_MLY), $(PARSER_MLI) $(PARSER_ML), $(SOURCES)))
OBJS = $(patsubst %.ml, %.cmo, $(filter %.ml, $(ALL_SOURCES)))
OPTOBJS = $(OBJS:.cmo=.cmx)
JS_OBJS = $(subst main.cmo, , $(OBJS))
all: depend $(EXEC)
opt: depend $(EXEC).opt
.SUFFIXES: .ml .mli .cmo .cmi .cmx .mll .mly .java .js
$(EXEC): $(OBJS)
$(CAMLC) $(CUSTOM) -o $(EXEC) $(OBJS)
$(EXEC).opt: $(OPTOBJS)
$(CAMLOPT) -o $(EXEC) $(OPTOBJS)
main_js: $(JS_OBJS) main_js.ml
ocamlfind ocamlc -package js_of_ocaml -package js_of_ocaml.syntax \
-syntax camlp4o -linkpkg -o main_js $(JS_OBJS) main_js.ml
main_js.js: main_js
js_of_ocaml main_js
.ml.cmo:
$(CAMLC) -c $<
.mli.cmi:
$(CAMLC) -c $<
.ml.cmx:
$(CAMLOPT) -c $<
$(LEXER_ML): $(LEXER_MLL)
$(CAMLLEX) $<
$(PARSER_MLI): $(PARSER_ML)
$(PARSER_ML): $(PARSER_MLY)
$(CAMLYACC) $<
.java.js: $(EXEC)
./$(EXEC) $<
clean:
rm -f *.cm[iox] *~ .*~ *.o
rm -f $(PARSER_ML) $(PARSER_MLI) $(LEXER_ML)
rm -f $(EXEC) main_js main_js.js
rm -f $(EXEC).opt
rm -f $(TESTS_JS)
depend: $(ALL_SOURCES)
$(CAMLDEP) $(ALL_SOURCES) > depend
-include depend