-
Notifications
You must be signed in to change notification settings - Fork 2
/
Makefile
160 lines (122 loc) · 4.95 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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
## CONFIG
INSTALL_PREFIX = /usr/local
CFLAGS = -Wall -fPIC -g -fomit-frame-pointer -I vm -D_GNU_SOURCE -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -DX86TargetMachineModule=1 -DIA64TargetMachineModule=1
EXTFLAGS = -pthread
MAKESO = ${CXX} -shared -WBsymbolic -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
LIBNEKO_NAME = libneko.so
LIBNEKO_LIBS = -ldl -lgc -lm
NEKOVM_FLAGS = -Lbin -lneko
STD_NDLL_FLAGS = ${NEKOVM_FLAGS} -lrt
INSTALL_FLAGS =
LLVM_CONFIG = llvm-config
LLVM_COMPONENTS = core support jit analysis native ipo instrumentation
LLVM_LIBS = $(shell $(LLVM_CONFIG) --libs $(LLVM_COMPONENTS))
LLVM_LIBS_DIR = $(shell $(LLVM_CONFIG) --libdir)
NEKO_EXEC = LD_LIBRARY_PATH=../bin:${LLVM_LIBS_DIR}:${LD_LIBRARY_PATH} NEKOPATH=../boot:../bin ../bin/neko
# For OSX
#
# MACOSX = 1
# For OSX Universal Binaries
#
# OSX_UNIVERSAL = 1
# For 64 bit
#
# CFLAGS += -D_64BITS
# For profiling VM
#
# CFLAGS += -DNEKO_PROF
# For lower memory usage (takes more CPU !)
#
# CFLAGS += -DLOW_MEM
# For MINGW/MSYS
ifeq (${WIN32}, 1)
CFLAGS = -g -Wall -O3 -momit-leaf-frame-pointer -I vm -I /usr/local/include
EXTFLAGS =
MAKESO = ${CC} -O -shared
LIBNEKO_NAME = neko.dll
LIBNEKO_LIBS = -Lbin -lgc
STD_NDLL_FLAGS = ${NEKOVM_FLAGS} -lws2_32
endif
### OSX SPECIFIC
ifeq (${UNIVERSAL},1)
MACOSX=1
OSX_UNIVERSAL=1
endif
ifeq (${MACOSX}, 1)
export MACOSX_DEPLOYMENT_TARGET=10.3
EXTFLAGS =
MAKESO = ${CC}
LIBNEKO_NAME = libneko.dylib
LIBNEKO_INSTALL = -install_name @executable_path/${LIBNEKO_NAME}
LIBNEKO_LIBS = -ldl -lgc -lm -dynamiclib -single_module ${LIBNEKO_INSTALL}
NEKOVM_FLAGS = -L${PWD}/bin -lneko
STD_NDLL_FLAGS = -bundle -undefined dynamic_lookup ${NEKOVM_FLAGS}
ifeq (${OSX_UNIVERSAL}, 1)
export MACOSX_DEPLOYMENT_TARGET_i386=10.4
export MACOSX_DEPLOYMENT_TARGET_ppc=10.3
CFLAGS += -arch ppc -arch i386 -L/usr/local/lib -L/opt/local/lib -I/opt/local/include
UNIV = libs/include/osx_universal
#linking to shared lib (.a) explicitly:
LIBNEKO_DEPS = ${UNIV}/libgc.a -lSystemStubs
LIBNEKO_LIBS = ${LIBNEKO_DEPS} -dynamiclib -single_module ${LIBNEKO_INSTALL} ${CFLAGS}
NEKOVM_FLAGS = -L${PWD}/bin -lneko
STD_NDLL_FLAGS = -bundle ${NEKOVM_FLAGS} ${CFLAGS}
INSTALL_FLAGS = -osx-universal
endif
endif
### MAKE
VM_OBJECTS = vm/stats.o vm/main.o
LLVM_JIT_OBJECTS = vm/llvm/jit.o vm/llvm/stack.o vm/llvm/neko_module.o vm/llvm/neko_function.o vm/llvm/neko_code_container.o vm/llvm/neko_code_chunk.o vm/llvm/neko_basic_block.o vm/llvm/llvm_code_generation.o vm/llvm/primitives.o vm/llvm/llvm_instr_helper.o vm/llvm/blocks.o
STD_OBJECTS = libs/std/buffer.o libs/std/date.o libs/std/file.o libs/std/init.o libs/std/int32.o libs/std/math.o libs/std/string.o libs/std/random.o libs/std/serialize.o libs/std/socket.o libs/std/sys.o libs/std/xml.o libs/std/module.o libs/std/md5.o libs/std/utf8.o libs/std/memory.o libs/std/misc.o libs/std/thread.o libs/std/process.o
LIBNEKO_OBJECTS = vm/alloc.o vm/builtins.o vm/callback.o vm/interp.o vm/load.o vm/objtable.o vm/others.o vm/hash.o vm/module.o vm/jit_x86.o vm/threads.o ${LLVM_JIT_OBJECTS}
all: createbin libneko neko std compiler libs
universal:
make MACOSX=1 OSX_UNIVERSAL=1
createbin:
-mkdir bin 2>/dev/null
libneko: bin/${LIBNEKO_NAME}
libs:
(cd src; ${NEKO_EXEC} nekoc tools/install.neko)
(cd src; ${NEKO_EXEC} tools/install ${INSTALL_FLAGS})
doc:
(cd src; ${NEKO_EXEC} nekoc tools/makedoc.neko)
(cd src; ${NEKO_EXEC} tools/makedoc)
test:
(cd src; ${NEKO_EXEC} nekoc tools/test.neko)
(cd src; ${NEKO_EXEC} tools/test)
neko: bin/neko
std: bin/std.ndll
compiler:
(cd src; ${NEKO_EXEC} nekoml -nostd neko/Main.nml nekoml/Main.nml)
(cd src; ${NEKO_EXEC} nekoc -link ../boot/nekoc.n neko/Main)
(cd src; ${NEKO_EXEC} nekoc -link ../boot/nekoml.n nekoml/Main)
bin/${LIBNEKO_NAME}: ${LIBNEKO_OBJECTS} Makefile
${MAKESO} ${EXTFLAGS} -o $@ ${LIBNEKO_OBJECTS} ${LIBNEKO_LIBS} ${LLVM_LIBS}
bin/neko: $(VM_OBJECTS) ${LLVM_JIT_OBJECTS} Makefile bin/${LIBNEKO_NAME}
${CXX} ${CFLAGS} ${EXTFLAGS} -o $@ ${VM_OBJECTS} ${LLVM_JIT_OBJECTS} ${NEKOVM_FLAGS} ${LLVM_LIBS}
# strip bin/neko
bin/std.ndll: ${STD_OBJECTS} bin/${LIBNEKO_NAME}
${MAKESO} -o $@ ${STD_OBJECTS} ${STD_NDLL_FLAGS}
clean:
rm -rf bin/${LIBNEKO_NAME} ${LIBNEKO_OBJECTS} ${VM_OBJECTS} ${LLVM_JIT_OBJECTS}
rm -rf bin/neko bin/nekoc bin/nekoml bin/nekotools
rm -rf bin/std bin/*.ndll bin/*.n libs/*/*.o
rm -rf src/*.n src/neko/*.n src/nekoml/*.n src/tools/*.n
rm -rf bin/mtypes bin/tools
install:
cp bin/${LIBNEKO_NAME} ${INSTALL_PREFIX}/lib
cp bin/neko bin/nekoc bin/nekotools bin/nekoml bin/nekoml.std ${INSTALL_PREFIX}/bin
-mkdir ${INSTALL_PREFIX}/lib/neko
cp bin/*.ndll ${INSTALL_PREFIX}/lib/neko
-mkdir ${INSTALL_PREFIX}/include
cp vm/neko*.h ${INSTALL_PREFIX}/include
uninstall:
rm -rf ${INSTALL_PREFIX}/lib/${LIBNEKO_NAME}
rm -rf ${INSTALL_PREFIX}/bin/neko ${INSTALL_PREFIX}/bin/nekoc ${INSTALL_PREFIX}/bin/nekotools
rm -rf ${INSTALL_PREFIX}/lib/neko
.SUFFIXES : .c .o
.c.o :
${CC} ${CFLAGS} ${EXTFLAGS} -o $@ -c $<
.cpp.o :
${CC} ${CFLAGS} ${EXTFLAGS} -o $@ -c $<
.PHONY: all libneko libs neko std compiler clean doc test