@@ -10,6 +10,7 @@ CONFIG_FILE := $(OUT)/.config
10
10
CFLAGS = -std=gnu99 -O2 -Wall -Wextra
11
11
CFLAGS += -Wno-unused-label
12
12
CFLAGS += -include src/common.h
13
+ CFLAGS_emcc ?=
13
14
14
15
# Enable link-time optimization (LTO)
15
16
ENABLE_LTO ?= 1
21
22
endif
22
23
$(call set-feature, LTO)
23
24
ifeq ($(call has, LTO) , 1)
24
- ifeq ("$(CC_IS_GCC )$(CC_IS_EMCC ) ", "1")
25
+ ifeq ("$(CC_IS_EMCC ) ", "1")
26
+ ifeq ($(call has, SDL) , 1)
27
+ $(warning LTO is not supported to build emscripten-port SDL using emcc.)
28
+ else
29
+ CFLAGS += -flto
30
+ endif
31
+ endif
32
+ ifeq ("$(CC_IS_GCC ) ", "1")
25
33
CFLAGS += -flto
26
34
endif
27
35
ifeq ("$(CC_IS_CLANG ) ", "1")
@@ -136,6 +144,13 @@ ifeq ("$(CC_IS_EMCC)", "1")
136
144
CFLAGS += -mtail-call
137
145
endif
138
146
147
+ # Build emscripten-port SDL
148
+ ifeq ("$(CC_IS_EMCC ) ", "1")
149
+ ifeq ($(call has, SDL) , 1)
150
+ CFLAGS_emcc += -sUSE_SDL=2 -sSDL2_MIXER_FORMATS=wav,mid -sUSE_SDL_MIXER=2
151
+ endif
152
+ endif
153
+
139
154
ENABLE_UBSAN ?= 0
140
155
ifeq ("$(ENABLE_UBSAN ) ", "1")
141
156
CFLAGS += -fsanitize=undefined -fno-sanitize=alignment -fno-sanitize-recover=all
@@ -148,6 +163,13 @@ $(OUT)/emulate.o: CFLAGS += -foptimize-sibling-calls -fomit-frame-pointer -fno-s
148
163
# to the first target after .DEFAULT_GOAL is not set.
149
164
.DEFAULT_GOAL :=
150
165
166
+ WEB_FILES += $(BIN ) .js \
167
+ $(BIN ) .wasm \
168
+ $(BIN ) .worker.js
169
+ ifeq ("$(CC_IS_EMCC ) ", "1")
170
+ BIN := $(BIN ) .js
171
+ endif
172
+
151
173
all : config $(BIN )
152
174
153
175
OBJS := \
@@ -167,13 +189,23 @@ OBJS := \
167
189
OBJS := $(addprefix $(OUT ) /, $(OBJS ) )
168
190
deps := $(OBJS:%.o=%.o.d )
169
191
192
+ EXPORTED_FUNCS := _main
193
+ ifeq ("$(CC_IS_EMCC ) ", "1")
194
+ CFLAGS_emcc += -sINITIAL_MEMORY=2GB \
195
+ -sALLOW_MEMORY_GROWTH \
196
+ -s"EXPORTED_FUNCTIONS=$(EXPORTED_FUNCS ) " \
197
+ --embed-file build \
198
+ -DMEM_SIZE=0x40000000 \
199
+ -w
200
+ endif
201
+
170
202
$(OUT ) /% .o : src/% .c
171
203
$(VECHO ) " CC\t$@ \n"
172
- $(Q )$(CC ) -o $@ $(CFLAGS ) -c -MMD -MF $@ .d $<
204
+ $(Q )$(CC ) -o $@ $(CFLAGS ) $( CFLAGS_emcc ) -c -MMD -MF $@ .d $<
173
205
174
206
$(BIN ) : $(OBJS )
175
207
$(VECHO ) " LD\t$@ \n"
176
- $(Q )$(CC ) -o $@ $^ $(LDFLAGS )
208
+ $(Q )$(CC ) -o $@ $( CFLAGS_emcc ) $ ^ $(LDFLAGS )
177
209
178
210
config : $(CONFIG_FILE )
179
211
$(CONFIG_FILE ) :
@@ -236,7 +268,7 @@ endif
236
268
endif
237
269
238
270
clean :
239
- $(RM ) $(BIN ) $(OBJS ) $(HIST_BIN ) $(HIST_OBJS ) $(deps ) $(CACHE_OUT ) src/rv32_jit.c
271
+ $(RM ) $(BIN ) $(OBJS ) $(HIST_BIN ) $(HIST_OBJS ) $(deps ) $(WEB_FILES ) $( CACHE_OUT ) src/rv32_jit.c
240
272
distclean : clean
241
273
-$(RM ) $(DOOM_DATA ) $(QUAKE_DATA )
242
274
$(RM ) -r $(OUT ) /id1
0 commit comments