2 #^^^^ help emacs select makefile mode
4 # This is a sub-make for building a standalone wasmfs-based
5 # sqlite3.wasm. It is intended to be "include"d from the main
7 ########################################################################
8 MAKEFILE.wasmfs
:= $(lastword
$(MAKEFILE_LIST
))
10 # Maintenance reminder: these particular files cannot be built into a
11 # subdirectory because loading of the auxiliary
12 # sqlite3-wasmfs.worker.js file it creates fails if sqlite3-wasmfs.js
13 # is loaded from any directory other than the one in which the
14 # containing HTML lives. Similarly, they cannot be loaded from a
15 # Worker to an Emscripten quirk regarding loading nested Workers.
16 dir.wasmfs
:= $(dir.wasm
)
17 sqlite3-wasmfs.js
:= $(dir.wasmfs
)/sqlite3-wasmfs.js
18 sqlite3-wasmfs.wasm
:= $(dir.wasmfs
)/sqlite3-wasmfs.wasm
20 CLEAN_FILES
+= $(sqlite3-wasmfs.js
) $(sqlite3-wasmfs.wasm
) \
21 $(subst .js
,.worker.js
,$(sqlite3-wasmfs.js
))
23 ########################################################################
24 # emcc flags for .c/.o.
25 sqlite3-wasmfs.
cflags :=
26 sqlite3-wasmfs.
cflags += -std
=c99
-fPIC
27 sqlite3-wasmfs.
cflags += -pthread
28 sqlite3-wasmfs.
cflags += $(cflags.common
)
29 sqlite3-wasmfs.
cflags += $(SQLITE_OPT
) -DSQLITE_ENABLE_WASMFS
31 ########################################################################
32 # emcc flags specific to building the final .js/.wasm file...
33 sqlite3-wasmfs.jsflags
:= -fPIC
34 sqlite3-wasmfs.jsflags
+= --no-entry
35 sqlite3-wasmfs.jsflags
+= --minify
0
36 sqlite3-wasmfs.jsflags
+= -sMODULARIZE
37 sqlite3-wasmfs.jsflags
+= -sSTRICT_JS
38 sqlite3-wasmfs.jsflags
+= -sDYNAMIC_EXECUTION
=0
39 sqlite3-wasmfs.jsflags
+= -sNO_POLYFILL
40 sqlite3-wasmfs.jsflags
+= -sEXPORTED_FUNCTIONS
=@
$(abspath
$(dir.api
)/EXPORTED_FUNCTIONS.sqlite3-api
)
41 sqlite3-wasmfs.jsflags
+= -sEXPORTED_RUNTIME_METHODS
=FS
,wasmMemory
,allocateUTF8OnStack
42 # wasmMemory ==> for -sIMPORTED_MEMORY
43 # allocateUTF8OnStack ==> wasmfs internals
44 sqlite3-wasmfs.jsflags
+= -sUSE_CLOSURE_COMPILER
=0
45 sqlite3-wasmfs.jsflags
+= -sIMPORTED_MEMORY
46 #sqlite3-wasmfs.jsflags += -sINITIAL_MEMORY=13107200
47 #sqlite3-wasmfs.jsflags += -sTOTAL_STACK=4194304
48 sqlite3-wasmfs.jsflags
+= -sEXPORT_NAME
=$(sqlite3.js.init-func
)
49 sqlite3-wasmfs.jsflags
+= -sGLOBAL_BASE
=4096 # HYPOTHETICALLY keep func table indexes from overlapping w/ heap addr.
50 #sqlite3-wasmfs.jsflags += -sFILESYSTEM=0 # only for experimentation. sqlite3 needs the FS API
51 # Perhaps the wasmfs build doesn't?
52 #sqlite3-wasmfs.jsflags += -sABORTING_MALLOC
53 sqlite3-wasmfs.jsflags
+= -sALLOW_TABLE_GROWTH
54 sqlite3-wasmfs.jsflags
+= -Wno-limited-postlink-optimizations
55 # ^^^^^ it likes to warn when we have "limited optimizations" via the -g3 flag.
56 sqlite3-wasmfs.jsflags
+= -sERROR_ON_UNDEFINED_SYMBOLS
=0
57 sqlite3-wasmfs.jsflags
+= -sLLD_REPORT_UNDEFINED
58 #sqlite3-wasmfs.jsflags += --import-undefined
59 sqlite3-wasmfs.jsflags
+= -sMEMORY64
=0
60 sqlite3-wasmfs.jsflags
+= -sINITIAL_MEMORY
=128450560
61 # ^^^^ 64MB is not enough for WASMFS/OPFS test runs using batch-runner.js
62 sqlite3-wasmfs.fsflags
:= -pthread
-sWASMFS
-sPTHREAD_POOL_SIZE
=2 -sENVIRONMENT
=web
,worker
63 # -sPTHREAD_POOL_SIZE values of 2 or higher trigger that bug.
64 sqlite3-wasmfs.jsflags
+= $(sqlite3-wasmfs.fsflags
)
65 #sqlite3-wasmfs.jsflags += -sALLOW_MEMORY_GROWTH
66 #^^^ using ALLOW_MEMORY_GROWTH produces a warning from emcc:
67 # USE_PTHREADS + ALLOW_MEMORY_GROWTH may run non-wasm code slowly,
68 # see https://github.com/WebAssembly/design/issues/1271 [-Wpthreads-mem-growth]
69 sqlite3-wasmfs.jsflags
+= -sWASM_BIGINT
=$(emcc.WASM_BIGINT
)
70 $(eval
$(call call-make-pre-js
,sqlite3-wasmfs
))
71 sqlite3-wasmfs.jsflags
+= $(pre-post-common.flags
) $(pre-post-sqlite3-wasmfs.flags
)
72 $(sqlite3-wasmfs.js
): $(sqlite3-wasm.c
) \
73 $(EXPORTED_FUNCTIONS.api
) $(MAKEFILE
) $(MAKEFILE.wasmfs
) \
74 $(pre-post-sqlite3-wasmfs.deps
)
75 @echo
"Building $@ ..."
76 $(emcc.bin
) -o
$@
$(emcc_opt_full
) $(emcc.flags
) \
77 $(sqlite3-wasmfs.
cflags) $(sqlite3-wasmfs.jsflags
) \
79 chmod
-x
$(sqlite3-wasmfs.wasm
)
80 $(maybe-wasm-strip
) $(sqlite3-wasmfs.wasm
)
81 @ls
-la
$@
$(sqlite3-wasmfs.wasm
)
82 $(sqlite3-wasmfs.wasm
): $(sqlite3-wasmfs.js
)
83 wasmfs
: $(sqlite3-wasmfs.js
)
86 ########################################################################
87 # speedtest1 for wasmfs.
88 speedtest1-wasmfs.js
:= $(dir.wasmfs
)/speedtest1-wasmfs.js
89 speedtest1-wasmfs.wasm
:= $(subst .js
,.wasm
,$(speedtest1-wasmfs.js
))
90 speedtest1-wasmfs.eflags
:= $(sqlite3-wasmfs.fsflags
)
91 speedtest1-wasmfs.eflags
+= $(SQLITE_OPT
) -DSQLITE_ENABLE_WASMFS
92 speedtest1-wasmfs.eflags
+= -sALLOW_MEMORY_GROWTH
=0
93 speedtest1-wasmfs.eflags
+= -sINITIAL_MEMORY
=$(emcc.INITIAL_MEMORY
.128)
94 $(eval
$(call call-make-pre-js
,speedtest1-wasmfs
))
95 $(speedtest1-wasmfs.js
): $(speedtest1.cses
) $(sqlite3-wasmfs.js
) \
96 $(MAKEFILE
) $(MAKEFILE.wasmfs
) \
97 $(pre-post-speedtest1-wasmfs.deps
) \
98 $(EXPORTED_FUNCTIONS.speedtest1
)
99 @echo
"Building $@ ..."
101 $(speedtest1-wasmfs.eflags
) $(speedtest1-common.eflags
) \
102 $(pre-post-speedtest1-wasmfs.flags
) \
103 $(speedtest1.
cflags) \
104 $(sqlite3-wasmfs.
cflags) \
105 -o
$@
$(speedtest1.cses
) -lm
106 $(maybe-wasm-strip
) $(speedtest1-wasmfs.wasm
)
107 ls
-la
$@
$(speedtest1-wasmfs.wasm
)
109 speedtest1
: $(speedtest1-wasmfs.js
)
110 CLEAN_FILES
+= $(speedtest1-wasmfs.js
) $(speedtest1-wasmfs.wasm
) \
111 $(subst .js
,.worker.js
,$(speedtest1-wasmfs.js
))
113 ########################################################################