0
|
1 # ERLANG_INC is used for -I, below, so add paths where it might be on linux, freebsd, etc.
|
|
2 ERLANG_INC=-I /usr/lib64/erlang/usr/include -I /usr/local/lib/erlang/usr/include
|
|
3 DYNCALL_SRC_PATH=../../../dyncall
|
|
4
|
|
5 # Be sure to 'make clean' after changing the version
|
|
6 VERSION=0.1
|
|
7
|
|
8 OUTPUTS = priv/erldc.so ebin/dyncall.beam ebin/erldc.app
|
|
9
|
|
10 # Used by install target. Default empty DESTDIR is for a real install to root filesystem (/).
|
|
11 # Override DESTDIR for testing or for a staged install
|
|
12 DESTDIR=
|
|
13 ERLANG_INST_DIR=/usr/lib64/erlang
|
|
14
|
|
15 all: $(OUTPUTS)
|
|
16
|
|
17 priv/erldc.so: c_src/dyncallnif.c
|
|
18 [ -d priv ] || mkdir priv
|
|
19 cc -o $@ -fPIC -shared \
|
|
20 $(ERLANG_INC) -I $(DYNCALL_SRC_PATH) \
|
|
21 $(DYNCALL_SRC_PATH)/dyncall/*.o \
|
|
22 c_src/dyncallnif.c
|
|
23
|
|
24 priv/erldc_testtargets.so: c_src/erldctesttargets.c
|
|
25 [ -d priv ] || mkdir priv
|
|
26 cc -o $@ -shared -fPIC c_src/erldctesttargets.c
|
|
27
|
|
28 ebin/dyncall.beam: src/dyncall.erl
|
|
29 erlc +debug_info -o ebin src/dyncall.erl
|
|
30
|
|
31 ebin/erldc.app: src/erldc.app.src
|
|
32 sed -e 's/---VERSION---/$(VERSION)/' src/erldc.app.src >$@
|
|
33
|
|
34 # Dialyzer, credit to erlang.mk
|
|
35 DIALYZER_OPTS ?= -Werror_handling -Wrace_conditions \
|
|
36 -Wunmatched_returns # -Wunderspecs
|
|
37
|
|
38 build-plt:
|
|
39 rm -f test/*.beam
|
|
40 dialyzer --build_plt --output_plt dyncall.plt \
|
|
41 --apps erts kernel stdlib .
|
|
42
|
|
43 dialyze: $(OUTPUTS)
|
|
44 dialyzer --src src --plt dyncall.plt --no_native $(DIALYZER_OPTS)
|
|
45
|
|
46 tests: $(OUTPUTS) priv/erldc_testtargets.so
|
|
47 mkdir -p log
|
|
48 # Add priv to runtime ld path so we get test targets
|
|
49 export LD_LIBRARY_PATH=$$(pwd)/priv:${LD_LIBRARY_PATH}; \
|
|
50 ct_run -pa ebin -logdir log \
|
|
51 -suite linkload_SUITE call_SUITE \
|
|
52 misc_SUITE callf_SUITE
|
|
53 rm -f test/*.beam
|
|
54
|
|
55 clean:
|
|
56 rm -rf priv ebin/* test/*.beam log
|
|
57
|
|
58 # Convention appears to be install binaries and source, but not tests or build-related things
|
|
59 install: $(OUTPUTS)
|
|
60 appdir=$(DESTDIR)$(ERLANG_INST_DIR)/lib/erldc-$(VERSION); \
|
|
61 install -d $$appdir $$appdir/ebin $$appdir/priv $$appdir/src $$appdir/c_src $$appdir/include; \
|
|
62 install README.txt $$appdir; \
|
|
63 install src/*.erl $$appdir/src; \
|
|
64 install include/*.hrl $$appdir/include; \
|
|
65 install c_src/*.c $$appdir/c_src; \
|
|
66 install ebin/* $$appdir/ebin; \
|
|
67 install priv/erldc.so $$appdir/priv
|
|
68
|
|
69 uninstall:
|
|
70 appdir=$(DESTDIR)$(ERLANG_INST_DIR)/lib/erldc-$(VERSION); \
|
|
71 rm -rf $$appdir
|
|
72
|
|
73 .PHONY: clean all tests build-plt dialyze install uninstall
|