@@ -6,6 +6,8 @@ EXTENSION_FUNCTIONS = extension-functions.c
66EXTENSION_FUNCTIONS_URL = https://www.sqlite.org/contrib/download/extension-functions.c?get=25
77EXTENSION_FUNCTIONS_SHA3 = ee39ddf5eaa21e1d0ebcbceeab42822dd0c4f82d8039ce173fd4814807faabfa
88
9+
10+
911# source files
1012CFILES = \
1113 sqlite3.c \
@@ -49,7 +51,6 @@ CFLAGS_DIST = -Oz -flto $(CFLAGS_COMMON)
4951EMFLAGS_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+
6881EMFLAGS_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
199213debug/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
206221debug/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
235268debug/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
251285dist/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
258293dist/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
266317dist/wa-sqlite-jspi.mjs : $(OBJ_FILES_DIST ) $(JSFILES ) $(EXPORTED_FUNCTIONS ) $(EXPORTED_RUNTIME_METHODS ) $(ASYNCIFY_IMPORTS )
267318 mkdir -p dist
268319 $(EMCC ) $(EMFLAGS_DIST ) \
0 commit comments