Skip to content

Commit 0b9e625

Browse files
wip: add dynamic builds
1 parent c0de762 commit 0b9e625

15 files changed

+95
-10
lines changed

Makefile

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ EXTENSION_FUNCTIONS = extension-functions.c
66
EXTENSION_FUNCTIONS_URL = https://www.sqlite.org/contrib/download/extension-functions.c?get=25
77
EXTENSION_FUNCTIONS_SHA3 = ee39ddf5eaa21e1d0ebcbceeab42822dd0c4f82d8039ce173fd4814807faabfa
88

9+
10+
911
# source files
1012
CFILES = \
1113
sqlite3.c \
@@ -49,7 +51,6 @@ CFLAGS_DIST = -Oz -flto $(CFLAGS_COMMON)
4951
EMFLAGS_COMMON = \
5052
-s ALLOW_MEMORY_GROWTH=1 \
5153
-s WASM=1 \
52-
-s MAIN_MODULE=2 \
5354
-s INVOKE_RUN \
5455
-s ENVIRONMENT="web,worker" \
5556
-s STACK_SIZE=512KB \
@@ -65,6 +66,18 @@ EMFLAGS_DIST = \
6566
-flto \
6667
$(EMFLAGS_COMMON)
6768

69+
# Need to export all the Main module's symbols
70+
# Setting MAIN_MODULE=2 can cause a runtime error if the
71+
# main module does not export a particular function.
72+
# With this being a runtime error, it's tricky to determine all
73+
# the methods that a submodule might require - also for this to have value
74+
# other submodules would need to be compatible, but we cannot gaurentee their
75+
# required exports are present.
76+
# This setting increases the main WASM side considerably.
77+
# Rougly increases from 1.5mb to 3.7mb.
78+
EMFLAGS_DYNAMIC = \
79+
-s MAIN_MODULE=1
80+
6881
EMFLAGS_INTERFACES = \
6982
-s EXPORTED_FUNCTIONS=@$(EXPORTED_FUNCTIONS) \
7083
-s EXPORTED_RUNTIME_METHODS=@$(EXPORTED_RUNTIME_METHODS)
@@ -194,15 +207,17 @@ clean-debug:
194207
rm -rf debug
195208

196209
.PHONY: debug
197-
debug: debug/wa-sqlite.mjs debug/wa-sqlite-async.mjs debug/wa-sqlite-jspi.mjs
210+
debug: debug/wa-sqlite.mjs debug/wa-sqlite-async.mjs debug/wa-sqlite-jspi.mjs debug/wa-sqlite-main.mjs debug/wa-sqlite-main-async.mjs
198211

212+
# TODO link static
199213
debug/wa-sqlite.mjs: $(OBJ_FILES_DEBUG) $(EXPORTED_FUNCTIONS) $(EXPORTED_RUNTIME_METHODS)
200214
mkdir -p debug
201215
$(EMCC) $(EMFLAGS_DEBUG) \
202216
$(EMFLAGS_INTERFACES) \
203217
$(EMFLAGS_LIBRARIES) \
204218
$(OBJ_FILES_DEBUG) -o $@
205219

220+
# TODO link static
206221
debug/wa-sqlite-async.mjs: $(OBJ_FILES_DEBUG) $(EXPORTED_FUNCTIONS) $(EXPORTED_RUNTIME_METHODS) $(ASYNCIFY_IMPORTS)
207222
mkdir -p debug
208223
$(EMCC) $(EMFLAGS_DEBUG) \
@@ -211,6 +226,23 @@ debug/wa-sqlite-async.mjs: $(OBJ_FILES_DEBUG) $(EXPORTED_FUNCTIONS) $(EXPORTED_
211226
$(EMFLAGS_ASYNCIFY_DEBUG) \
212227
$(OBJ_FILES_DEBUG) -o $@
213228

229+
# Main module distributable
230+
debug/wa-sqlite-main.mjs: $(OBJ_FILES_DEBUG) $(EXPORTED_FUNCTIONS) $(EXPORTED_RUNTIME_METHODS)
231+
mkdir -p debug
232+
$(EMCC) $(EMFLAGS_DEBUG) $(EMFLAGS_DYNAMIC) \
233+
$(EMFLAGS_INTERFACES) \
234+
$(EMFLAGS_LIBRARIES) \
235+
$(OBJ_FILES_DEBUG) -o $@
236+
237+
# Main module distributable
238+
debug/wa-sqlite-main-async.mjs: $(OBJ_FILES_DEBUG) $(EXPORTED_FUNCTIONS) $(EXPORTED_RUNTIME_METHODS) $(ASYNCIFY_IMPORTS)
239+
mkdir -p debug
240+
$(EMCC) $(EMFLAGS_DEBUG) $(EMFLAGS_DYNAMIC) \
241+
$(EMFLAGS_INTERFACES) \
242+
$(EMFLAGS_LIBRARIES) \
243+
$(EMFLAGS_ASYNCIFY_DEBUG) \
244+
$(OBJ_FILES_DEBUG) -o $@
245+
214246
## Debug FTS builds
215247
# .PHONY: debug
216248
# debug: debug/wa-sqlite.mjs debug/wa-sqlite-async.mjs
@@ -232,9 +264,10 @@ debug/wa-sqlite-async.mjs: $(OBJ_FILES_DEBUG) $(EXPORTED_FUNCTIONS) $(EXPORTED_
232264
# $(RS_WASM_TGT_DIR)/debug/deps/*.bc \
233265
# $(OBJ_FILES_DEBUG_FTS) *.o -o $@
234266

267+
# TODO link static
235268
debug/wa-sqlite-jspi.mjs: $(OBJ_FILES_DEBUG) $(JSFILES) $(EXPORTED_FUNCTIONS) $(EXPORTED_RUNTIME_METHODS) $(ASYNCIFY_IMPORTS)
236269
mkdir -p debug
237-
$(EMCC) $(EMFLAGS_DEBUG) \
270+
$(EMCC) $(EMFLAGS_DEBUG) $(EMFLAGS_DYNAMIC) \
238271
$(EMFLAGS_INTERFACES) \
239272
$(EMFLAGS_LIBRARIES) \
240273
$(EMFLAGS_JSPI) \
@@ -246,15 +279,17 @@ clean-dist:
246279
rm -rf dist
247280

248281
.PHONY: dist
249-
dist: dist/wa-sqlite.mjs dist/wa-sqlite-async.mjs dist/wa-sqlite-jspi.mjs
282+
dist: dist/wa-sqlite.mjs dist/wa-sqlite-async.mjs dist/wa-sqlite-jspi.mjs dist/wa-sqlite-main.mjs dist/wa-sqlite-async-main.mjs
250283

284+
# TODO link static
251285
dist/wa-sqlite.mjs: $(OBJ_FILES_DIST) $(EXPORTED_FUNCTIONS) $(EXPORTED_RUNTIME_METHODS)
252286
mkdir -p dist
253287
$(EMCC) $(EMFLAGS_DIST) \
254288
$(EMFLAGS_INTERFACES) \
255289
$(EMFLAGS_LIBRARIES) \
256290
$(OBJ_FILES_DIST) -o $@
257291

292+
# TODO link static
258293
dist/wa-sqlite-async.mjs: $(OBJ_FILES_DIST) $(EXPORTED_FUNCTIONS) $(EXPORTED_RUNTIME_METHODS) $(ASYNCIFY_IMPORTS)
259294
mkdir -p dist
260295
$(EMCC) $(EMFLAGS_DIST) \
@@ -263,6 +298,22 @@ dist/wa-sqlite-async.mjs: $(OBJ_FILES_DIST) $(EXPORTED_FUNCTIONS) $(EXPORTED_RUN
263298
$(EMFLAGS_ASYNCIFY_DIST) \
264299
$(OBJ_FILES_DIST) -o $@
265300

301+
dist/wa-sqlite-main.mjs: $(OBJ_FILES_DIST) $(EXPORTED_FUNCTIONS) $(EXPORTED_RUNTIME_METHODS)
302+
mkdir -p dist
303+
$(EMCC) $(EMFLAGS_DIST) $(EMFLAGS_DYNAMIC) \
304+
$(EMFLAGS_INTERFACES) \
305+
$(EMFLAGS_LIBRARIES) \
306+
$(OBJ_FILES_DIST) -o $@
307+
308+
dist/wa-sqlite-async-main.mjs: $(OBJ_FILES_DIST) $(EXPORTED_FUNCTIONS) $(EXPORTED_RUNTIME_METHODS) $(ASYNCIFY_IMPORTS)
309+
mkdir -p dist
310+
$(EMCC) $(EMFLAGS_DIST) $(EMFLAGS_DYNAMIC) \
311+
$(EMFLAGS_INTERFACES) \
312+
$(EMFLAGS_LIBRARIES) \
313+
$(EMFLAGS_ASYNCIFY_DIST) \
314+
$(OBJ_FILES_DIST) -o $@
315+
316+
# TODO link static
266317
dist/wa-sqlite-jspi.mjs: $(OBJ_FILES_DIST) $(JSFILES) $(EXPORTED_FUNCTIONS) $(EXPORTED_RUNTIME_METHODS) $(ASYNCIFY_IMPORTS)
267318
mkdir -p dist
268319
$(EMCC) $(EMFLAGS_DIST) \

dist/wa-sqlite-async-main.mjs

Lines changed: 16 additions & 0 deletions
Large diffs are not rendered by default.

dist/wa-sqlite-async-main.wasm

3.55 MB
Binary file not shown.

dist/wa-sqlite-async.mjs

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

dist/wa-sqlite-async.wasm

-65.4 KB
Binary file not shown.

dist/wa-sqlite-jspi.mjs

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

dist/wa-sqlite-jspi.wasm

-41.2 KB
Binary file not shown.

dist/wa-sqlite-main.mjs

Lines changed: 16 additions & 0 deletions
Large diffs are not rendered by default.

dist/wa-sqlite-main.wasm

2.27 MB
Binary file not shown.

dist/wa-sqlite.mjs

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)