-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
84 lines (68 loc) · 2.08 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
PROJECT_DIR := .
BUILD_DIR := $(PROJECT_DIR)/dist/native
OBJECT_DIR := $(BUILD_DIR)/obj
CXX := clang++
ifndef LD
LD := wasm-ld
endif
CXX_FLAGS := \
--target=wasm32 \
-Os \
-flto \
-nostdlib \
-fvisibility=hidden \
-std=c++20 \
-ffunction-sections \
-fdata-sections
LD_FLAGS := \
--no-entry \
--strip-all \
--export-dynamic \
--import-memory \
--import-undefined \
--gc-sections \
-shared-memory \
--initial-memory=655360 \
--features=atomics,bulk-memory
SHARED_INCLUDE_DIRS := \
$(PROJECT_DIR)/shared/include
RUNTIME_INCLUDE_DIRS := \
$(SHARED_INCLUDE_DIRS) \
$(PROJECT_DIR)/runtime/include
INTERPRETER_INCLUDE_DIRS := \
$(SHARED_INCLUDE_DIRS) \
$(RUNTIME_INCLUDE_DIRS) \
$(PROJECT_DIR)/interpreter/include
RUNTIME_TARGET := $(BUILD_DIR)/runtime.wasm
INTERPRETER_TARGET := $(BUILD_DIR)/interpreter.wasm
RUNTIME_SOURCES := \
runtime/source/main.cc \
runtime/source/memory.cc \
runtime/source/guest_memory.cc \
runtime/source/cpu.cc \
runtime/source/decoder.cc \
runtime/source/disassembler.cc \
runtime/source/string.cc
INTERPRETER_SOURCES := \
interpreter/source/main.cc
RUNTIME_INCLUDES := $(addprefix -I,$(RUNTIME_INCLUDE_DIRS))
INTERPRETER_INCLUDES := $(addprefix -I,$(INTERPRETER_INCLUDE_DIRS))
RUNTIME_OBJECTS := $(addprefix $(OBJECT_DIR)/,$(addsuffix .o,$(RUNTIME_SOURCES)))
INTERPRETER_OBJECTS := $(addprefix $(OBJECT_DIR)/,$(addsuffix .o,$(INTERPRETER_SOURCES)))
$(OBJECT_DIR)/runtime/%.cc.o: $(PROJECT_DIR)/runtime/%.cc
@mkdir -p $(dir $@)
$(CXX) $(CXX_FLAGS) $(RUNTIME_INCLUDES) -DRUNTIME -c $< -o $@
$(OBJECT_DIR)/interpreter/%.cc.o: $(PROJECT_DIR)/interpreter/%.cc
@mkdir -p $(dir $@)
$(CXX) $(CXX_FLAGS) $(INTERPRETER_INCLUDES) -c $< -o $@
$(RUNTIME_TARGET): $(RUNTIME_OBJECTS)
@mkdir -p $(dir $@)
$(LD) $(LD_FLAGS) -o $@ $^
$(INTERPRETER_TARGET): $(INTERPRETER_OBJECTS)
@mkdir -p $(dir $@)
$(LD) $(LD_FLAGS) --global-base=4096 -o $@ $^
.PHONY: copy-to-public
copy-to-public: $(RUNTIME_TARGET) $(INTERPRETER_TARGET)
@mkdir -p $(PROJECT_DIR)/public/wasm/
cp $(RUNTIME_TARGET) $(PROJECT_DIR)/public/wasm/
cp $(INTERPRETER_TARGET) $(PROJECT_DIR)/public/wasm/