blob: 38d298e8e662df452405c55eee263f323b79e703 (
plain)
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
|
#########################################################################
# #
# OCaml #
# #
# Xavier Clerc, SED, INRIA Rocquencourt #
# #
# Copyright 2010 Institut National de Recherche en Informatique et #
# en Automatique. All rights reserved. This file is distributed #
# under the terms of the Q Public License version 1.0. #
# #
#########################################################################
BASEDIR=../..
COMPFLAGS=-I $(OTOPDIR)/otherlibs/$(UNIXLIBVAR)unix \
-I $(OTOPDIR)/otherlibs/systhreads \
-I $(OTOPDIR)/otherlibs/dynlink
LD_PATH = $(TOPDIR)/otherlibs/$(UNIXLIBVAR)unix:$(TOPDIR)/otherlibs/systhreads\
:$(TOPDIR)/otherlibs/dynlink
.PHONY: default
default:
@if ! $(SUPPORTS_SHARED_LIBRARIES); then \
echo 'skipped (shared libraries not available)'; \
elif $(BYTECODE_ONLY); then \
echo 'skipped (native compiler not available)' ; \
else \
$(SET_LD_PATH) $(MAKE) all; \
fi
.PHONY: all
all: compile run
PLUGINS=plugin.so plugin2.so sub/plugin.so sub/plugin3.so plugin4.so \
mypack.so packed1.so packed1_client.so pack_client.so plugin_ref.so \
plugin_high_arity.so plugin_ext.so plugin_simple.so bug.so \
plugin_thread.so plugin4_unix.so a.so b.so c.so
ADD_COMPFLAGS=-thread
.PHONY: compile
compile: $(PLUGINS) main$(EXE) mylib.so
.PHONY: run
run:
@printf " ... testing 'main'"
@./main$(EXE) plugin.so plugin2.so plugin_thread.so > result
@$(DIFF) reference result >/dev/null \
&& echo " => passed" || echo " => failed"
main$(EXE): api.cmx main.cmx
@$(OCAMLOPT) -thread -o main$(EXE) -linkall unix.cmxa threads.cmxa \
dynlink.cmxa api.cmx main.cmx
main_ext$(EXE): api.cmx main.cmx factorial.$(O)
@$(OCAMLOPT) -o main_ext$(EXE) dynlink.cmxa api.cmx main.cmx \
factorial.$(O)
sub/plugin3.cmx: sub/api.cmi sub/api.cmx sub/plugin3.ml
@cd sub; \
mv api.cmx api.cmx.bak; \
$(OCAMLOPT) -c plugin3.ml; \
mv api.cmx.bak api.cmx
plugin2.cmx: api.cmx plugin.cmi plugin.cmx
@mv plugin.cmx plugin.cmx.bak;
@$(OCAMLOPT) -c plugin2.ml
@mv plugin.cmx.bak plugin.cmx
sub/api.so: sub/api.cmi sub/api.ml
@cd sub; $(OCAMLOPT) -c $(SHARED) api.ml
sub/api.cmi: sub/api.mli
@cd sub; $(OCAMLOPT) -c api.mli
sub/api.cmx: sub/api.cmi sub/api.ml
@cd sub; $(OCAMLOPT) -c api.ml
plugin.cmx: api.cmx plugin.cmi
sub/plugin.cmx: api.cmx
plugin4.cmx: api.cmx
main.cmx: api.cmx
plugin_ext.cmx: api.cmx plugin_ext.ml
@$(OCAMLOPT) -c plugin_ext.ml
plugin_ext.so: factorial.$(O) plugin_ext.cmx
@$(OCAMLOPT) -shared -o plugin_ext.so factorial.$(O) \
plugin_ext.cmx
plugin4_unix.so: plugin4.cmx
@$(OCAMLOPT) -shared -o plugin4_unix.so unix.cmxa plugin4.cmx
packed1_client.cmx: packed1.cmx
pack_client.cmx: mypack.cmx
packed1.cmx: api.cmx packed1.ml
@$(OCAMLOPT) -c $(COMPFLAGS) -for-pack Mypack packed1.ml
mypack.cmx: packed1.cmx
@$(OCAMLOPT) $(COMPFLAGS) -S -pack -o mypack.cmx packed1.cmx
mylib.cmxa: plugin.cmx plugin2.cmx
@$(OCAMLOPT) $(COMPFLAGS) -a -o mylib.cmxa plugin.cmx plugin2.cmx
factorial.$(O): factorial.c
@$(OCAMLOPT) -c -ccopt "$(SHAREDCCCOMPOPTS)" -ccopt -I \
-ccopt $(CTOPDIR)/byterun \
factorial.c
.PHONY: promote
promote:
@cp result reference
.PHONY: clean
clean: defaultclean
@rm -f result *.so *.o *.cm* main main_ext *.exe *.s *.asm *.obj
@rm -f *.a *.lib
@rm -f sub/*.so sub/*.o sub/*.cm* sub/*.s sub/*.asm sub/*.obj
@rm -f marshal.data
include $(BASEDIR)/makefiles/Makefile.common
|