Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
107 lines (83 loc) · 2.41 KB
/
Copy pathMakefile
File metadata and controls
107 lines (83 loc) · 2.41 KB
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
#
# Use luarocks to install LuaFFI:
# > git clone https://github.com/facebook/luaffifb
# > cd luaffifb && luarocks make
#
# To rebuild the call_* headers:
# > rm call_*.h && make headers
#
CC=clang
DEBUG=1
.PHONY: all
LUA=lua
#CFLAGS+= -I/usr/local/include/lua-5.4.7
#CFLAGS+= -I/usr/include/lua5.4 # Ubuntu apt package for 5.4.7
#LDFLAGS+= -L/usr/local/lib/lua-5.4.7
#LDFLAGS+= -llua-5.4.7
LDFLAGS+= -llua5.4
CFLAGS+= -fPIC
# use LibFFI calls
CFLAGS+= -DCALL_WITH_LIBFFI
HOST_SYS:= $(shell uname -s)
# if it's Linux ...
ifeq (Linux,$(HOST_SYS))
LDFLAGS+= -shared
# if OSX ...
else
CFLAGS+= -Wall
LDFLAGS+= -dynamiclib -undefined dynamic_lookup -flat_namespace
LIBFFI_DIR=/usr/local/Cellar/libffi/3.4.8
CFLAGS+= -I$(LIBFFI_DIR)/include/
LDFLAGS+= -L$(LIBFFI_DIR)/lib/
endif
LDFLAGS+= -lffi
# our cwd:
CFLAGS+= -I`pwd`
ifeq ($(DEBUG),1)
# debug
CFLAGS+= -DDEBUG -O0 -gdwarf-2 -mfix-and-continue
TEST_CMD= echo 'bt' > lldb.batch && lldb --batch -K lldb.batch -o run -f lua -- test.lua
SIMPLE_TEST_CMD= echo 'bt' > lldb.batch && lldb --batch -K lldb.batch -o run -f lua -- simple_test.lua
else
# release
CFLAGS+= -DNDEBUG -O2
TEST_CMD= lua test.lua
SIMPLE_TEST_CMD= lua simple_test.lua
endif
all: ffi.so libtest.so libsimple_test.so
SRCS= call.c ctype.c ffi.c parser.c ffi_complex.c lua.c test.c simple_test.c
OBJS= $(patsubst %.c, %.o, $(SRCS))
ffi.so: $(OBJS)
$(CC) $(LDFLAGS) -o $@ $^
# OSX only:
# install_name_tool -change liblua.5.4.7.so /usr/local/lib/lua-5.4.7/liblua.5.4.7.so $@
libtest.so: test.o
$(CC) $(LDFLAGS) -o $@ $^
# OSX only:
# install_name_tool -change liblua.5.4.7.so /usr/local/lib/lua-5.4.7/liblua.5.4.7.so $@
libsimple_test.so: simple_test.o
$(CC) $(LDFLAGS) -o $@ $^
# OSX only:
# install_name_tool -change liblua.5.4.7.so /usr/local/lib/lua-5.4.7/liblua.5.4.7.so $@
%.o: %.c
$(CC) $(CFLAGS) -c -o $@ $^
.PHONY: clean
clean:
rm -f *.o *.so *.dylib
.PHONY: test
test: ffi.so libtest.so
$(TEST_CMD)
.PHONY: simple_test
simple_test: ffi.so libsimple_test.so
$(SIMPLE_TEST_CMD)
.PHONY: headers
headers:
$(MAKE) call_x86.h call_x64.h call_x64win.h call_arm.h
call_x86.h: call_x86.dasc dynasm/*.lua
$(LUA) dynasm/dynasm.lua -LN -o $@ $<
call_x64.h: call_x86.dasc dynasm/*.lua
$(LUA) dynasm/dynasm.lua -D X64 -LN -o $@ $<
call_x64win.h: call_x86.dasc dynasm/*.lua
$(LUA) dynasm/dynasm.lua -D X64 -D X64WIN -LN -o $@ $<
call_arm.h: call_arm.dasc dynasm/*.lua
$(LUA) dynasm/dynasm.lua -LNE -o $@ $<