1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-10-21 11:13:54 +03:00

Get most of the wasm build (re)working and much prettier.

FossilOrigin-Name: a5a7890c75003a637a227b700dc342f4f4a24bd368b216bdb168b4ddfbe8f015
This commit is contained in:
stephan
2025-09-23 13:49:44 +00:00
parent a07871d332
commit cfce9b6a11
4 changed files with 222 additions and 140 deletions

View File

@@ -224,20 +224,6 @@ $(sqlite3.h):
# $(MAKE) -C $(dir.top) sqlite3.c # $(MAKE) -C $(dir.top) sqlite3.c
$(sqlite3.c): $(sqlite3.h) $(sqlite3.c): $(sqlite3.h)
########################################################################
# barebones=1 disables all "extraneous" stuff from sqlite3-wasm.c, the
# goal being to create a WASM file with only the core APIs.
ifeq (1,$(barebones))
wasm-bare-bones = 1
$(info ==============================================================)
$(info == This is a bare-bones build. It trades away features for)
$(info == a smaller .wasm file.)
$(info ==============================================================)
else
wasm-bare-bones = 0
endif
# undefine barebones # relatively new gmake feature, not ubiquitous
# Common options for building sqlite3-wasm.c and speedtest1.c. # Common options for building sqlite3-wasm.c and speedtest1.c.
# Explicit ENABLEs... # Explicit ENABLEs...
SQLITE_OPT.common = \ SQLITE_OPT.common = \
@@ -510,7 +496,7 @@ endif
SQLITE.strip-emcc-js-cruft = \ SQLITE.strip-emcc-js-cruft = \
sed -i -e '/^.*= \(_sqlite3\|_fiddle\)[^=]*=.*createExportWrapper/d' \ sed -i -e '/^.*= \(_sqlite3\|_fiddle\)[^=]*=.*createExportWrapper/d' \
-e '/^var \(_sqlite3\|_fiddle\)[^=]*=.*makeInvalidEarlyAccess/d' $@ || exit; \ -e '/^var \(_sqlite3\|_fiddle\)[^=]*=.*makeInvalidEarlyAccess/d' $@ || exit; \
echo '$(1) $(emo.disk) (Probably) /createExportWrapper()/d and /makeInvalidEarlyAccess()/d.' echo '$(1) $(emo.garbage) (Probably) /createExportWrapper()/d and /makeInvalidEarlyAccess()/d.'
# When passing emcc_opt from the CLI, += and re-assignment have no # When passing emcc_opt from the CLI, += and re-assignment have no
# effect, so emcc_opt+=-g3 doesn't work. So... # effect, so emcc_opt+=-g3 doesn't work. So...
@@ -765,28 +751,6 @@ $(sqlite3-api-build-version.js): $(MKDIR.bld) $(bin.version-info) $(MAKEFILE)
echo '});'; \ echo '});'; \
} > $@ } > $@
########################################################################
# --post-js and --pre-js are emcc flags we use to append/prepend JS to
# the generated emscripten module file. These rules set up the core
# pre/post files for use by the various builds. --pre-js is used to
# inject code which needs to run as part of the pre-WASM-load phase.
# --post-js injects code which runs after the WASM module is loaded
# and includes the entirety of the library plus some
# Emscripten-specific post-bootstrapping code.
pre-js.js.in = $(dir.api)/pre-js.c-pp.js
post-js.js.in = $(dir.tmp)/post-js.c-pp.js
post-jses.js = \
$(dir.api)/post-js-header.js \
$(sqlite3-api.js.in) \
$(dir.api)/post-js-footer.js
$(post-js.js.in): $(MKDIR.bld) $(post-jses.js) $(MAKEFILE)
@echo "Making $@..."
@for i in $(post-jses.js); do \
echo "/* BEGIN FILE: $$i */"; \
cat $$i; \
echo "/* END FILE: $$i */"; \
done > $@
# Undocumented Emscripten feature: if the target file extension is # Undocumented Emscripten feature: if the target file extension is
# "mjs", it defaults to ES6 module builds: # "mjs", it defaults to ES6 module builds:
@@ -893,6 +857,56 @@ EXPORTED_FUNCTIONS.fiddle = $(dir.tmp)/EXPORTED_FUNCTIONS.fiddle
#$(dir.dout)/sqlite3-node.mjs: $(sqlite3.mjs) #$(dir.dout)/sqlite3-node.mjs: $(sqlite3.mjs)
#CLEAN_FILES += $(sqlite3.wasm) #CLEAN_FILES += $(sqlite3.wasm)
########################################################################
# barebones=1 disables all "extraneous" stuff from sqlite3-wasm.c, the
# goal being to create a WASM file with only the core APIs.
ifeq (1,$(barebones))
wasm-bare-bones = 1
$(info ==============================================================)
$(info == This is a bare-bones build. It trades away features for)
$(info == a smaller .wasm file.)
$(info ==============================================================)
else
wasm-bare-bones = 0
endif
# undefine barebones # relatively new gmake feature, not ubiquitous
#
# Only add wasmfs if wasmfs.enable=1 or we're running (dist)clean
#
ifneq (,$(filter wasmfs,$(MAKECMDGOALS)))
wasmfs.enable ?= 1
else
# Unconditionally enable wasmfs for [dist]clean so that the wasmfs
# sub-make can clean up.
wasmfs.enable ?= $(MAKING_CLEAN)
endif
ifeq (1,$(wasmfs.enable))
# wasmfs build disabled 2022-10-19 per /chat discussion.
# OPFS-over-wasmfs was initially a stopgap measure and a convenient
# point of comparison for the OPFS sqlite3_vfs's performance, but it
# currently doubles our deliverables and build maintenance burden for
# little benefit.
#
########################################################################
# Some platforms do not support the WASMFS build. Raspberry Pi OS is
# one of them (or was when that comment was initially written). As
# such platforms are discovered, add their (uname -m) name to
# PLATFORMS_WITH_NO_WASMFS to exclude the wasmfs build parts.
PLATFORMS_WITH_NO_WASMFS = aarch64 # add any others here
THIS_ARCH = $(shell /usr/bin/uname -m)
ifneq (,$(filter $(THIS_ARCH),$(PLATFORMS_WITH_NO_WASMFS)))
$(info This platform does not support the WASMFS build.)
HAVE_WASMFS = 0
else
HAVE_WASMFS = 1
endif
endif
# /wasmfs
########################################################################
# This block MUST come between the above definitions of # This block MUST come between the above definitions of
# sqlite3-...js/mjs and the $(eval) calls below this block which use # sqlite3-...js/mjs and the $(eval) calls below this block which use
# SQLITE.CALL.C-PP.FILTER. # SQLITE.CALL.C-PP.FILTER.
@@ -1139,39 +1153,6 @@ oz: clean
# https://sqlite.org/fiddle application... # https://sqlite.org/fiddle application...
include $(MAKEFILE.fiddle) include $(MAKEFILE.fiddle)
# Only add wasmfs if wasmfs.enable=1 or we're running (dist)clean
ifneq (,$(filter wasmfs,$(MAKECMDGOALS)))
wasmfs.enable ?= 1
else
# Unconditionally enable wasmfs for [dist]clean so that the wasmfs
# sub-make can clean up.
wasmfs.enable ?= $(MAKING_CLEAN)
endif
ifeq (1,$(wasmfs.enable))
# wasmfs build disabled 2022-10-19 per /chat discussion.
# OPFS-over-wasmfs was initially a stopgap measure and a convenient
# point of comparison for the OPFS sqlite3_vfs's performance, but it
# currently doubles our deliverables and build maintenance burden for
# little benefit.
#
########################################################################
# Some platforms do not support the WASMFS build. Raspberry Pi OS is
# one of them (or was when that comment was initially written). As
# such platforms are discovered, add their (uname -m) name to
# PLATFORMS_WITH_NO_WASMFS to exclude the wasmfs build parts.
PLATFORMS_WITH_NO_WASMFS = aarch64 # add any others here
THIS_ARCH = $(shell /usr/bin/uname -m)
ifneq (,$(filter $(THIS_ARCH),$(PLATFORMS_WITH_NO_WASMFS)))
$(info This platform does not support the WASMFS build.)
HAVE_WASMFS = 0
else
HAVE_WASMFS = 1
include wasmfs.make
endif
endif
# /wasmfs
########################################################################
######################################################################## ########################################################################
# Push files to public wasm-testing.sqlite.org server # Push files to public wasm-testing.sqlite.org server
wasm-testing.include = *.js *.mjs *.html \ wasm-testing.include = *.js *.mjs *.html \

View File

@@ -96,6 +96,7 @@ struct BuildDef {
const char *zCmppD; /* Extra -D... flags for c-pp */ const char *zCmppD; /* Extra -D... flags for c-pp */
const char *zEmcc; /* Extra flags for emcc */ const char *zEmcc; /* Extra flags for emcc */
const char *zEnv; /* emcc -sENVIRONMENT=X flag */ const char *zEnv; /* emcc -sENVIRONMENT=X flag */
const char *zIfCond; /* "ifeq (...)" or similar */
int flags; /* Flags from LibModeFlags */ int flags; /* Flags from LibModeFlags */
}; };
typedef struct BuildDef BuildDef; typedef struct BuildDef BuildDef;
@@ -146,6 +147,7 @@ const BuildDefs oBuildDefs = {
.zCmppD = 0, .zCmppD = 0,
.zEmcc = 0, .zEmcc = 0,
.zEnv = "web,worker", .zEnv = "web,worker",
.zIfCond = 0,
.flags = CP_ALL .flags = CP_ALL
}, },
@@ -156,7 +158,8 @@ const BuildDefs oBuildDefs = {
.zCmppD = 0, .zCmppD = 0,
.zEmcc = "-sMEMORY64=1", .zEmcc = "-sMEMORY64=1",
.zEnv = 0, .zEnv = 0,
.flags = CP_ALL | F_64BIT // | F_NOT_IN_ALL .zIfCond = 0,
.flags = CP_ALL | F_64BIT// | F_NOT_IN_ALL
}, },
.esm = { .esm = {
@@ -166,6 +169,7 @@ const BuildDefs oBuildDefs = {
.zCmppD = "-Dtarget=es6-module", .zCmppD = "-Dtarget=es6-module",
.zEmcc = 0, .zEmcc = 0,
.zEnv = 0, .zEnv = 0,
.zIfCond = 0,
.flags = CP_JS | F_ESM .flags = CP_JS | F_ESM
}, },
@@ -176,6 +180,7 @@ const BuildDefs oBuildDefs = {
.zCmppD = "-Dtarget=es6-module", .zCmppD = "-Dtarget=es6-module",
.zEmcc = "-sMEMORY64=1", .zEmcc = "-sMEMORY64=1",
.zEnv = 0, .zEnv = 0,
.zIfCond = 0,
.flags = CP_JS | F_ESM | F_64BIT // | F_NOT_IN_ALL .flags = CP_JS | F_ESM | F_64BIT // | F_NOT_IN_ALL
}, },
@@ -191,16 +196,18 @@ const BuildDefs oBuildDefs = {
.zCmppD = "$(c-pp.D.esm) -Dtarget=es6-bundler-friendly", .zCmppD = "$(c-pp.D.esm) -Dtarget=es6-bundler-friendly",
.zEmcc = 0, .zEmcc = 0,
.zEnv = 0, .zEnv = 0,
.zIfCond = 0,
.flags = CP_JS | F_BUNDLER_FRIENDLY | F_ESM .flags = CP_JS | F_BUNDLER_FRIENDLY | F_ESM
}, },
.bundler64 = { .bundler64 = {
.zEmo = "📦", .zEmo = "📦",
.zBaseName = "sqlite3", .zBaseName = "sqlite3-bundler-friendly",
.zDotWasm = 0, .zDotWasm = 0,
.zCmppD = "$(c-pp.D.bundler)", .zCmppD = "$(c-pp.D.bundler)",
.zEmcc = "-sMEMORY64=1", .zEmcc = "-sMEMORY64=1",
.zEnv = 0, .zEnv = 0,
.zIfCond = 0,
.flags = CP_JS | F_ESM | F_BUNDLER_FRIENDLY | F_64BIT .flags = CP_JS | F_ESM | F_BUNDLER_FRIENDLY | F_64BIT
}, },
@@ -218,6 +225,7 @@ const BuildDefs oBuildDefs = {
Emscripten to generate code which confuses node: it cannot Emscripten to generate code which confuses node: it cannot
reliably determine whether the build is for a browser or for reliably determine whether the build is for a browser or for
node. */ node. */
.zIfCond = 0,
.flags = CP_ALL | F_UNSUPPORTED | F_NODEJS .flags = CP_ALL | F_UNSUPPORTED | F_NODEJS
}, },
@@ -229,6 +237,7 @@ const BuildDefs oBuildDefs = {
.zCmppD = "-Dtarget=node $(c-pp.D.bundler)", .zCmppD = "-Dtarget=node $(c-pp.D.bundler)",
.zEmcc = 0, .zEmcc = 0,
.zEnv = "node", .zEnv = "node",
.zIfCond = 0,
.flags = CP_ALL | F_UNSUPPORTED | F_NODEJS | F_64BIT .flags = CP_ALL | F_UNSUPPORTED | F_NODEJS | F_64BIT
}, },
@@ -240,6 +249,7 @@ const BuildDefs oBuildDefs = {
.zCmppD = "$(c-pp.D.bundler)", .zCmppD = "$(c-pp.D.bundler)",
.zEmcc = "-sEXPORT_ES6 -sUSE_ES6_IMPORT_META", .zEmcc = "-sEXPORT_ES6 -sUSE_ES6_IMPORT_META",
.zEnv = 0, .zEnv = 0,
.zIfCond = "ifeq (1,$(HAVE_WASMFS))",
.flags = CP_ALL | F_UNSUPPORTED | F_WASMFS .flags = CP_ALL | F_UNSUPPORTED | F_WASMFS
} }
}; };
@@ -275,6 +285,41 @@ static void mk_prologue(void){
ps("endif"); ps("endif");
} }
ps(zBanner
"emo.disk = 💾\n"
"emo.fire = 🔥\n"
"emo.done = 🏆\n" /*🏁*/
"emo.bug = 🐞\n"
"emo.megaphone = 📣\n"
"emo.mute = 🔇\n"
"emo.tool = 🔨\n"
"emo.compile = ⏳\n"
"emo.info =\n"
"emo.stop =🛑\n"
"emo.strip =🪚\n" /*🔪*/
"emo.garbage =🗑\n"
);
ps(zBanner
/** $1 = build name
$2 = Input file(s): cat $(2) | c-pp ...
$3 = Output file: c-pp -o $(3)
$4 = optional c-pp -D... flags */
"define b.do.c-pp\n"
"$(3): $$(MAKEFILE_LIST) $$(bin.c-pp) $(2)\n"
"\t@echo '$$(logtag.$(1)) $$(emo.disk) $(4)'; mkdir -p $$(dir $$@)\n"
"\t@cat $(2) | $$(bin.c-pp) -o $(3) $(4) $$(SQLITE.CALL.C-PP.FILTER.global) || exit $$$$?\n"
"\nCLEAN_FILES += $(2)\n"
"endef\n"
);
ps(zBanner
/** $1 = build name */
"b.do.wasm-strip = "
"echo '$(logtag.$(1)) $(emo.strip) wasm-strip $(out.$(1).wasm)'; "
"$(bin.wasm-strip) $(out.$(1).wasm)\n"
);
ps(zBanner ps(zBanner
"# Inputs for the sqlite3-api.js family.\n" "# Inputs for the sqlite3-api.js family.\n"
"#\n" "#\n"
@@ -324,7 +369,7 @@ static void mk_prologue(void){
"# support -e SCRIPT.\n" "# support -e SCRIPT.\n"
"$(sqlite3-license-version.js): $(MKDIR.bld) $(sqlite3.h) " "$(sqlite3-license-version.js): $(MKDIR.bld) $(sqlite3.h) "
"$(dir.api)/sqlite3-license-version-header.js $(MAKEFILE)\n" "$(dir.api)/sqlite3-license-version-header.js $(MAKEFILE)\n"
"\t@echo 'Making $@...'; { \\\n" "\t@echo '$(emo.disk) $@'; { \\\n"
"\t\tcat $(dir.api)/sqlite3-license-version-header.js; \\\n" "\t\tcat $(dir.api)/sqlite3-license-version-header.js; \\\n"
"\t\techo '/*'; \\\n" "\t\techo '/*'; \\\n"
"\t\techo '** This code was built from sqlite3 version...'; \\\n" "\t\techo '** This code was built from sqlite3 version...'; \\\n"
@@ -341,7 +386,7 @@ static void mk_prologue(void){
"# $(sqlite3-api-build-version.js) injects the build version info into\n" "# $(sqlite3-api-build-version.js) injects the build version info into\n"
"# the bundle in JSON form.\n" "# the bundle in JSON form.\n"
"$(sqlite3-api-build-version.js): $(MKDIR.bld) $(bin.version-info) $(MAKEFILE)\n" "$(sqlite3-api-build-version.js): $(MKDIR.bld) $(bin.version-info) $(MAKEFILE)\n"
"\t@echo 'Making $@...'; { \\\n" "\t@echo '$(emo.disk) $@'; { \\\n"
"\t\techo 'globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){'; \\\n" "\t\techo 'globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){'; \\\n"
"\t\techo -n ' sqlite3.version = '; \\\n" "\t\techo -n ' sqlite3.version = '; \\\n"
"\t\t$(bin.version-info) --json; \\\n" "\t\t$(bin.version-info) --json; \\\n"
@@ -354,7 +399,7 @@ static void mk_prologue(void){
"# extern-post-js* and extern-pre-js* are files for use with\n" "# extern-post-js* and extern-pre-js* are files for use with\n"
"# Emscripten's --extern-pre-js and --extern-post-js flags.\n" "# Emscripten's --extern-pre-js and --extern-post-js flags.\n"
"extern-pre-js.js = $(dir.api)/extern-pre-js.js\n" "extern-pre-js.js = $(dir.api)/extern-pre-js.js\n"
"extern-post-js.js.in = $(dir.api)/extern-post-js.c-pp.js\n" "extern-post-js.in.js = $(dir.api)/extern-post-js.c-pp.js\n"
"# Emscripten flags for --[extern-][pre|post]-js=... for the\n" "# Emscripten flags for --[extern-][pre|post]-js=... for the\n"
"# various builds.\n" "# various builds.\n"
"# pre-post-jses.*.deps = lists of dependencies for the\n" "# pre-post-jses.*.deps = lists of dependencies for the\n"
@@ -363,30 +408,8 @@ static void mk_prologue(void){
"$(extern-pre-js.js) $(sqlite3-license-version.js)" "$(extern-pre-js.js) $(sqlite3-license-version.js)"
); );
pf(zBanner
"define emcc.do.build\n"
/* $1 = build name */
"$(bin.emcc) -o $@ $(emcc_opt_full) $(emcc.flags) "
"$(emcc.jsflags) -sENVIRONMENT=$(emcc.environment.$(1)) "
"\t\t$(pre-post.$(1).flags) "
"\t\t$(emcc.flags.$(1)) "
"\t\t$(cflags.common) $(cflags.$(1)) "
"\t\t$(SQLITE_OPT) "
"\t\t$(cflags.wasm_extra_init) $(sqlite3-wasm.cfiles)\n"
"endef\n"
);
ps(zBanner ps(zBanner
"emo.disk = 💾\n" "emcc.loud ?= 0\n"
"emo.fire = 🔥\n"
"emo.done = 🏆\n" /*🏁*/
"emo.bug = 🐞\n"
"emo.megaphone = 📣\n"
"emo.mute = 🔇\n"
"emo.tool = 🔨\n"
);
ps(
"emcc.loud ?= 1\n"
"ifeq (1,$(emcc.loud))\n" "ifeq (1,$(emcc.loud))\n"
"$(info $(emo.megaphone) Emitting loud build info." "$(info $(emo.megaphone) Emitting loud build info."
" Pass emcc.loud=0 to disable it.)\n" " Pass emcc.loud=0 to disable it.)\n"
@@ -398,6 +421,38 @@ static void mk_prologue(void){
"endif\n" "endif\n"
); );
ps(zBanner
"# --post-js and --pre-js are emcc flags we use to append/prepend JS to\n"
"# the generated emscripten module file. These rules set up the core\n"
"# pre/post files for use by the various builds. --pre-js is used to\n"
"# inject code which needs to run as part of the pre-WASM-load phase.\n"
"# --post-js injects code which runs after the WASM module is loaded\n"
"# and includes the entirety of the library plus some\n"
"# Emscripten-specific post-bootstrapping code.\n"
"pre-js.in.js = $(dir.api)/pre-js.c-pp.js\n"
"post-js.in.js = $(dir.tmp)/post-js.c-pp.js\n"
"post-jses.js = $(dir.api)/post-js-header.js $(sqlite3-api.js.in) $(dir.api)/post-js-footer.js\n"
"$(post-js.in.js): $(MKDIR.bld) $(post-jses.js) $(MAKEFILE)\n"
" @echo '$(emo.disk) $@'\n"
" @for i in $(post-jses.js); do \\n"
" echo \"/* BEGIN FILE: $$i */\"; \\n"
" cat $$i; \\n"
" echo \"/* END FILE: $$i */\"; \\n"
" done > $@\n"
);
pf(zBanner
"define b.do.emcc\n"
/* $1 = build name */
"$(bin.emcc) -o $@ $(emcc_opt_full) $(emcc.flags) "
"$(emcc.jsflags) -sENVIRONMENT=$(emcc.environment.$(1)) "
"\t\t$(pre-post.$(1).flags) "
"\t\t$(emcc.flags.$(1)) "
"\t\t$(cflags.common) $(cflags.$(1)) "
"\t\t$(SQLITE_OPT) "
"\t\t$(cflags.wasm_extra_init) $(sqlite3-wasm.cfiles)\n"
"endef\n"
);
{ {
/* SQLITE.CALL.WASM-OPT = shell code to run $(1) (source wasm file /* SQLITE.CALL.WASM-OPT = shell code to run $(1) (source wasm file
** name) through $(bin.wasm-opt) */ ** name) through $(bin.wasm-opt) */
@@ -469,7 +524,7 @@ static void mk_prologue(void){
"\t\tls -l $(1); \\\n" "\t\tls -l $(1); \\\n"
#endif #endif
"\telse \\\n" "\telse \\\n"
"\t\techo '$(2) 🔥 ignoring wasm-opt failure'; \\\n" "\t\techo '$(2) $(emo.fire) ignoring wasm-opt failure'; \\\n"
"\tfi\n", "\tfi\n",
zOptFlags zOptFlags
); );
@@ -489,7 +544,6 @@ static void mk_pre_post(char const *zBuildName,
/* Very common printf() args combo. */ /* Very common printf() args combo. */
pf("%s# Begin --pre/--post flags for %s\n", zBanner, zBuildName); pf("%s# Begin --pre/--post flags for %s\n", zBanner, zBuildName);
pf("c-pp.D.%s = %s\n", zBuildName, pB->zCmppD ? pB->zCmppD : "");
ps("\n# --pre-js=..."); ps("\n# --pre-js=...");
pf("pre-js.%s.js = $(dir.tmp)/pre-js.%s.js\n" pf("pre-js.%s.js = $(dir.tmp)/pre-js.%s.js\n"
@@ -501,8 +555,9 @@ static void mk_pre_post(char const *zBuildName,
zBuildName); zBuildName);
if( 0==WASM_CUSTOM_INSTANTIATE ){ if( 0==WASM_CUSTOM_INSTANTIATE ){
pf("\tcat $(pre-js.js.in) | $(bin.c-pp) -o $@ $(c-pp.D.%s)\n", pf("\t@echo '$(logtag.%s) $(emo.disk) $(c-pp.D.%s)'; "
zBuildName); "cat $(pre-js.in.js) | $(bin.c-pp) -o $@ $(c-pp.D.%s)\n",
zBuildName, zBuildName, zBuildName);
}else{ }else{
#if 0 #if 0
fixme; fixme;
@@ -511,14 +566,15 @@ static void mk_pre_post(char const *zBuildName,
pf("pre-js.%s.js.intermediary = " pf("pre-js.%s.js.intermediary = "
"$(dir.tmp)/pre-js.%s.intermediary.js\n", "$(dir.tmp)/pre-js.%s.intermediary.js\n",
zBuildName, zBuildName); zBuildName, zBuildName);
pf("$(eval $(call SQLITE.CALL.C-PP.FILTER,$(pre-js.js.in)," pf("$(eval $(call SQLITE.CALL.C-PP.FILTER,$(pre-js.in.js),"
"$(pre-js.%s.js.intermediary)," "$(pre-js.%s.js.intermediary),"
C_PP_D_CUSTOM_INSTANTIATE "$(c-pp.D.%s)))\n", C_PP_D_CUSTOM_INSTANTIATE "$(c-pp.D.%s)))\n",
zBuildName, zBuildName); zBuildName, zBuildName);
pf("$(pre-js.%s.js): $(pre-js.%s.js.intermediary)\n", pf("$(pre-js.%s.js): $(pre-js.%s.js.intermediary)\n",
zBuildName, zBuildName); zBuildName, zBuildName);
pf("\tcp $(pre-js.%s.js.intermediary) $@\n", zBuildName); pf("\tcp $(pre-js.%s.js.intermediary) $@\n", zBuildName);
pf("\t@echo 'sIMS.wasmFilename = \"%s\";' >> $@\n", zWasmOut) pf("\t@echo 'sIMS.wasmFilename = \"$(out.%s.wasm)\";' >> $@\n",
zBuildName)
/* see api/pre-js.c-pp.js:Module.instantiateModule() */; /* see api/pre-js.c-pp.js:Module.instantiateModule() */;
#endif #endif
} }
@@ -531,17 +587,23 @@ static void mk_pre_post(char const *zBuildName,
"$(sqlite3-api.%s.js) " "$(sqlite3-api.%s.js) "
"$(dir.api)/post-js-footer.js\n", "$(dir.api)/post-js-footer.js\n",
zBuildName, zBuildName); zBuildName, zBuildName);
pf("$(eval $(call SQLITE.CALL.C-PP.FILTER,$(post-jses.%s)," pf("$(eval $(call b.do.c-pp,"
"$(post-js.%s.js),$(c-pp.D.%s)))\n", "%s,"
zBuildName, zBuildName, zBuildName); "$(post-jses.%s),"
"$(post-js.%s.js),"
"$(c-pp.D.%s)"
"))\n",
zBuildName, zBuildName, zBuildName, zBuildName);
ps("\n# --extern-post-js=..."); ps("\n# --extern-post-js=...");
pf("extern-post-js.%s.js = $(dir.tmp)/extern-post-js.%s.js\n", pf("extern-post-js.%s.js = $(dir.tmp)/extern-post-js.%s.js\n",
zBuildName, zBuildName); zBuildName, zBuildName);
pf("$(eval $(call SQLITE.CALL.C-PP.FILTER,$(extern-post-js.js.in)," pf("$(eval $(call b.do.c-pp,"
"%s,"
"$(extern-post-js.in.js),"
"$(extern-post-js.%s.js)," "$(extern-post-js.%s.js),"
C_PP_D_CUSTOM_INSTANTIATE "$(c-pp.D.%s)))\n", C_PP_D_CUSTOM_INSTANTIATE "$(c-pp.D.%s)))\n",
zBuildName, zBuildName); zBuildName, zBuildName, zBuildName);
ps("\n# --pre/post misc..."); ps("\n# --pre/post misc...");
/* Combined flags for use with emcc... */ /* Combined flags for use with emcc... */
@@ -589,7 +651,7 @@ static void mk_fiddle(void){
"$(pre-post-fiddle-module-vanilla.flags) $(fiddle.cses)\n", "$(pre-post-fiddle-module-vanilla.flags) $(fiddle.cses)\n",
zTail); zTail);
ps("\t@chmod -x $(basename $@).wasm"); ps("\t@chmod -x $(basename $@).wasm");
ps("\t@$(maybe-wasm-strip) $(basename $@).wasm"); pf("\t@$(call b.do.wasm-strip,%s)\n", zBuildName);
ps("\t@$(call SQLITE.strip-emcc-js-cruft,NAME_GOES_HERE)"); ps("\t@$(call SQLITE.strip-emcc-js-cruft,NAME_GOES_HERE)");
pf("\t@cp -p $(SOAP.js) $(dir $@)\n"); pf("\t@cp -p $(SOAP.js) $(dir $@)\n");
if( 1==i ){/*fiddle.debug*/ if( 1==i ){/*fiddle.debug*/
@@ -623,7 +685,6 @@ static void mk_fiddle(void){
** Emits makefile code for one build of the library. ** Emits makefile code for one build of the library.
*/ */
void mk_lib_mode(const char *zBuildName, const BuildDef * pB){ void mk_lib_mode(const char *zBuildName, const BuildDef * pB){
const char * zWasmOut = "$(basename $@).wasm"
/* The various targets named X.js or X.mjs also generate X.wasm, /* The various targets named X.js or X.mjs also generate X.wasm,
** and we need that part of the name to perform some ** and we need that part of the name to perform some
** post-processing after Emscripten generates X.wasm. */; ** post-processing after Emscripten generates X.wasm. */;
@@ -641,16 +702,21 @@ void mk_lib_mode(const char *zBuildName, const BuildDef * pB){
pB->zCmppD ? pB->zCmppD : "", zBaseName); pB->zCmppD ? pB->zCmppD : "", zBaseName);
pf("logtag.%s = [%s %s $@]:\n", zBuildName, pB->zEmo, zBuildName); pf("logtag.%s = [%s %s $@]:\n", zBuildName, pB->zEmo, zBuildName);
if( pB->zIfCond ){
pf("%s\n", pB->zIfCond );
}
pf("$(info $(logtag.%s) Setting up target b-%s)\n",
zBuildName, zBuildName );
pf("dir.dout.%s ?= $(dir.dout)/%s\n", zBuildName, zBuildName); pf("dir.dout.%s ?= $(dir.dout)/%s\n", zBuildName, zBuildName);
pf("out.%s.base = $(dir.dout.%s)/%s\n", pf("out.%s.base = $(dir.dout.%s)/%s\n",
zBuildName, zBuildName, zBaseName); zBuildName, zBuildName, zBaseName);
pf("out.%s.js = $(dir.dout.%s)/%s%s\n", pf("out.%s.js = $(dir.dout.%s)/%s%s\n",
zBuildName, zBuildName, zBaseName, zJsExt); zBuildName, zBuildName, zBaseName, zJsExt);
pf("out.%s.wasm = $(dir.dout.%s)/%s.wasm\n", pf("out.%s.wasm = $(dir.dout.%s)/%s.wasm\n",
//"$(basename $@).wasm"
zBuildName, zBuildName, zBaseName); zBuildName, zBuildName, zBaseName);
pf("$(info $(logtag.%s) Setting up build. " pf("c-pp.D.%s = %s\n", zBuildName, pB->zCmppD ? pB->zCmppD : "");
"Use the 'b-%s' target to build just this.)\n",
zBuildName, zBuildName );
pf("emcc.environment.%s = %s\n", zBuildName, pf("emcc.environment.%s = %s\n", zBuildName,
pB->zEnv ? pB->zEnv : oBuildDefs.vanilla.zEnv); pB->zEnv ? pB->zEnv : oBuildDefs.vanilla.zEnv);
pf("emcc.flags.%s = %s\n", zBuildName, pB->zEmcc ? pB->zEmcc : ""); pf("emcc.flags.%s = %s\n", zBuildName, pB->zEmcc ? pB->zEmcc : "");
@@ -664,7 +730,7 @@ void mk_lib_mode(const char *zBuildName, const BuildDef * pB){
pf("c-pp.D.%s = %s\n", zBuildName, pB->zCmppD ? pB->zCmppD: "" ); pf("c-pp.D.%s = %s\n", zBuildName, pB->zCmppD ? pB->zCmppD: "" );
pf("$(sqlite3-api.%s.c-pp.js): $(sqlite3-api.jses)\n" pf("$(sqlite3-api.%s.c-pp.js): $(sqlite3-api.jses)\n"
"\t@echo '$(logtag.%s) Making $@ ...'; \\\n" "\t@echo '$(logtag.%s) $(emo.disk)'; \\\n"
"\tmkdir -p $(dir.dout.%s); \\\n" "\tmkdir -p $(dir.dout.%s); \\\n"
"\tfor i in $(sqlite3-api.jses); do \\\n" "\tfor i in $(sqlite3-api.jses); do \\\n"
"\t\techo \"/* BEGIN FILE: $$i */\"; \\\n" "\t\techo \"/* BEGIN FILE: $$i */\"; \\\n"
@@ -673,14 +739,16 @@ void mk_lib_mode(const char *zBuildName, const BuildDef * pB){
"\tdone > $@\n", "\tdone > $@\n",
zBuildName, zBuildName, zBuildName); zBuildName, zBuildName, zBuildName);
pf("$(sqlite3-api.%s.js): $(sqlite3-api.%s.c-pp.js)\n", pf("$(sqlite3-api.%s.js): $(sqlite3-api.%s.c-pp.js)\n"
zBuildName, zBuildName); "$(eval $(call b.do.c-pp,"
pf("$(eval $(call SQLITE.CALL.C-PP.FILTER," "%s,"
"$(sqlite3-api.%s.c-pp.js), " /* $1 = src(es) */ "$(sqlite3-api.%s.c-pp.js),"
"$(sqlite3-api.%s.js), " /* $2 = tgt */ "$(sqlite3-api.%s.js),"
"$(c-pp.D.%s)" /* $3 = c-pp -Dx=Y flags */ "$(c-pp.D.%s)"
"))\n", "))\n",
zBuildName, zBuildName, zBuildName); zBuildName, zBuildName,
zBuildName, zBuildName,
zBuildName, zBuildName);
} }
mk_pre_post(zBuildName, pB); mk_pre_post(zBuildName, pB);
@@ -698,7 +766,7 @@ void mk_lib_mode(const char *zBuildName, const BuildDef * pB){
"\n", "\n",
zBuildName, zBuildName, zBuildName); zBuildName, zBuildName, zBuildName);
pf("\t@echo '$(logtag.%s) building ...'\n" pf("\t@echo '$(logtag.%s) $(emo.compile) building $@ ...'\n"
"\t@mkdir -p $(dir $@);\n", "\t@mkdir -p $(dir $@);\n",
zBuildName); zBuildName);
@@ -706,7 +774,7 @@ void mk_lib_mode(const char *zBuildName, const BuildDef * pB){
pf("\t@echo '$(logtag.%s) $(emo.fire)$(emo.fire)$(emo.fire): " pf("\t@echo '$(logtag.%s) $(emo.fire)$(emo.fire)$(emo.fire): "
"unsupported build. Use at your own risk.'\n", zBuildName); "unsupported build. Use at your own risk.'\n", zBuildName);
} }
pf("\t$(emcc.squelch)$(call emcc.do.build,%s)\n", zBuildName); pf("\t$(emcc.squelch)$(call b.do.emcc,%s)\n", zBuildName);
{ /* Post-compilation transformations and copying to { /* Post-compilation transformations and copying to
$(dir.dout)... */ $(dir.dout)... */
@@ -721,11 +789,12 @@ void mk_lib_mode(const char *zBuildName, const BuildDef * pB){
); );
} }
pf("\t@chmod -x %s\n", zWasmOut pf("\t@chmod -x $(out.%s.wasm)\n", zBuildName
/* althttpd will automatically try to execute wasm files /* althttpd will automatically try to execute wasm files
if they have the +x bit set. Why that bit is set if they have the +x bit set. Why that bit is set
at all is a mystery. */); at all is a mystery. */);
pf("\t@$(maybe-wasm-strip) %s\n", zWasmOut); pf("\t@$(call b.do.wasm-strip,%s)\n", zBuildName);
pf("\t@$(call SQLITE.CALL.WASM-OPT,%s,$(logtag.%s))\n", pf("\t@$(call SQLITE.CALL.WASM-OPT,%s,$(logtag.%s))\n",
zBuildName, zBuildName); zBuildName, zBuildName);
pf("\t@$(call SQLITE.strip-emcc-js-cruft,$(logtag.%s))\n", zBuildName); pf("\t@$(call SQLITE.strip-emcc-js-cruft,$(logtag.%s))\n", zBuildName);
@@ -737,9 +806,10 @@ void mk_lib_mode(const char *zBuildName, const BuildDef * pB){
); );
} }
if( CP_WASM & pB->flags ){ if( CP_WASM & pB->flags ){
pf("\t@cp -f %s $(dir.dout)/. || exit; \\\n" pf("\t@cp -f $(out.%s.wasm) $(dir.dout)/. || exit; \\\n"
"\techo '$(logtag.%s) $(emo.disk) $(dir.dout)/$(notdir %s)'\n", "\techo '[%s %s $(out.%s.wasm)] $(emo.disk) "
zWasmOut, zBuildName, zWasmOut); "$(dir.dout)/$(notdir $(out.%s.wasm))'\n",
zBuildName, pB->zEmo, zBuildName, zBuildName, zBuildName);
} }
/* /*
** $(bin.emcc) will write out $@ and will create a like-named ** $(bin.emcc) will write out $@ and will create a like-named
@@ -754,7 +824,7 @@ void mk_lib_mode(const char *zBuildName, const BuildDef * pB){
if( pB->zDotWasm && (CP_JS & pB->flags) ){ if( pB->zDotWasm && (CP_JS & pB->flags) ){
pf("\t@echo '$(logtag.%s) $(emo.disk) " pf("\t@echo '$(logtag.%s) $(emo.disk) "
"s/\"%s.wasm\"/\"%s.wasm\"/g " "s/\"%s.wasm\"/\"%s.wasm\"/g "
"$(dir.dout)/$(notdir $@)'; \\\n" "in $(dir.dout)/$(notdir $@)'; \\\n"
"sed " "sed "
"-e 's/\"%s.wasm\"/\"%s.wasm\"/g' " "-e 's/\"%s.wasm\"/\"%s.wasm\"/g' "
"-e \"s/'%s.wasm'/'%s.wasm'/g\" " "-e \"s/'%s.wasm'/'%s.wasm'/g\" "
@@ -779,15 +849,34 @@ void mk_lib_mode(const char *zBuildName, const BuildDef * pB){
pf("\t@echo '$(logtag.%s) $(emo.done)'\n", zBuildName); pf("\t@echo '$(logtag.%s) $(emo.done)'\n", zBuildName);
pf("\n%dbit: $(out.%s.js)\n" pf("\n%dbit: $(out.%s.js)\n"
"b-%s: $(out.%s.js)\n", "$(out.%s.wasm): $(out.%s.js)\n"
(F_64BIT & pB->flags) ? 64 : 32, "b-%s: $(out.%s.js) $(out.%s.wasm)\n",
(F_64BIT & pB->flags) ? 64 : 32, zBuildName,
zBuildName, zBuildName,
zBuildName, zBuildName, zBuildName); zBuildName, zBuildName, zBuildName);
if( CP_JS & pB->flags ){
pf("$(dir.dout)/%s%s: $(out.%s.js)\n",
pB->zBaseName, zJsExt, zBuildName
);
}
if( CP_WASM & pB->flags ){
pf("$(dir.dout)/%s.wasm: $(out.%s.wasm)\n",
pB->zBaseName, zBuildName
);
}
if( 0==(F_NOT_IN_ALL & pB->flags) if( 0==(F_NOT_IN_ALL & pB->flags)
&& 0==(F_UNSUPPORTED & pB->flags) ){ && 0==(F_UNSUPPORTED & pB->flags) ){
pf("all: $(out.%s.js)\n", zBuildName); pf("all: $(out.%s.js)\n", zBuildName);
} }
if( pB->zIfCond ){
pf("else\n"
"$(info $(logtag.%s) $(emo.stop) disabled by condition: %s)\n"
"endif\n",
zBuildName, pB->zIfCond);
}
pf("# End build [%s]%s", zBuildName, zBanner); pf("# End build [%s]%s", zBuildName, zBanner);
} }
@@ -799,6 +888,18 @@ int main(void){
#define E(N) mk_lib_mode(# N, &oBuildDefs.N); #define E(N) mk_lib_mode(# N, &oBuildDefs.N);
BuildDefs_map(E) BuildDefs_map(E)
#undef E #undef E
pf(zBanner
"$(dir.dout)/sqlite3.js: $(out.vanilla.js)\n"
"$(dir.dout)/sqlite3.mjs: $(out.esm.js)\n"
"$(dir.dout)/sqlite3.wasm: $(out.vanilla.wasm)\n"
"$(dir.dout)/sqlite3-64bit.js: $(out.vanilla64.js)\n"
"$(dir.dout)/sqlite3-64bit.mjs: $(out.esm64.js)\n"
"$(dir.dout)/sqlite3-64bit.wasm: $(out.vanilla64.wasm)\n"
"b-vanilla: $(dir.dout)/sqlite3.wasm\n"
"b-vanilla64: $(dir.dout)/sqlite3-64bit.wasm\n"
"b-esm: $(dir.dout)/sqlite3.mjs\n"
"b-esm64: $(dir.dout)/sqlite3-64bit.mjs\n"
);
#if 0 #if 0
mk_fiddle(); mk_fiddle();
mk_pre_post(0, "speedtest1","vanilla", 0, "speedtest1.wasm"); mk_pre_post(0, "speedtest1","vanilla", 0, "speedtest1.wasm");

View File

@@ -1,5 +1,5 @@
C Cosmetic\swasm\sbuild\stweaks.\sFixed\swasm-opt\suse,\sbroken\sby\sthis\sbranch's\srefactoring. C Get\smost\sof\sthe\swasm\sbuild\s(re)working\sand\smuch\sprettier.
D 2025-09-23T10:46:17.318 D 2025-09-23T13:49:44.420
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -578,7 +578,7 @@ F ext/session/sqlite3session.c 9cd47bfefb23c114b7a5d9ee5822d941398902f30516bf0dd
F ext/session/sqlite3session.h 7404723606074fcb2afdc6b72c206072cdb2b7d8ba097ca1559174a80bc26f7a F ext/session/sqlite3session.h 7404723606074fcb2afdc6b72c206072cdb2b7d8ba097ca1559174a80bc26f7a
F ext/session/test_session.c 8766b5973a6323934cb51248f621c3dc87ad2a98f023c3cc280d79e7d78d36fb F ext/session/test_session.c 8766b5973a6323934cb51248f621c3dc87ad2a98f023c3cc280d79e7d78d36fb
F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c
F ext/wasm/GNUmakefile 1732bc9928eecf48047d8cbc9361145de993aa70b3770a387a55271c67001edb F ext/wasm/GNUmakefile 7bd5b216a66af20f18515bb3668330e3834bf2dd562c26c40775bd0d95610680
F ext/wasm/README-dist.txt f01081a850ce38a56706af6b481e3a7878e24e42b314cfcd4b129f0f8427066a F ext/wasm/README-dist.txt f01081a850ce38a56706af6b481e3a7878e24e42b314cfcd4b129f0f8427066a
F ext/wasm/README.md 66ace67ae98a45e4116f2ca5425b716887bcee4d64febee804ff6398e1ae9ec7 F ext/wasm/README.md 66ace67ae98a45e4116f2ca5425b716887bcee4d64febee804ff6398e1ae9ec7
F ext/wasm/SQLTester/GNUmakefile e0794f676d55819951bbfae45cc5e8d7818dc460492dc317ce7f0d2eca15caff F ext/wasm/SQLTester/GNUmakefile e0794f676d55819951bbfae45cc5e8d7818dc460492dc317ce7f0d2eca15caff
@@ -639,7 +639,7 @@ F ext/wasm/index-dist.html 56132399702b15d70c474c3f1952541e25cb0922942868f70daf1
F ext/wasm/index.html bcaa00eca521b372a6a62c7e7b17a870b0fcdf3e418a5921df1fd61e5344080d F ext/wasm/index.html bcaa00eca521b372a6a62c7e7b17a870b0fcdf3e418a5921df1fd61e5344080d
F ext/wasm/jaccwabyt/jaccwabyt.js bbac67bc7a79dca34afe6215fd16b27768d84e22273507206f888c117e2ede7d F ext/wasm/jaccwabyt/jaccwabyt.js bbac67bc7a79dca34afe6215fd16b27768d84e22273507206f888c117e2ede7d
F ext/wasm/jaccwabyt/jaccwabyt.md 167fc0b624c9bc2c477846e336de9403842d81b1a24fc4d3b24317cb9eba734f F ext/wasm/jaccwabyt/jaccwabyt.md 167fc0b624c9bc2c477846e336de9403842d81b1a24fc4d3b24317cb9eba734f
F ext/wasm/mkwasmbuilds.c 1eb6ab3370a388b17ee4d88bee61d2a25fea400cd2b3638fff75a02fed6208a1 F ext/wasm/mkwasmbuilds.c d90795491b85a79d63d6087a6725fc99623eb5ac56510998001b7687ec1c110c
F ext/wasm/module-symbols.html dc476b403369b26a1a23773e13b80f41b9a49f0825e81435fe3600a7cfbbe337 F ext/wasm/module-symbols.html dc476b403369b26a1a23773e13b80f41b9a49f0825e81435fe3600a7cfbbe337
F ext/wasm/scratchpad-wasmfs.html a3d7388f3c4b263676b58b526846e9d02dfcb4014ff29d3a5040935286af5b96 F ext/wasm/scratchpad-wasmfs.html a3d7388f3c4b263676b58b526846e9d02dfcb4014ff29d3a5040935286af5b96
F ext/wasm/scratchpad-wasmfs.mjs 66034b9256b218de59248aad796760a1584c1dd842231505895eff00dbd57c63 F ext/wasm/scratchpad-wasmfs.mjs 66034b9256b218de59248aad796760a1584c1dd842231505895eff00dbd57c63
@@ -2175,8 +2175,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
P 913af3dd6a8da577ef19b0d82c8afec0c626d7fa5fddbdf418d2eb16c3050ab1 P 4d7eff2afbcf023291bc1133c4413d1ea44f4096bb515e4bcd40bc8fc8d2a591
R 485ed5081b5443d0e12ca88c1d18d423 R e8886245b28a331e670aa538541aa363
U stephan U stephan
Z 1d0c8daab3af2d36aff745c502e348b6 Z 82e89b29e3b7887e8b71ff36239b271d
# Remove this line to create a well-formed Fossil manifest. # Remove this line to create a well-formed Fossil manifest.

View File

@@ -1 +1 @@
4d7eff2afbcf023291bc1133c4413d1ea44f4096bb515e4bcd40bc8fc8d2a591 a5a7890c75003a637a227b700dc342f4f4a24bd368b216bdb168b4ddfbe8f015