distclean: clean
-rm -f $(DISTCLEAN_FILES)
+more: all
+include util.make
########################################################################
# Special-case builds for which we require certain pre-conditions
dir.tmp = $(dir.wasm)/bld
dir.wasmfs = $(dir.dout)
-MKDIR.bld = $(dir.tmp)
-$(MKDIR.bld):
- @mkdir -p $@ $(dir.dout)
-
CLEAN_FILES += *~ $(dir.jacc)/*~ $(dir.api)/*~ $(dir.common)/*~ $(dir.fiddle)/*~ \
########################################################################
# JS/WASM build. They are solely for use with $(bin.c-pp) itself.
#
# -D... flags which should be included in all invocations should be
-# appended to $(SQLITE.CALL.C-PP.FILTER.global).
+# appended to $(b.eval.c-pp.flags).
bin.c-pp = ./c-pp
$(bin.c-pp): c-pp.c $(sqlite3.c) # $(MAKEFILE)
$(CC) -O0 -o $@ c-pp.c $(sqlite3.c) '-DCMPP_DEFAULT_DELIM="//#"' -I$(dir.top) \
-DSQLITE_OMIT_SHARED_CACHE -DSQLITE_OMIT_WAL -DSQLITE_THREADSAFE=0 \
-DSQLITE_TEMP_STORE=3
DISTCLEAN_FILES += $(bin.c-pp)
-SQLITE.CALL.C-PP.FILTER.global ?=
+b.eval.c-pp.flags ?=
ifeq (1,$(SQLITE_C_IS_SEE))
- SQLITE.CALL.C-PP.FILTER.global += -Denable-see
+ b.eval.c-pp.flags += -Denable-see
endif
define SQLITE.CALL.C-PP.FILTER
# Create $2 from $1 using $(bin.c-pp)
# $2 = Output file: c-pp -o $(2).js
# $3 = optional c-pp -D... flags
$(2): $(1) $$(MAKEFILE_LIST) $$(bin.c-pp)
- @mkdir -p $$(dir $$@)
- cat $(1) | $$(bin.c-pp) -o $$@ $(3) $(SQLITE.CALL.C-PP.FILTER.global)
+ @$$(call b.call.mkdir@)
+ cat $(1) | $$(bin.c-pp) -o $$@ $(3) $(b.eval.c-pp.flags)
CLEAN_FILES += $(2)
endef
# /end SQLITE.CALL.C-PP.FILTER
emcc.WASM_BIGINT = 1
# -sMEMORY64=1+ assumes -sWASM_BIGINT=1, so we'll make it explicit
- # SQLITE.CALL.C-PP.FILTER.global += -D64bit
+ # b.eval.c-pp.flags += -D64bit
# ^^ We no longer need build-time code filtering for 64-bit but if
# we ever do again, just uncomment that line or, if it's just needed
# in specific builds, update that build's -D flags in
emcc_opt ?= -Oz
endif
-# Our JS code installs bindings of each sqlite3_...() WASM export. The
-# generated Emscripten JS file does the same using its own framework,
-# but we don't use those results and can speed up lib init, and reduce
-# memory cost a bit, by stripping them out. Emscripten-side changes
-# can "break" this, causing this to be a no-op, but the worst that can
-# happen in that case is that it doesn't actually strip anything,
-# leading to slightly larger JS files.
-#
-# This snippet is intended to be used in makefile targets which
-# generate an Emscripten module and where $@ is the module's .js/.mjs
-# file.
-#
-# $1 = an optional log message prefix
-SQLITE.strip-emcc-js-cruft = \
- sed -i -e '/^.*= \(_sqlite3\|_fiddle\)[^=]*=.*createExportWrapper/d' \
- -e '/^var \(_sqlite3\|_fiddle\)[^=]*=.*makeInvalidEarlyAccess/d' $@ || exit; \
- echo '$(1) $(emo.garbage) (Probably) /createExportWrapper()/d and /makeInvalidEarlyAccess()/d'
+# old name - to remove
+SQLITE.strip-emcc-js-cruft = $(b.call.strip-emcc-js-cruft)
# When passing emcc_opt from the CLI, += and re-assignment have no
# effect, so emcc_opt+=-g3 doesn't work. So...
EXPORTED_FUNCTIONS.api.in += $(dir.api)/EXPORTED_FUNCTIONS.sqlite3-extras
endif
EXPORTED_FUNCTIONS.api = $(dir.tmp)/EXPORTED_FUNCTIONS.api
-$(EXPORTED_FUNCTIONS.api): $(MKDIR.bld) $(EXPORTED_FUNCTIONS.api.in) $(sqlite3.c) $(MAKEFILE)
+$(EXPORTED_FUNCTIONS.api): $(EXPORTED_FUNCTIONS.api.in) $(sqlite3.c) $(MAKEFILE)
+ @$(call b.call.mkdir@)
cat $(EXPORTED_FUNCTIONS.api.in) > $@
########################################################################
# SOAP.js is an external API file which is part of our distribution
# but not part of the sqlite3-api.js amalgamation. It's a component of
# the first OPFS VFS and necessarily an external file.
-SOAP.js = $(dir.api)/sqlite3-opfs-async-proxy.js
-SOAP.js.out = $(dir.dout)/sqlite3-opfs-async-proxy.js
+SOAP.js.in = $(dir.api)/sqlite3-opfs-async-proxy.js
+SOAP.js = $(dir.dout)/sqlite3-opfs-async-proxy.js
+$(SOAP.js): $(SOAP.js.in)
+ @$(call b.call.cp,@,$<,$@)
#
-# $(sqlite3-api.ext.jses) = API-related files which are standalone files,
-# not part of the amalgamation.
+# $(sqlite3-api.ext.jses) = API-related files which are standalone
+# files, not part of the amalgamation.
#
-sqlite3-api.ext.jses = $(SOAP.js.out)
-$(SOAP.js.out): $(SOAP.js)
- cp $< $@
+sqlite3-api.ext.jses = $(SOAP.js)
########################################################################
# emcc flags for .c/.o/.wasm/.js.
# /wasmfs
########################################################################
-
-# This block MUST come between the above definitions of
-# sqlite3-...js/mjs and the $(eval) calls below this block which use
-# SQLITE.CALL.C-PP.FILTER.
-########################################################################
-# bin.mkwb is used for generating much of the makefile code for the
-# various wasm builds. It used to be generated in this makefile via a
-# difficult-to-read/maintain block of $(eval)'d code. Attempts were
-# made to generate it from tcl and bash (shell) but having to escape
-# the $ references in those languages made it just as illegible as the
-# native makefile code. Somewhat surprisingly, moving that code generation
-# to C makes it slightly less illegible than the previous 3 options.
-#
-# Maintenance note: the various $(c-pp.D.XYZ) vars are defined via
-# $(bin.mkwb).
-bin.mkwb = ./mkwasmbuilds
-ifneq (1,$(MAKING_CLEAN))
-$(bin.mkwb): $(bin.mkwb).c $(MAKEFILE)
- $(CC) -g -std=c99 -o $@ $< -DWASM_CUSTOM_INSTANTIATE=$(WASM_CUSTOM_INSTANTIATE)
-
-.wasmbuilds.make: $(bin.mkwb)
- @rm -f $@
- $(bin.mkwb) > $@
- @chmod -w $@
--include .wasmbuilds.make
-endif
-CLEAN_FILES += .wasmbuilds.make $(bin.mkwb)
-
########################################################################
# We need separate copies of certain supplementary JS files for the
# bundler-friendly build. Concretely, any supplemental JS files which
# code analyzers and cannot cope with the former.
#
# Most of what follows is the generation of those copies.
-
-$(eval $(call SQLITE.CALL.C-PP.FILTER,$(dir.api)/sqlite3-worker1.c-pp.js,\
+$(eval $(call b.eval.c-pp,@,$(dir.api)/sqlite3-worker1.c-pp.js,\
$(dir.dout)/sqlite3-worker1.js))
sqlite3-api.ext.jses += $(dir.dout)/sqlite3-worker1.js
-$(eval $(call SQLITE.CALL.C-PP.FILTER,$(dir.api)/sqlite3-worker1-promiser.c-pp.js,\
+$(eval $(call b.eval.c-pp,@,$(dir.api)/sqlite3-worker1-promiser.c-pp.js,\
$(dir.dout)/sqlite3-worker1-promiser.mjs,\
-Dtarget=es6-module -Dtarget=es6-bundler-friendly))
sqlite3-api.ext.jses += $(dir.dout)/sqlite3-worker1-promiser.mjs
-$(eval $(call SQLITE.CALL.C-PP.FILTER,$(dir.api)/sqlite3-worker1-promiser.c-pp.js,\
+$(eval $(call b.eval.c-pp,@,$(dir.api)/sqlite3-worker1-promiser.c-pp.js,\
$(dir.dout)/sqlite3-worker1-promiser.js))
sqlite3-api.ext.jses += $(dir.dout)/sqlite3-worker1-promiser.js
-$(eval $(call SQLITE.CALL.C-PP.FILTER,demo-worker1-promiser.c-pp.js,demo-worker1-promiser.js))
-$(eval $(call SQLITE.CALL.C-PP.FILTER,demo-worker1-promiser.c-pp.js,demo-worker1-promiser.mjs,\
+$(eval $(call b.eval.c-pp,@,demo-worker1-promiser.c-pp.js,demo-worker1-promiser.js))
+$(eval $(call b.eval.c-pp,@,demo-worker1-promiser.c-pp.js,demo-worker1-promiser.mjs,\
-Dtarget=es6-module))
-$(eval $(call SQLITE.CALL.C-PP.FILTER,demo-worker1-promiser.c-pp.html,demo-worker1-promiser.html))
-$(eval $(call SQLITE.CALL.C-PP.FILTER,demo-worker1-promiser.c-pp.html,demo-worker1-promiser-esm.html,\
+$(eval $(call b.eval.c-pp,@,demo-worker1-promiser.c-pp.html,demo-worker1-promiser.html))
+$(eval $(call b.eval.c-pp,@,demo-worker1-promiser.c-pp.html,demo-worker1-promiser-esm.html,\
-Dtarget=es6-module))
demo-worker1-promiser.html: $(dir.dout)/sqlite3-worker1-promiser.js demo-worker1-promiser.js
demo-worker1-promiser-esm.html: $(sqlite3-worker1-promiser.mjs) demo-worker1-promiser.mjs
all: demo-worker1-promiser.html demo-worker1-promiser-esm.html
ifeq (0,1)
-$(eval $(call SQLITE.CALL.C-PP.FILTER,$(dir.api)/sqlite3-worker1.c-pp.js,\
+$(eval $(call b.eval.c-pp,@,$(dir.api)/sqlite3-worker1.c-pp.js,\
$(dir.dout)/sqlite3-worker1-bundler-friendly.mjs,\
$(c-pp.D.sqlite3-bundler-friendly)))
sqlite3-api.ext.jses += $(dir.dout)/sqlite3-worker1-bundler-friendly.mjs
-$(eval $(call SQLITE.CALL.C-PP.FILTER,$(dir.api)/sqlite3-worker1-promiser.c-pp.js,\
+$(eval $(call b.eval.c-pp,@,$(dir.api)/sqlite3-worker1-promiser.c-pp.js,\
$(dir.dout)/sqlite3-worker1-promiser-bundler-friendly.js,\
$(c-pp.D.sqlite3-bundler-friendly)))
sqlite3-api.ext.jses += $(dir.dout)/sqlite3-promiser-bundler-friendly.js
endif
+########################################################################
+# bin.mkwb is used for generating much of the makefile code for the
+# various wasm builds. It used to be generated in this makefile via a
+# difficult-to-read/maintain block of $(eval)'d code. Attempts were
+# made to generate it from tcl and bash (shell) but having to escape
+# the $ references in those languages made it just as illegible as the
+# native makefile code. Somewhat surprisingly, moving that code generation
+# to C makes it slightly less illegible than the previous 3 options.
+#
+# Maintenance note: the various $(c-pp.D.XYZ) vars are defined via
+# $(bin.mkwb).
+bin.mkwb = ./mkwasmbuilds
+ifneq (1,$(MAKING_CLEAN))
+$(bin.mkwb): $(bin.mkwb).c $(MAKEFILE)
+ $(CC) -g -std=c99 -o $@ $< -DWASM_CUSTOM_INSTANTIATE=$(WASM_CUSTOM_INSTANTIATE)
+
+.wasmbuilds.make: $(bin.mkwb)
+ @rm -f $@
+ $(bin.mkwb) > $@
+ @chmod -w $@
+-include .wasmbuilds.make
+endif
+CLEAN_FILES += .wasmbuilds.make $(bin.mkwb)
+
+#$(error sqlite3-api.ext.jses=$(sqlite3-api.ext.jses))
all quick: $(sqlite3-api.ext.jses)
q: quick
64bit: # populated by $(bin.mkwb)
# -sEXIT_RUNTIME=1 but we need EXIT_RUNTIME=0 for the worker-based app
# which runs speedtest1 multiple times.
-$(EXPORTED_FUNCTIONS.speedtest1): $(MKDIR.bld) $(EXPORTED_FUNCTIONS.api.core)
+$(EXPORTED_FUNCTIONS.speedtest1): $(EXPORTED_FUNCTIONS.api.core)
@echo "$(emo.compile) Making $@ ..."
+ @$(call b.call.mkdir@)
@{ echo _wasm_main; cat $(EXPORTED_FUNCTIONS.api.core); } > $@
speedtest1.js = $(dir.dout)/speedtest1.js
emcc.flags.speedtest1-vanilla = $(cflags.common) -DSQLITE_SPEEDTEST1_WASM
# tester1.mjs: cases 3 and 4
#
# To create those, we filter tester1.c-pp.js with $(bin.c-pp)...
-$(eval $(call SQLITE.CALL.C-PP.FILTER,tester1.c-pp.js,tester1.js,$(c-pp.D.vanilla)))
-$(eval $(call SQLITE.CALL.C-PP.FILTER,tester1.c-pp.js,tester1.mjs,$(c-pp.D.esm)))
-$(eval $(call SQLITE.CALL.C-PP.FILTER,tester1.c-pp.html,tester1.html,$(c-pp.D.vanilla)))
-$(eval $(call SQLITE.CALL.C-PP.FILTER,tester1.c-pp.html,tester1-esm.html,$(c-pp.D.esm)))
+$(eval $(call b.eval.c-pp,@,tester1.c-pp.js,tester1.js,$(c-pp.D.vanilla)))
+$(eval $(call b.eval.c-pp,@,tester1.c-pp.js,tester1.mjs,$(c-pp.D.esm)))
+$(eval $(call b.eval.c-pp,@,tester1.c-pp.html,tester1.html,$(c-pp.D.vanilla)))
+$(eval $(call b.eval.c-pp,@,tester1.c-pp.html,tester1-esm.html,$(c-pp.D.esm)))
tester1: tester1.js tester1.mjs tester1.html tester1-esm.html
# We do not include $(dir.dout)/sqlite3-bundler-friendly.mjs in this
# because bundlers are client-specific. We don't use any of them.
$(dir.api)/EXPORTED_FUNCTIONS.sqlite3-core \
$(dir.api)/EXPORTED_FUNCTIONS.sqlite3-extras
-$(EXPORTED_FUNCTIONS.fiddle): $(MKDIR.bld) $(fiddle.EXPORTED_FUNCTIONS.in) \
+$(EXPORTED_FUNCTIONS.fiddle): $(fiddle.EXPORTED_FUNCTIONS.in) \
$(MAKEFILE.fiddle)
- sort -u $(fiddle.EXPORTED_FUNCTIONS.in) > $@
+ @$(b.call.mkdir@)
+ @sort -u $(fiddle.EXPORTED_FUNCTIONS.in) > $@
+ @echo $(logtag.@) $(emo.disk)
fiddle.cses = $(dir.top)/shell.c $(sqlite3-wasm.c)
}
ps(zBanner
- "more: all\n"
- "emoji ?= 1\n"
- "ifneq (0,$(emoji))\n"
- "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"
- "emo.folder = 📁\n"
- "endif\n"
);
- ps("logtag.@ = [$@]:");
- ps("b.do.strip-js-cruft = $(SQLITE.strip-emcc-js-cruft)");
ps("b.echo = echo '$(logtag.$(1))' '$(2)'");
+#if 0
ps(zBanner
/** $1 = build name. */
- "b.do.mkdir@ = "
+ "b.call.mkdir@ = "
"if [ ! -d $(dir $@) ]; then"
" echo '[$(emo.folder)+] $(if $(1),$(logtag.$(1)),[$(dir $@)])';"
" mkdir -p $(dir $@) || exit $$?;"
"fi"
);
-
- 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@$$(call b.do.mkdir@); \\\n"
- "\techo '$$(logtag.$(1)) $$(emo.disk) $(4)'; \\\n"
- "\tcat $(2) | $$(bin.c-pp) -o $(3) $(4) $$(SQLITE.CALL.C-PP.FILTER.global) || exit $$$$?\n"
- "\nCLEAN_FILES += $(2)\n"
- "endef\n"
- );
+#endif
ps(zBanner
/** $1 = build name */
- "b.do.wasm-strip = "
+ "b.call.wasm-strip = "
"echo '$(logtag.$(1)) $(emo.strip) wasm-strip $(out.$(1).wasm)'; "
"$(bin.wasm-strip) $(out.$(1).wasm)\n"
);
- ps(zBanner
- /** $1 = build name, $2 = src file(s). $3 = dest dir */
- "b.do.cp = "
- "echo '$(logtag.$(1)) $(emo.disk) $(2) ==> $3'; "
- "cp -p $(2) $(3) || exit $$$$?\n"
- );
-
ps(zBanner
"# Inputs/outputs for the sqlite3-api.js family.\n"
"#\n"
"sqlite3-license-version.js = $(dir.tmp)/sqlite3-license-version.js\n"
"sqlite3-api-build-version.js = $(dir.tmp)/sqlite3-api-build-version.js\n"
"# sqlite3-api.jses = the list of JS files which make up\n"
- "# $(sqlite3-api.js.in), in the order they need to be assembled.\n"
- "sqlite3-api.js.in = $(dir.tmp)/sqlite3-api.c-pp.js\n"
+ "# sqlite3-api.js, in the order they need to be assembled.\n"
"sqlite3-api.jses = $(sqlite3-license-version.js)\n"
"sqlite3-api.jses += $(dir.api)/sqlite3-api-prologue.js\n"
"sqlite3-api.jses += $(dir.common)/whwasmutil.js\n"
"#\n"
"# Maintenance reminder: there are awk binaries out there which do not\n"
"# support -e SCRIPT.\n"
- "$(sqlite3-license-version.js): $(MKDIR.bld) $(sqlite3.h) "
+ "$(sqlite3-license-version.js): $(sqlite3.h) "
"$(dir.api)/sqlite3-license-version-header.js $(MAKEFILE)\n"
"\t@echo '$(logtag.@) $(emo.disk)'; { \\\n"
"\t\tcat $(dir.api)/sqlite3-license-version-header.js || exit $$?; \\\n"
"\t} > $@"
);
+#if 0
ps(zBanner
"$(sqlite3-api.js.in): $(MKDIR.bld) $(sqlite3-api.jses) $(MAKEFILE)\n"
"\t@echo 'Making $@ ...'\n"
"echo \"/* END FILE: $$i */\"; \\\n"
"\tdone > $@\n"
);
+#endif
ps(zBanner
"# extern-post-js* and extern-pre-js* are files for use with\n"
"$(extern-pre-js.js) $(sqlite3-license-version.js)"
);
- ps(zBanner
- "loud ?= 0\n"
- "ifeq (1,$(loud))\n"
- "$(info $(emo.megaphone) Emitting loud build info."
- " Pass loud=0 to disable it.)\n"
- "cmd.loud =\n"
- "else\n"
- "$(info $(emo.mute) Eliding loud build info."
- " Pass emcc.loud=1 to enable it.)\n"
- "cmd.loud = @\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"
"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)"
+ " $(sqlite3-api.jses)"
" $(dir.api)/post-js-footer.js\n"
"$(post-js.in.js): $(MKDIR.bld) $(post-jses.js) $(MAKEFILE)\n"
" @echo '$(logtag.@) $(emo.disk)'\n"
" echo \"/* END FILE: $$i */\"; \\n"
" done > $@\n"
);
+
pf(zBanner
"define b.do.emcc\n"
/* $1 = build name */
" $(sqlite3-api.%s.js)"
" $(dir.api)/post-js-footer.js\n",
zBuildName, zBuildName);
- pf("$(eval $(call b.do.c-pp,"
+ pf("$(eval $(call b.eval.c-pp,"
"%s,"
"$(post-js.%s.in),"
"$(post-js.%s.js),"
ps("\n# --extern-post-js=...");
pf("extern-post-js.%s.js = $(dir.tmp)/extern-post-js.%s.js\n",
zBuildName, zBuildName);
- pf("$(eval $(call b.do.c-pp,"
+ pf("$(eval $(call b.eval.c-pp,"
"%s,"
"$(extern-post-js.in.js),"
"$(extern-post-js.%s.js),"
return pB->zBaseName ? pB->zBaseName : oBuildDefs.vanilla.zBaseName;
}
-static void emit_target_start(char const *zBuildName){
- pf("\t@$(call b.do.mkdir@);"
+static void emit_compile_start(char const *zBuildName){
+ pf("\t@$(call b.call.mkdir@);"
" $(call b.echo,%s,$(emo.compile) building ...)\n",
zBuildName);
}
"sqlite3-api.%s.js = $(dir.tmp)/sqlite3-api.%s.js\n",
zBuildName, zCmppD ? zCmppD: "",
zBuildName, zBuildName);
- pf("$(eval $(call b.do.c-pp,"
+ pf("$(eval $(call b.eval.c-pp,"
"%s,"
- "$(sqlite3-api.js.in),"
+ "$(sqlite3-api.jses),"
"$(sqlite3-api.%s.js),"
"$(c-pp.D.%s) %s"
"))\n",
/*
** Emits makefile code for one build of the library.
*/
-void mk_lib_mode(const char *zBuildName, const BuildDef * pB){
- /* The various targets named X.js or X.mjs also generate X.wasm,
- ** and we need that part of the name to perform some
- ** post-processing after Emscripten generates X.wasm. */;
+static void mk_lib_mode(const char *zBuildName, const BuildDef * pB){
const char * zJsExt = BuildDef_jsext(pB);
char const * const zBaseName = BuildDef_basename(pB);
{ /* build it... */
pf(zBanner
- "# Build $(out.%s.js)\n"
- "$(out.%s.js): $(MAKEFILE_LIST) $(sqlite3-wasm.cfiles) $(EXPORTED_FUNCTIONS.api)"
- " $(bin.mkwb) $(pre-post.%s.deps) $(sqlite3-api.ext.jses)"
+ "$(out.%s.js): $(MAKEFILE_LIST) $(sqlite3-wasm.cfiles)"
+ " $(EXPORTED_FUNCTIONS.api)"
+ " $(bin.mkwb) $(pre-post.%s.deps) "
+ " $(sqlite3-api.ext.jses)"
/* maintenance reminder: we set these ^^^^ as deps so that they
** get copied into place early. That allows the developer to
** reload the base-most test pages while the later-stage builds
** are still compiling, which is especially helpful when
** running builds with long build times (like -Oz). */
"\n",
- zBuildName, zBuildName, zBuildName);
+ zBuildName, zBuildName);
- emit_target_start(zBuildName);
+ emit_compile_start(zBuildName);
if( F_UNSUPPORTED & pB->flags ){
pf("\t@echo '$(logtag.%s) $(emo.fire)$(emo.fire)$(emo.fire): "
"unsupported build. Use at your own risk.'\n", zBuildName);
}
- pf("\t$(cmd.loud)$(call b.do.emcc,%s)\n", zBuildName);
+ pf("\t$(b.cmd.loud)$(call b.do.emcc,%s)\n", zBuildName);
{ /* Post-compilation transformations and copying to
$(dir.dout)... */
/* althttpd will automatically try to execute wasm files
if they have the +x bit set. Why that bit is set
at all is a mystery. */);
- pf("\t@$(call b.do.wasm-strip,%s)\n", zBuildName);
+ pf("\t@$(call b.call.wasm-strip,%s)\n", zBuildName);
pf("\t@$(call b.do.wasm-opt,%s)\n", zBuildName);
- pf("\t@$(call b.do.strip-js-cruft,$(logtag.%s))\n", zBuildName);
+ pf("\t@$(call b.call.strip-js-cruft,$(logtag.%s))\n", zBuildName);
if( CP_JS & pB->flags && !(pB->zDotWasm/*handled below*/) ){
- pf("\t@$(call b.do.cp,%s,$@,$(dir.dout)/.)\n",
+ pf("\t@$(call b.call.cp,%s,$@,$(dir.dout)/.)\n",
zBuildName
);
}
if( CP_WASM & pB->flags ){
- pf("\t@$(call b.do.cp,%s,$(out.%s.wasm),$(dir.dout)/.)\n",
+ pf("\t@$(call b.call.cp,%s,$(out.%s.wasm),$(dir.dout)/.)\n",
zBuildName, zBuildName
//"\techo '[%s $(out.%s.wasm)] $(emo.disk) $(dir.dout)/$(notdir $(out.%s.wasm))'
//pB->zEmo, zBuildName
}
+static void emit_gz(char const *zBuildName,
+ char const *zOutDotSExt){
+ pf("\n$(out.%s.%s).gz: $(out.%s.%s)\n"
+ "\t@$(call b.echo,%s,$(emo.disk))\n"
+ "\t@gzip < $< > $@\n",
+ zBuildName, zOutDotSExt,
+ zBuildName, zOutDotSExt,
+ zBuildName);
+}
+
/*
** Emits rules for the fiddle builds.
*/
"$(pre-post.%s.deps) "
"$(SOAP.js)\n",
zBuildName, zBuildName);
- emit_target_start(zBuildName);
- pf("\t$(cmd.loud)$(bin.emcc) -o $@"
+ emit_compile_start(zBuildName);
+ pf("\t$(b.cmd.loud)$(bin.emcc) -o $@"
" $(emcc.flags.%s)" /* set in fiddle.make */
" $(pre-post.%s.flags)"
" $(fiddle.cses)"
"\n",
zBuildName, zBuildName);
pf("\t@chmod -x $(out.%s.wasm)\n", zBuildName);
- pf("\t@$(call b.do.wasm-strip,%s)\n", zBuildName);
- pf("\t@$(call b.do.strip-js-cruft,$(logtag.%s))\n", zBuildName);
- pf("\t@$(call b.do.cp,%s,$(SOAP.js),$(dir $@))\n", zBuildName);
+ pf("\t@$(call b.call.wasm-strip,%s)\n", zBuildName);
+ pf("\t@$(call b.call.strip-js-cruft,$(logtag.%s))\n", zBuildName);
+ pf("\t@$(call b.call.cp,%s,$(SOAP.js),$(dir $@))\n", zBuildName);
if( isDebug ){
- pf("\t@$(call b.do.cp,%s,"
+ pf("\t@$(call b.call.cp,%s,"
"$(dir.fiddle)/index.html "
"$(dir.fiddle)/fiddle.js "
"$(dir.fiddle)/fiddle-worker.js,"
avoid that hand-edited files, like fiddle-worker.js, do not end
up with stale .gz files (which althttpd will then serve instead
of the up-to-date uncompressed one). */
- pf("\n$(out.%s.js).gz: $(out.%s.js)\n"
- "\tgzip < $< > $@\n", zBuildName, zBuildName);
- pf("\n$(out.%s.wasm).gz: $(out.%s.wasm)\n"
- "\tgzip < $< > $@\n", zBuildName, zBuildName);
+ emit_gz(zBuildName, "js");
+ emit_gz(zBuildName, "wasm");
pf("\n%s: $(out.%s.js).gz $(out.%s.wasm).gz\n"
"b-%s: %s\n",
zBuildName, zBuildName);
if( isDebug ){
ps("fiddle-debug: fiddle.debug");
+ }else{
+ ps("all: b-fiddle");
}
pf("# End %s" zBanner, zBuildName);
}
--- /dev/null
+#
+# Common vars and utilities for the SQLite WASM build.
+#
+# The "b." prefix on some APIs is for "build". It was initially used
+# only for build-specific features, but that's no longer the came, but
+# the naming convention has stuck.
+#
+
+loud ?= 0
+ifeq (1,$(loud))
+ $(info $(emo.megaphone) Emitting loud build info. Pass loud=0 to disable it.)
+ b.cmd.loud =
+else
+ $(info $(emo.mute) Eliding loud build info. Pass loud=1 to enable it.)
+ b.cmd.loud = @
+endif
+
+#
+# Emoji for log messages.
+#
+emo.bug = 🐞
+emo.compile = ⏳
+emo.disk = 💾
+emo.done = 🏆
+emo.fire = 🔥
+emo.folder = 📁
+emo.garbage =🗑
+emo.megaphone = 📣
+emo.mute = 🔇
+emo.stop =🛑
+emo.strip =🪚
+emo.tool = 🔨
+
+#
+# logtag.X value for log context labeling. longtag.OTHERX can be
+# assigned to customize it for a given X.
+#
+logtag.@ = [$@]
+
+#
+# $(call b.call.mkdir@)
+#
+# $1 = optional build name
+#
+b.call.mkdir@ = if [ ! -d $(dir $@) ]; then \
+ echo '[$(emo.folder)+] $(if $(1),$(logtag.$(1)),[$(dir $@)])'; \
+ mkdir -p $(dir $@) || exit $$?; fi
+
+#
+# $(call b.call.cp,@,src,dest)
+#
+# $1 = build name, $2 = src file(s). $3 = dest dir
+b.call.cp = $(call b.call.mkdir@); \
+ echo '$(logtag.$(1)) $(emo.disk) $(2) ==> $3'; \
+ cp -p $(2) $(3) || exit $$$$?
+
+#
+# $(eval $(call b.eval.c-pp,@,src,dest,-Dx=y...))
+#
+# $1 = build name
+# $2 = Input file(s): cat $(2) | $(bin.c-pp) ...
+# $3 = Output file: $(bin.c-pp) -o $(3)
+# $4 = optional $(bin.c-pp) -D... flags */
+#
+define b.eval.c-pp
+$(3): $$(MAKEFILE_LIST) $$(bin.c-pp) $(2)
+ @$$(call b.call.mkdir@); \
+ echo '$$(logtag.$(1)) $$(emo.disk) $(4)'; \
+ cat $(2) | $$(bin.c-pp) -o $(3) $(4) $$(SQLITE.CALL.C-PP.FILTER.global) \
+ || exit $$$$?\n
+CLEAN_FILES += $(3)
+endef
+
+#
+# $(call b.call.strip-emcc-js-cruft)
+#
+# Our JS code installs bindings of each sqlite3_...() WASM export. The
+# generated Emscripten JS file does the same using its own framework,
+# but we don't use those results and can speed up lib init, and reduce
+# memory cost a bit, by stripping them out. Emscripten-side changes
+# can "break" this, causing this to be a no-op, but the worst that can
+# happen in that case is that it doesn't actually strip anything,
+# leading to slightly larger JS files.
+#
+# This snippet is intended to be used in makefile targets which
+# generate an Emscripten module and where $@ is the module's .js/.mjs
+# file.
+#
+# $1 = an optional log message prefix
+b.call.strip-emcc-js-cruft = \
+ sed -i -e '/^.*= \(_sqlite3\|_fiddle\)[^=]*=.*createExportWrapper/d' \
+ -e '/^var \(_sqlite3\|_fiddle\)[^=]*=.*makeInvalidEarlyAccess/d' $@ || exit; \
+ echo '$(1) $(emo.garbage) (Probably) /createExportWrapper()/d and /makeInvalidEarlyAccess()/d'
-C Generic\sbuild\ssimplifications.
-D 2025-09-24T03:05:31.667
+C Move\ssome\sof\sthe\sgenerated\swasm\smakefile\sutility\scode\sout\sof\sC\sand\sinto\sutil.make.
+D 2025-09-24T04:58:14.025
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F ext/session/sqlite3session.h 7404723606074fcb2afdc6b72c206072cdb2b7d8ba097ca1559174a80bc26f7a
F ext/session/test_session.c 8766b5973a6323934cb51248f621c3dc87ad2a98f023c3cc280d79e7d78d36fb
F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c
-F ext/wasm/GNUmakefile 87fac98d2dbca42c8361aa7951b951f9e5b6084ce78f8e56b81bd9a594c74c73
+F ext/wasm/GNUmakefile 613f0baf08b905dfeb67f0f405be8b466870e72040970c7b631d0d3483aed329
F ext/wasm/README-dist.txt f01081a850ce38a56706af6b481e3a7878e24e42b314cfcd4b129f0f8427066a
F ext/wasm/README.md 66ace67ae98a45e4116f2ca5425b716887bcee4d64febee804ff6398e1ae9ec7
F ext/wasm/SQLTester/GNUmakefile e0794f676d55819951bbfae45cc5e8d7818dc460492dc317ce7f0d2eca15caff
F ext/wasm/demo-worker1.js 08720227e98fa5b44761cf6e219269cee3e9dd0421d8d91459535da776950314
F ext/wasm/dist.make 57f5da2f0de5a297b5a0bc39ffec736380050578240ab24d864c2ff1b3634a3b
F ext/wasm/example_extra_init.c 2347cd69d19d839ef4e5e77b7855103a7fe3ef2af86f2e8c95839afd8b05862f
-F ext/wasm/fiddle.make c3ecfae3328526c8048cbd2e71888bebe2a438077268e9a8f2e302d33db91e4d
+F ext/wasm/fiddle.make 6875473b9fc25e8ba35d62341fdf8bc0980aa52de637daf5b9cfd864cfe43161
F ext/wasm/fiddle/fiddle-worker.js 7798af02e672e088ff192716f80626c8895e19301a65b8af6d5d12b2d13d2451
F ext/wasm/fiddle/fiddle.js 84fd75967e0af8b69d3dd849818342227d0f81d13db92e0dcbc63649b31a4893
F ext/wasm/fiddle/index.html a27b8127ef9ecf19612da93b2a6a73bdb3777b5c56b5450bb7200a94bc108ff9
F ext/wasm/index.html bcaa00eca521b372a6a62c7e7b17a870b0fcdf3e418a5921df1fd61e5344080d
F ext/wasm/jaccwabyt/jaccwabyt.js bbac67bc7a79dca34afe6215fd16b27768d84e22273507206f888c117e2ede7d
F ext/wasm/jaccwabyt/jaccwabyt.md 167fc0b624c9bc2c477846e336de9403842d81b1a24fc4d3b24317cb9eba734f
-F ext/wasm/mkwasmbuilds.c 87ee81ce0f78d31ca1e8ce58a1bc74ac6a0cecf6494612f093951197bab80462
+F ext/wasm/mkwasmbuilds.c 4bd08e7d51d6981a1c5915251b8ed2ed02bca88ab4d33395d97deb757d4c672a
F ext/wasm/module-symbols.html dc476b403369b26a1a23773e13b80f41b9a49f0825e81435fe3600a7cfbbe337
F ext/wasm/scratchpad-wasmfs.html a3d7388f3c4b263676b58b526846e9d02dfcb4014ff29d3a5040935286af5b96
F ext/wasm/scratchpad-wasmfs.mjs 66034b9256b218de59248aad796760a1584c1dd842231505895eff00dbd57c63
F ext/wasm/tests/opfs/sahpool/index.html be736567fd92d3ecb9754c145755037cbbd2bca01385e2732294b53f4c842328
F ext/wasm/tests/opfs/sahpool/sahpool-pausing.js f264925cfc82155de38cecb3d204c36e0f6991460fff0cb7c15079454679a4e2
F ext/wasm/tests/opfs/sahpool/sahpool-worker.js bd25a43fc2ab2d1bafd8f2854ad3943ef673f7c3be03e95ecf1612ff6e8e2a61
+F ext/wasm/util.make a500a5e82b8df9918a2fe5933be20684063b130783e45653d81c07cc3cd3bb92
F ext/wasm/wasmfs.make 5de02751b3e9e79b81a52ab4fe0ed6aa6a23311a90db58fea98c1c4e2845e562
F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0
F main.mk 20fe7a151708fc6b1f8cd0fdcc73622701cff5959131cfb73e1f75d33e687bf8
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 85fe9c6155f72583cea46d38bf5e040623d71fb5317ff9373421dbfdb179b2b0
-R 98bc100816e0f8dda14ba297aca98894
+P 61648610c3e454fce77b78e6f6be1b71e27bb9587af03ae5c0e083eac7158a64
+R d5aba8b9559a3ddbff76cbd26aca8857
U stephan
-Z 7161ecf91dac252ddb71b18b364e931a
+Z fb9bb507dc672f8ae32e129d4eb47e84
# Remove this line to create a well-formed Fossil manifest.
-61648610c3e454fce77b78e6f6be1b71e27bb9587af03ae5c0e083eac7158a64
+a2935758f534b51cac3d2e5ece74b369c806e3a994781744708e1590b9c32542