-
-
Notifications
You must be signed in to change notification settings - Fork 172
Expand file tree
/
Copy pathMakefile.wasm
More file actions
89 lines (69 loc) · 2.62 KB
/
Copy pathMakefile.wasm
File metadata and controls
89 lines (69 loc) · 2.62 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
MCL_DIR?=./
OBJ_DIR?=$(MCL_DIR)/obj/wasm
LIB_DIR?=$(MCL_DIR)/lib
WASM_DIR=$(MCL_DIR)/src/wasm
CC=clang$(LLVM_VER)
CXX=clang++$(LLVM_VER)
LD=wasm-ld$(LLVM_VER)
WASM_OPT?=wasm-opt
TARGET=--target=wasm32-unknown-unknown
CFLAGS=$(TARGET) -O3 -DNDEBUG -flto -fvisibility=hidden
CFLAGS+=-fno-threadsafe-statics -fno-rtti -fno-stack-protector -fno-exceptions
CFLAGS+=-DMCL_SIZEOF_UNIT=4 -DMCL_STANDALONE
CFLAGS+=-DCYBOZU_MINIMUM_EXCEPTION
CFLAGS+=-I $(WASM_DIR) -I $(MCL_DIR)/include -I $(MCL_DIR)/src
CFLAGS+=-Wall -Wextra -MMD -MP
CXXFLAGS=$(CFLAGS) -std=c++03
STACK_MODE?=0
LDFLAGS=--no-entry --export-dynamic -z stack-size=1048576
LDFLAGS+=--export=__stack_pointer --export=__wasm_call_ctors
LDFLAGS+=--export=malloc --export=free
ifneq ($(STACK_MODE),2)
LDFLAGS+=--export=stackSave --export=stackAlloc --export=stackRestore
endif
LDFLAGS+=--import-memory --allow-undefined
LDFLAGS+=--lto-O3
DLMALLOC_FLAGS=-DLACKS_SYS_TYPES_H -DLACKS_FCNTL_H -DLACKS_UNISTD_H
DLMALLOC_FLAGS+=-DLACKS_SYS_MMAN_H -DLACKS_STRINGS_H -DLACKS_SYS_PARAM_H
DLMALLOC_FLAGS+=-DLACKS_SCHED_H -DLACKS_TIME_H
DLMALLOC_FLAGS+=-DHAVE_MORECORE=1 -DHAVE_MMAP=0 -DNO_MALLOC_STATS=1
DLMALLOC_FLAGS+=-DMORECORE_CONTIGUOUS=0
DLMALLOC_FLAGS+=-Dsize_t=unsigned\ long -Dptrdiff_t=long
DLMALLOC_FLAGS+=-DMALLOC_ALIGNMENT=16
ifeq ($(STACK_MODE),1)
STACK_OBJ=$(OBJ_DIR)/stack_c.o
else ifeq ($(STACK_MODE),2)
STACK_OBJ=
else
STACK_OBJ=$(OBJ_DIR)/stack.o
endif
OBJS=$(OBJ_DIR)/fp.o
OBJS+=$(OBJ_DIR)/dlmalloc.o $(OBJ_DIR)/libc.o $(STACK_OBJ)
CLEAN_OBJS=$(OBJ_DIR)/stack.o $(OBJ_DIR)/stack_c.o
WASM=$(LIB_DIR)/mcl.wasm
MCL_JS=$(LIB_DIR)/mcl_c.js
all: $(MCL_JS)
$(MCL_JS): $(WASM) $(WASM_DIR)/glue.js
@echo STACK_MODE=$(STACK_MODE)
python3 -c "import base64;w=base64.b64encode(open('$(WASM)','rb').read()).decode();print(open('$(WASM_DIR)/glue.js').read().replace('@@WASM_BASE64@@',w),end='')" > $@
$(WASM): $(OBJS)
$(LD) -o $@.pre $(OBJS) $(LDFLAGS)
$(WASM_OPT) -O3 --strip-debug $@.pre -o $@
rm $@.pre
$(OBJ_DIR)/fp.o: $(MCL_DIR)/src/fp.cpp | $(OBJ_DIR)
$(CXX) $(CXXFLAGS) -c -o $@ $<
$(OBJ_DIR)/dlmalloc.o: $(WASM_DIR)/dlmalloc.c | $(OBJ_DIR)
$(CC) $(TARGET) -O3 -DNDEBUG -flto -I $(WASM_DIR) $(DLMALLOC_FLAGS) -c -o $@ $< -DUSE_LOCKS=0
$(OBJ_DIR)/libc.o: $(WASM_DIR)/libc.c | $(OBJ_DIR)
$(CC) $(TARGET) -O3 -DNDEBUG -flto -I $(WASM_DIR) -c -o $@ $<
$(OBJ_DIR)/stack_c.o: $(WASM_DIR)/stack_c.c | $(OBJ_DIR)
$(CC) $(TARGET) -O3 -DNDEBUG -I $(WASM_DIR) -c -o $@ $<
$(OBJ_DIR)/stack.o: $(WASM_DIR)/stack.s | $(OBJ_DIR)
$(CC) $(TARGET) -c -o $@ $<
$(OBJ_DIR):
mkdir -p $@
DEPS=$(OBJS:.o=.d)
-include $(DEPS)
clean:
rm -f $(OBJS) $(CLEAN_OBJS) $(DEPS) $(WASM) $(WASM).pre $(MCL_JS)
.PHONY: clean all