Add build of sqlite3.mjs (ES6 module), add a test app for it, and include it in the dist build.
FossilOrigin-Name: 2e783670e10b59e67c14b0db7f4803b41790cc7730de221d54fa2d4483cfba33
This commit is contained in:
parent
c768ef7289
commit
27a67968af
@ -168,7 +168,6 @@ emcc_opt_full := $(emcc_opt) -g3
|
||||
# (Much later: -O2 consistently gives the best speeds.)
|
||||
########################################################################
|
||||
|
||||
|
||||
$(sqlite3.c) $(sqlite3.h):
|
||||
$(MAKE) -C $(dir.top) sqlite3.c
|
||||
|
||||
@ -199,6 +198,48 @@ $(bin.stripccomments): $(bin.stripccomments).c $(MAKEFILE)
|
||||
$(CC) -o $@ $<
|
||||
DISTCLEAN_FILES += $(bin.stripccomments)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Transform $(1) to $(2) via ./c-pp -f $(1) ...
|
||||
#
|
||||
# Historical notes:
|
||||
#
|
||||
# - We first attempted to use gcc and/or clang to preprocess JS files
|
||||
# in the same way we would normally do C files, but C-specific quirks
|
||||
# of each makes that untennable.
|
||||
#
|
||||
# - We implemented c-pp.c (the C-Minus Pre-processor) as a custom
|
||||
# generic/file-format-agnostic preprocessor to enable us to pack
|
||||
# code for different target builds into the same JS files. Most
|
||||
# notably, some ES6 module (a.k.a. ESM) features cannot legally be
|
||||
# referenced at all in non-ESM code, e.g. the "import" and "export"
|
||||
# keywords. This preprocessing step permits us to swap out sections
|
||||
# of code where necessary for ESM and non-ESM (a.k.a. vanilla JS)
|
||||
# require different implementations. The alternative to such
|
||||
# preprocessing, would be to have separate source files for ES6
|
||||
# builds, which would have a higher maintenance burden than c-pp.c
|
||||
# seems likely to.
|
||||
#
|
||||
# c-pp.c was written specifically for the sqlite project's JavaScript
|
||||
# builds but is maintained as a standalone project:
|
||||
# https://fossil.wanderinghorse.net/r/c-pp
|
||||
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)
|
||||
define C-PP.JS
|
||||
# $1 c-pp -D... flags
|
||||
# $2 = c-pp -f X.js
|
||||
# $3 = c-pp -o X.js
|
||||
$(3): $(2) $$(MAKEFILE) $$(bin.c-pp)
|
||||
$$(bin.c-pp) -f $(2) -o $$@ $(1)
|
||||
CLEAN_FILES += $(3)
|
||||
endef
|
||||
c-pp.D.vanilla ?=
|
||||
c-pp.D.esm ?= -Dsqlite3-es6-module-build
|
||||
# /end CPP-of-JS bits
|
||||
########################################################################
|
||||
|
||||
|
||||
EXPORTED_FUNCTIONS.api.in := $(abspath $(dir.api)/EXPORTED_FUNCTIONS.sqlite3-api)
|
||||
EXPORTED_FUNCTIONS.api := $(dir.tmp)/EXPORTED_FUNCTIONS.api
|
||||
$(EXPORTED_FUNCTIONS.api): $(EXPORTED_FUNCTIONS.api.in) $(MAKEFILE)
|
||||
@ -234,9 +275,8 @@ $(foreach X,$(SOAP.js) $(sqlite3-worker1.js) $(sqlite3-worker1-promiser.js),\
|
||||
$(eval $(call COPY_XAPI,$(X))))
|
||||
all: $(sqlite3-api.ext.jses)
|
||||
|
||||
sqlite3-api.js := $(dir.tmp)/sqlite3-api.js
|
||||
sqlite3-api.c-pp.js := $(dir.tmp)/sqlite3-api.c-pp.js
|
||||
$(sqlite3-api.c-pp.js): $(sqlite3-api.jses) $(MAKEFILE)
|
||||
sqlite3-api.js.in := $(dir.tmp)/sqlite3-api.c-pp.js
|
||||
$(sqlite3-api.js.in): $(sqlite3-api.jses) $(MAKEFILE)
|
||||
@echo "Making $@..."
|
||||
@for i in $(sqlite3-api.jses); do \
|
||||
echo "/* BEGIN FILE: $$i */"; \
|
||||
@ -257,28 +297,52 @@ $(sqlite3-api-build-version.js): $(bin.version-info) $(MAKEFILE)
|
||||
########################################################################
|
||||
# --post-js and --pre-js are emcc flags we use to append/prepend JS to
|
||||
# the generated emscripten module file.
|
||||
pre-js.js := $(dir.tmp)/pre-js.js
|
||||
post-js.js := $(dir.tmp)/post-js.js
|
||||
post-jses := \
|
||||
pre-js.js.in := $(dir.api)/pre-js.js
|
||||
pre-js.js.esm := $(dir.tmp)/pre-js.esm.js
|
||||
pre-js.js.vanilla := $(dir.tmp)/pre-js.vanilla.js
|
||||
$(eval $(call C-PP.JS,$(c-pp.D.vanilla),$(pre-js.js.in),$(pre-js.js.vanilla)))
|
||||
$(eval $(call C-PP.JS,$(c-pp.D.esm),$(pre-js.js.in),$(pre-js.js.esm)))
|
||||
post-js.js.in := $(dir.tmp)/post-js.js
|
||||
post-js.js.vanilla := $(dir.tmp)/post-js.vanilla.js
|
||||
post-js.js.esm := $(dir.tmp)/post-js.esm.js
|
||||
post-jses.js := \
|
||||
$(dir.api)/post-js-header.js \
|
||||
$(sqlite3-api.js) \
|
||||
$(sqlite3-api.js.in) \
|
||||
$(dir.api)/post-js-footer.js
|
||||
$(post-js.js): $(post-jses) $(MAKEFILE)
|
||||
$(post-js.js.in): $(post-jses.js) $(MAKEFILE)
|
||||
@echo "Making $@..."
|
||||
@for i in $(post-jses); do \
|
||||
@for i in $(post-jses.js); do \
|
||||
echo "/* BEGIN FILE: $$i */"; \
|
||||
cat $$i; \
|
||||
echo "/* END FILE: $$i */"; \
|
||||
done > $@
|
||||
$(eval $(call C-PP.JS,$(c-pp.D.vanilla),$(post-js.js.in),$(post-js.js.vanilla)))
|
||||
$(eval $(call C-PP.JS,$(c-pp.D.esm),$(post-js.js.in),$(post-js.js.esm)))
|
||||
|
||||
extern-post-js.js.in := $(dir.api)/extern-post-js.js
|
||||
extern-post-js.js := $(dir.tmp)/extern-post-js.js
|
||||
extern-post-js.js.vanilla := $(dir.tmp)/extern-post-js.vanilla.js
|
||||
extern-post-js.js.esm := $(dir.tmp)/extern-post-js.esm.js
|
||||
$(eval $(call C-PP.JS,$(c-pp.D.vanilla),$(extern-post-js.js.in),$(extern-post-js.js.vanilla)))
|
||||
$(eval $(call C-PP.JS,$(c-pp.D.esm),$(extern-post-js.js.in),$(extern-post-js.js.esm)))
|
||||
extern-pre-js.js := $(dir.api)/extern-pre-js.js
|
||||
|
||||
# Emscripten flags for --[extern-][pre|post]-js=...
|
||||
pre-post-common.flags := \
|
||||
--post-js=$(post-js.js) \
|
||||
--extern-post-js=$(extern-post-js.js) \
|
||||
--extern-pre-js=$(sqlite3-license-version.js)
|
||||
pre-post-jses.deps := $(post-js.js) \
|
||||
$(extern-post-js.js) $(extern-pre-js.js) $(sqlite3-license-version.js)
|
||||
pre-post-common.flags.vanilla := \
|
||||
$(pre-post-common.flags) \
|
||||
--post-js=$(post-js.js.vanilla) \
|
||||
--extern-post-js=$(extern-post-js.js.vanilla)
|
||||
pre-post-common.flags.esm := \
|
||||
$(pre-post-common.flags) \
|
||||
--post-js=$(post-js.js.esm) \
|
||||
--extern-post-js=$(extern-post-js.js.esm)
|
||||
|
||||
pre-post-jses.deps.common := $(extern-pre-js.js) $(sqlite3-license-version.js)
|
||||
pre-post-jses.deps.vanilla := $(pre-post-jses.deps.common) \
|
||||
$(post-js.js.vanilla) $(extern-post-js.js.vanilla)
|
||||
pre-post-jses.deps.esm := $(pre-post-jses.deps.common) \
|
||||
$(post-js.js.esm) $(extern-post-js.js.esm)
|
||||
$(sqlite3-license-version.js): $(sqlite3.h) $(sqlite3-license-version-header.js) $(MAKEFILE)
|
||||
@echo "Making $@..."; { \
|
||||
cat $(sqlite3-license-version-header.js); \
|
||||
@ -290,66 +354,25 @@ $(sqlite3-license-version.js): $(sqlite3.h) $(sqlite3-license-version-header.js)
|
||||
echo '*/'; \
|
||||
} > $@
|
||||
|
||||
########################################################################
|
||||
# Transform $(1) to $(2) via ./c-pp -f $(1) ...
|
||||
#
|
||||
# Historical notes:
|
||||
#
|
||||
# - We first attempted to use gcc and/or clang to preprocess JS files
|
||||
# in the same way we would normally do C files, but C-specific quirks
|
||||
# of each makes that untennable.
|
||||
#
|
||||
# - We implemented c-pp.c (the C-Minus Pre-processor) as a custom
|
||||
# generic/file-format-agnostic preprocessor to enable us to pack
|
||||
# code for different target builds into the same JS files. Most
|
||||
# notably, some ES6 module (a.k.a. ESM) features cannot legally be
|
||||
# referenced at all in non-ESM code, e.g. the "import" and "export"
|
||||
# keywords. This preprocessing step permits us to swap out sections
|
||||
# of code where necessary for ESM and non-ESM (a.k.a. vanilla JS)
|
||||
# require different implementations. The alternative to such
|
||||
# preprocessing, would be to have separate source files for ES6
|
||||
# builds, which would have a higher maintenance burden than c-pp.c
|
||||
# seems likely to.
|
||||
#
|
||||
# c-pp.c was written specifically for the sqlite project's JavaScript
|
||||
# builds but is maintained as a standalone project:
|
||||
# https://fossil.wanderinghorse.net/r/c-pp
|
||||
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)
|
||||
ifneq (,$(filter esm,$(MAKECMDGOALS)))
|
||||
js.cpp.defines ?= -DSQLITE_JS_ESM
|
||||
esm: $(filter-out esm,$(MAKECMDGOALS))
|
||||
else
|
||||
js.cpp.defines ?=
|
||||
endif
|
||||
define C-PP.JS
|
||||
# $1 = X.js. $2 = output file to generate by filtering $(1) through
|
||||
# $(bin.cpp) -E -CC.
|
||||
$(2): $(1) $$(MAKEFILE) $$(bin.c-pp)
|
||||
$$(bin.c-pp) $(js.cpp.defines) -f $(1) -o $$@
|
||||
CLEAN_FILES += $(2)
|
||||
endef
|
||||
$(eval $(call C-PP.JS,$(dir.tmp)/sqlite3-api.c-pp.js,$(sqlite3-api.js)))
|
||||
$(eval $(call C-PP.JS,$(dir.api)/pre-js.js,$(dir.tmp)/pre-js.js))
|
||||
$(eval $(call C-PP.JS,$(extern-post-js.js.in),$(extern-post-js.js)))
|
||||
# /end CPP-of-JS bits
|
||||
########################################################################
|
||||
|
||||
########################################################################
|
||||
# call-make-pre-js creates rules for pre-js-$(1).js. $1 = the base
|
||||
# name of the JS file on whose behalf this pre-js is for.
|
||||
# name of the JS file on whose behalf this pre-js is for. $2 is the
|
||||
# build mode: one of (vanilla, esm).
|
||||
define call-make-pre-js
|
||||
pre-post-$(1).flags ?=
|
||||
$$(dir.tmp)/pre-js-$(1).js: $$(pre-js.js) $$(MAKEFILE)
|
||||
cp $$(pre-js.js) $$@
|
||||
pre-post-$(1).flags.$(2) ?=
|
||||
$$(dir.tmp)/pre-js-$(1)-$(2).js: $$(pre-js.js.$(2)) $$(MAKEFILE)
|
||||
cp $$(pre-js.js.$(2)) $$@
|
||||
@if [ sqlite3-wasmfs = $(1) ]; then \
|
||||
echo "delete Module[xNameOfInstantiateWasm] /*for WASMFS build*/;"; \
|
||||
elif [ sqlite3 != $(1) ]; then \
|
||||
echo "Module[xNameOfInstantiateWasm].uri = '$(1).wasm';"; \
|
||||
fi >> $$@
|
||||
pre-post-$(1).deps := $$(pre-post-jses.deps) $$(dir.tmp)/pre-js-$(1).js
|
||||
pre-post-$(1).flags += --pre-js=$$(dir.tmp)/pre-js-$(1).js
|
||||
pre-post-$(1).deps.$(2) := \
|
||||
$$(pre-post-jses.deps.$(2)) \
|
||||
$$(dir.tmp)/pre-js-$(1)-$(2).js
|
||||
pre-post-$(1).flags.$(2) += \
|
||||
$$(pre-post-common.flags.$(2)) \
|
||||
--pre-js=$$(dir.tmp)/pre-js-$(1)-$(2).js
|
||||
endef
|
||||
#$(error $(call call-make-pre-js,sqlite3-wasmfs))
|
||||
# /post-js and pre-js
|
||||
@ -466,20 +489,11 @@ emcc.jsflags += -sWASM_BIGINT=$(emcc.WASM_BIGINT)
|
||||
# debugging info, _huge_.
|
||||
########################################################################
|
||||
|
||||
########################################################################
|
||||
# AN EXPERIMENT: undocumented Emscripten feature: if the target file
|
||||
# extension is "mjs", it defaults to ES6 module builds:
|
||||
sqlite3.js := $(dir.dout)/sqlite3.js
|
||||
sqlite3.mjs := $(dir.dout)/sqlite3.mjs
|
||||
# Undocumented Emscripten feature: if the target file extension is
|
||||
# "mjs", it defaults to ES6 module builds:
|
||||
# https://github.com/emscripten-core/emscripten/issues/14383
|
||||
ifeq (,$(filter esm,$(MAKECMDGOALS)))
|
||||
sqlite3.js.ext := js
|
||||
else
|
||||
esm.deps := $(filter-out esm,$(MAKECMDGOALS))
|
||||
esm: $(if $(esm.deps),$(esm.deps),all)
|
||||
sqlite3.js.ext := mjs
|
||||
endif
|
||||
# /esm
|
||||
########################################################################
|
||||
sqlite3.js := $(dir.dout)/sqlite3.$(sqlite3.js.ext)
|
||||
sqlite3.wasm := $(dir.dout)/sqlite3.wasm
|
||||
sqlite3-wasm.c := $(dir.api)/sqlite3-wasm.c
|
||||
# sqlite3-wasm.o vs sqlite3-wasm.c: building against the latter
|
||||
@ -487,22 +501,52 @@ sqlite3-wasm.c := $(dir.api)/sqlite3-wasm.c
|
||||
# enough to the target speed requirements that the 500ms makes a
|
||||
# difference. Thus we build all binaries against sqlite3-wasm.c
|
||||
# instead of building a shared copy of sqlite3-wasm.o.
|
||||
$(eval $(call call-make-pre-js,sqlite3))
|
||||
$(eval $(call call-make-pre-js,sqlite3,vanilla))
|
||||
$(eval $(call call-make-pre-js,sqlite3,esm))
|
||||
$(sqlite3.js):
|
||||
$(sqlite3.js): $(MAKEFILE) $(sqlite3.wasm.obj) \
|
||||
$(EXPORTED_FUNCTIONS.api) \
|
||||
$(pre-post-sqlite3.deps)
|
||||
$(sqlite3.js) $(sqlite3.mjs): $(MAKEFILE) $(sqlite3.wasm.obj) \
|
||||
$(EXPORTED_FUNCTIONS.api)
|
||||
$(sqlite3.js): $(pre-post-sqlite3.deps.vanilla)
|
||||
$(sqlite3.mjs): $(pre-post-sqlite3.deps.esm)
|
||||
# SQLITE3.xJS.RECIPE = Recipe body for $(sqlite3.js) and
|
||||
# $(sqlite3.mjs). $1 = one of (vanilla, esm).
|
||||
define SQLITE3.xJS.RECIPE
|
||||
@echo "Building $@ ..."
|
||||
$(emcc.bin) -o $@ $(emcc_opt_full) $(emcc.flags) \
|
||||
$(emcc.jsflags) $(pre-post-common.flags) $(pre-post-sqlite3.flags) \
|
||||
$(emcc.jsflags) \
|
||||
$(pre-post-sqlite3.flags.$(1)) $(emcc.flags.sqlite3.$(1)) \
|
||||
$(cflags.common) $(SQLITE_OPT) $(sqlite3-wasm.c)
|
||||
if [ esm = $(1) ]; then \
|
||||
sed -i -e '0,/^export default/{/^export default/d}' $@; \
|
||||
fi # work around an Emscripten annoyance. See emcc.flags.esm
|
||||
chmod -x $(sqlite3.wasm)
|
||||
$(maybe-wasm-strip) $(sqlite3.wasm)
|
||||
@ls -la $@ $(sqlite3.wasm)
|
||||
endef
|
||||
emcc.flags.sqlite3.vanilla :=
|
||||
emcc.flags.sqlite3.esm := -sEXPORT_ES6 -sUSE_ES6_IMPORT_META
|
||||
# Reminder: even if we use -sEXPORT_ES6=0, emcc _still_ adds:
|
||||
#
|
||||
# export default $(sqlite3.js.init-func);
|
||||
#
|
||||
# when building *.mjs, which is bad because we need to export an
|
||||
# overwritten version of that function and cannot "export default"
|
||||
# twice. Because of this, we have to sed $(sqlite3.mjs) to remove the
|
||||
# first instance of /^export default/.
|
||||
$(sqlite3.js):
|
||||
$(call SQLITE3.xJS.RECIPE,vanilla)
|
||||
$(sqlite3.mjs):
|
||||
$(call SQLITE3.xJS.RECIPE,esm)
|
||||
$(sqlite3.wasm): $(sqlite3.js)
|
||||
CLEAN_FILES += $(sqlite3.js) $(sqlite3.wasm)
|
||||
all: $(sqlite3.js)
|
||||
wasm: $(sqlite3.js)
|
||||
$(sqlite3.mjs): $(sqlite3.js)
|
||||
# We have to ensure that we do not build both $(sqlite3.js) and
|
||||
# $(sqlite3.mjs) in parallel because both result in the build of
|
||||
# $(sqlite3.wasm). We have no way to build just the .mjs file without
|
||||
# also building the .wasm file. i.e. we're building $(sqlite3.wasm)
|
||||
# twice, but that's unavoidable.
|
||||
CLEAN_FILES += $(sqlite3.js) $(sqlite3.mjs) $(sqlite3.wasm)
|
||||
all: $(sqlite3.mjs)
|
||||
wasm: $(sqlite3.mjs)
|
||||
# End main Emscripten-based module build
|
||||
########################################################################
|
||||
|
||||
@ -552,7 +596,6 @@ speedtest1-common.eflags += -sDYNAMIC_EXECUTION=0
|
||||
speedtest1-common.eflags += --minify 0
|
||||
speedtest1-common.eflags += -sEXPORT_NAME=$(sqlite3.js.init-func)
|
||||
speedtest1-common.eflags += -sWASM_BIGINT=$(emcc.WASM_BIGINT)
|
||||
speedtest1-common.eflags += $(pre-post-common.flags)
|
||||
speedtest1.exit-runtime0 := -sEXIT_RUNTIME=0
|
||||
speedtest1.exit-runtime1 := -sEXIT_RUNTIME=1
|
||||
# Re -sEXIT_RUNTIME=1 vs 0: if it's 1 and speedtest1 crashes, we get
|
||||
@ -576,17 +619,17 @@ $(EXPORTED_FUNCTIONS.speedtest1): $(EXPORTED_FUNCTIONS.api)
|
||||
@echo "Making $@ ..."
|
||||
@{ echo _wasm_main; cat $(EXPORTED_FUNCTIONS.api); } > $@
|
||||
speedtest1.js := $(dir.dout)/speedtest1.js
|
||||
speedtest1.wasm := $(subst .js,.wasm,$(speedtest1.js))
|
||||
speedtest1.wasm := $(dir.dout)/speedtest1.wasm
|
||||
speedtest1.cflags := $(cflags.common) -DSQLITE_SPEEDTEST1_WASM
|
||||
speedtest1.cses := $(speedtest1.c) $(sqlite3-wasm.c)
|
||||
$(eval $(call call-make-pre-js,speedtest1))
|
||||
$(eval $(call call-make-pre-js,speedtest1,vanilla))
|
||||
$(speedtest1.js): $(MAKEFILE) $(speedtest1.cses) \
|
||||
$(pre-post-speedtest1.deps) \
|
||||
$(pre-post-speedtest1.deps.vanilla) \
|
||||
$(EXPORTED_FUNCTIONS.speedtest1)
|
||||
@echo "Building $@ ..."
|
||||
$(emcc.bin) \
|
||||
$(speedtest1.eflags) $(speedtest1-common.eflags) $(speedtest1.cflags) \
|
||||
$(pre-post-speedtest1.flags) \
|
||||
$(pre-post-speedtest1.flags.vanilla) \
|
||||
$(SQLITE_OPT) \
|
||||
$(speedtest1.exit-runtime0) \
|
||||
-o $@ $(speedtest1.cses) -lm
|
||||
|
@ -1,11 +1,15 @@
|
||||
|
||||
/* ^^^^ ACHTUNG: blank line at the start is necessary because
|
||||
Emscripten will not add a newline in some cases and we need
|
||||
a blank line for a sed-based kludge for the ES6 build. */
|
||||
/* extern-post-js.js must be appended to the resulting sqlite3.js
|
||||
file. It gets its name from being used as the value for the
|
||||
--extern-post-js=... Emscripten flag. Note that this code, unlike
|
||||
most of the associated JS code, runs outside of the
|
||||
Emscripten-generated module init scope, in the current
|
||||
global scope. */
|
||||
//#if SQLITE_JS_ESM
|
||||
const toexport =
|
||||
//#if sqlite3-es6-module-build
|
||||
const toExportForES6 =
|
||||
//#endif
|
||||
(function(){
|
||||
/**
|
||||
@ -106,10 +110,10 @@ const toexport =
|
||||
exports["sqlite3InitModule"] = sqlite3InitModule;
|
||||
/* AMD modules get injected in a way we cannot override,
|
||||
so we can't handle those here. */
|
||||
//#if SQLITE_JS_ESM
|
||||
//#if sqlite3-es6-module-build
|
||||
return self.sqlite3InitModule;
|
||||
//#endif
|
||||
})();
|
||||
//#if SQLITE_JS_ESM
|
||||
export default toexport;
|
||||
//#if sqlite3-es6-module-build
|
||||
export default toExportForES6;
|
||||
//#endif
|
||||
|
@ -29,7 +29,7 @@ sqlite3InitModuleState.debugModule('self.location =',self.location);
|
||||
4) If none of the above apply, (prefix+path) is returned.
|
||||
*/
|
||||
Module['locateFile'] = function(path, prefix) {
|
||||
//#if SQLITE_JS_ESM
|
||||
//#if sqlite3-es6-module-build
|
||||
return new URL(path, import.meta.url).href;
|
||||
//#else
|
||||
'use strict';
|
||||
|
@ -167,7 +167,7 @@ const installOpfsVfs = function callee(options){
|
||||
return promiseReject_(err);
|
||||
};
|
||||
const W =
|
||||
//#if SQLITE_JS_ESM
|
||||
//#if sqlite3-es6-module-build
|
||||
new Worker(new URL(options.proxyUri, import.meta.url));
|
||||
//#else
|
||||
new Worker(options.proxyUri);
|
||||
|
@ -42,7 +42,7 @@ dist-dir.jswasm := $(dist-dir.top)/$(notdir $(dir.dout))
|
||||
dist-dir.common := $(dist-dir.top)/common
|
||||
dist.top.extras := \
|
||||
demo-123.html demo-123-worker.html demo-123.js \
|
||||
tester1.html tester1-worker.html tester1.js \
|
||||
tester1.html tester1-worker.html tester1-esm.html tester1.js \
|
||||
demo-jsstorage.html demo-jsstorage.js \
|
||||
demo-worker1.html demo-worker1.js \
|
||||
demo-worker1-promiser.html demo-worker1-promiser.js
|
||||
@ -78,6 +78,8 @@ dist: \
|
||||
@cp -p $(dist.jswasm.extras) $(dist-dir.jswasm)
|
||||
@$(bin.stripccomments) -k -k < $(sqlite3.js) \
|
||||
> $(dist-dir.jswasm)/$(notdir $(sqlite3.js))
|
||||
@$(bin.stripccomments) -k -k < $(sqlite3.mjs) \
|
||||
> $(dist-dir.jswasm)/$(notdir $(sqlite3.mjs))
|
||||
@cp -p $(dist.common.extras) $(dist-dir.common)
|
||||
@set -e; \
|
||||
vnum=$$($(bin.version-info) --download-version); \
|
||||
|
@ -58,12 +58,12 @@ fiddle.SOAP.js := $(dir.fiddle)/$(notdir $(SOAP.js))
|
||||
$(fiddle.SOAP.js): $(SOAP.js)
|
||||
cp $< $@
|
||||
|
||||
$(eval $(call call-make-pre-js,fiddle-module))
|
||||
$(eval $(call call-make-pre-js,fiddle-module,vanilla))
|
||||
$(fiddle-module.js): $(MAKEFILE) $(MAKEFILE.fiddle) \
|
||||
$(EXPORTED_FUNCTIONS.fiddle) \
|
||||
$(fiddle.cses) $(pre-post-fiddle-module.deps) $(fiddle.SOAP.js)
|
||||
$(fiddle.cses) $(pre-post-fiddle-module.deps.vanilla) $(fiddle.SOAP.js)
|
||||
$(emcc.bin) -o $@ $(fiddle.emcc-flags) \
|
||||
$(pre-post-common.flags) $(pre-post-fiddle-module.flags) \
|
||||
$(pre-post-fiddle-module.flags.vanilla) \
|
||||
$(fiddle.cses)
|
||||
$(maybe-wasm-strip) $(fiddle-module.wasm)
|
||||
gzip < $@ > $@.gz
|
||||
|
@ -56,6 +56,10 @@
|
||||
utility code.</li>
|
||||
<li><a href='tester1-worker.html'>tester1-worker</a>: same thing
|
||||
but running in a Worker.</li>
|
||||
<li><a href='tester1-esm.html'>tester1-esm</a>: same thing
|
||||
but loaded in the main thread via an ES6 module. Note that
|
||||
not all browsers permit loading modules in Worker threads.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Higher-level apps and demos...
|
||||
|
@ -46,7 +46,10 @@
|
||||
regression tests for the various APIs and surrounding
|
||||
utility code.</li>
|
||||
<li><a href='tester1-worker.html'>tester1-worker</a>: same thing
|
||||
but running in a Worker.</li>
|
||||
but running in a Worker.</li>
|
||||
<li><a href='tester1-esm.html'>tester1-esm</a>: same thing
|
||||
but loaded in the main thread via an ES6 module. Note that
|
||||
not all browsers permit loading modules in Worker threads.
|
||||
</ul>
|
||||
</li>
|
||||
<li>High-level apps and demos...
|
||||
|
30
ext/wasm/tester1-esm.html
Normal file
30
ext/wasm/tester1-esm.html
Normal file
@ -0,0 +1,30 @@
|
||||
<!doctype html>
|
||||
<html lang="en-us">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon">
|
||||
<link rel="stylesheet" href="common/emscripten.css"/>
|
||||
<link rel="stylesheet" href="common/testing.css"/>
|
||||
<title>sqlite3 tester ESM #1 (UI thread)</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: monospace;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1 id='color-target'>sqlite3 WASM/JS tester ESM #1 (UI thread)</h1>
|
||||
<div class='input-wrapper'>
|
||||
<input type='checkbox' id='cb-log-reverse'>
|
||||
<label for='cb-log-reverse'>Reverse log order?</label>
|
||||
</div>
|
||||
<div id='test-output'></div>
|
||||
<script type="module" defer>
|
||||
import {default as sqlite3InitModule} from "./jswasm/sqlite3.mjs";
|
||||
self.sqlite3InitModule = sqlite3InitModule;
|
||||
console.log("Loaded sqlite3InitModule() via an ES6 module.");
|
||||
</script>
|
||||
<script src="tester1.js" defer></script>
|
||||
</body>
|
||||
</html>
|
@ -67,14 +67,17 @@ sqlite3-wasmfs.jsflags += $(sqlite3-wasmfs.fsflags)
|
||||
# USE_PTHREADS + ALLOW_MEMORY_GROWTH may run non-wasm code slowly,
|
||||
# see https://github.com/WebAssembly/design/issues/1271 [-Wpthreads-mem-growth]
|
||||
sqlite3-wasmfs.jsflags += -sWASM_BIGINT=$(emcc.WASM_BIGINT)
|
||||
$(eval $(call call-make-pre-js,sqlite3-wasmfs))
|
||||
sqlite3-wasmfs.jsflags += $(pre-post-common.flags) $(pre-post-sqlite3-wasmfs.flags)
|
||||
$(eval $(call call-make-pre-js,sqlite3-wasmfs,vanilla))
|
||||
sqlite3-wasmfs.jsflags += \
|
||||
$(pre-post-common.flags.vanilla) \
|
||||
$(pre-post-sqlite3-wasmfs.flags.vanilla)
|
||||
$(sqlite3-wasmfs.js): $(sqlite3-wasm.c) \
|
||||
$(EXPORTED_FUNCTIONS.api) $(MAKEFILE) $(MAKEFILE.wasmfs) \
|
||||
$(pre-post-sqlite3-wasmfs.deps)
|
||||
$(pre-post-sqlite3-wasmfs.deps.vanilla)
|
||||
@echo "Building $@ ..."
|
||||
$(emcc.bin) -o $@ $(emcc_opt_full) $(emcc.flags) \
|
||||
$(sqlite3-wasmfs.cflags) $(sqlite3-wasmfs.jsflags) \
|
||||
$(pre-post-sqlite3-wasm.flags.vanilla) \
|
||||
$(sqlite3-wasm.c)
|
||||
chmod -x $(sqlite3-wasmfs.wasm)
|
||||
$(maybe-wasm-strip) $(sqlite3-wasmfs.wasm)
|
||||
|
30
manifest
30
manifest
@ -1,5 +1,5 @@
|
||||
C Integrate\sa\scustom\spreprocessor\sto\sthe\sJS\sbuild\sprocess\sto\sfacilitate\screation\sof\sboth\svanilla\sJS\sand\sES6\sModule\sbuilds\sfrom\sthe\ssame\ssource\sfiles.\sThere\sis\sstill\ssome\sbuild-level\sreworking\spending\sto\smake\san\sESM\sbuild\sa\sfirst-class\sdeliverable.
|
||||
D 2022-11-19T02:58:03.867
|
||||
C Add\sbuild\sof\ssqlite3.mjs\s(ES6\smodule),\sadd\sa\stest\sapp\sfor\sit,\sand\sinclude\sit\sin\sthe\sdist\sbuild.
|
||||
D 2022-11-19T05:26:45.763
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||
@ -488,21 +488,21 @@ F ext/userauth/sqlite3userauth.h 7f3ea8c4686db8e40b0a0e7a8e0b00fac13aa7a3
|
||||
F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04
|
||||
F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb
|
||||
F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c
|
||||
F ext/wasm/GNUmakefile 6a0d03e8d0b52b6851a364c1faaa0df8a07be1e8eb8aa9f87432aad74005a04e
|
||||
F ext/wasm/GNUmakefile 1e38a4f7147d621bd2138d13938ef34157bcf47908325baa6b06cd02c5e3ef89
|
||||
F ext/wasm/README-dist.txt 2d670b426fc7c613b90a7d2f2b05b433088fe65181abead970980f0a4a75ea20
|
||||
F ext/wasm/README.md ef39861aa21632fdbca0bdd469f78f0096f6449a720f3f39642594af503030e9
|
||||
F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api 9120c2f8f51fa85f46dcf4dcb6b12f4a807d428f6089b99cdb08d8ddfcfd88b2
|
||||
F ext/wasm/api/EXPORTED_RUNTIME_METHODS.sqlite3-api 1ec3c73e7d66e95529c3c64ac3de2470b0e9e7fbf7a5b41261c367cf4f1b7287
|
||||
F ext/wasm/api/README.md 29276a845e57004e82efba61fa5866fd05f9137380a1dc26dc4c6d65264cd81c
|
||||
F ext/wasm/api/extern-post-js.js 824f37f1957e15b150bb36e98621b3bf91b55f6af7055cedc831331129b4883d
|
||||
F ext/wasm/api/extern-post-js.js 015121df2c903cf12d51507227b756ab3626036d8e9d610a2a2c15b3f54afe4d
|
||||
F ext/wasm/api/extern-pre-js.js cc61c09c7a24a07dbecb4c352453c3985170cec12b4e7e7e7a4d11d43c5c8f41
|
||||
F ext/wasm/api/post-js-footer.js cd0a8ec768501d9bd45d325ab0442037fb0e33d1f3b4f08902f15c34720ee4a1
|
||||
F ext/wasm/api/post-js-header.js d6ab3dfef4a06960d28a7eaa338d4e2a1a5981e9b38718168bbde8fdb2a439b8
|
||||
F ext/wasm/api/pre-js.js 749bbbac2f1a2192eaba80cf5e00a3219da78b3c0a84e3019b5eef30e0bc9b88
|
||||
F ext/wasm/api/pre-js.js 1156a7fb9de817bb1cb39ad90b76aa93fbb9dcf950a1f2d6f547e5976872be36
|
||||
F ext/wasm/api/sqlite3-api-cleanup.js ecdc69dbfccfe26146f04799fcfd4a6f5790d46e7e3b9b6e9b0491f92ed8ae34
|
||||
F ext/wasm/api/sqlite3-api-glue.js 056f44b82c126358a0175e08a892d56fadfce177b0d7a0012502a6acf67ea6d5
|
||||
F ext/wasm/api/sqlite3-api-oo1.js e9a83489bbb4838ce0aee46eaaa9350e0e25a5b926b565e4f5ae8e840e4fbaed
|
||||
F ext/wasm/api/sqlite3-api-opfs.js 4368a30586df3e11339a72082c77bdef670d619c6185c2dd1ebf5208c3ab0a5c
|
||||
F ext/wasm/api/sqlite3-api-opfs.js 9f115a37dafe8067bce8812996d2deff45741c6e39f7aad7b48f5fbbd822dba5
|
||||
F ext/wasm/api/sqlite3-api-prologue.js fd526fa017fa2578673ca18158354515c719e719a5d93f2f6d0e43f39170430e
|
||||
F ext/wasm/api/sqlite3-api-worker1.js e94ba98e44afccfa482874cd9acb325883ade50ed1f9f9526beb9de1711f182f
|
||||
F ext/wasm/api/sqlite3-license-version-header.js a661182fc93fc2cf212dfd0b987f8e138a3ac98f850b1112e29b5fbdaecc87c3
|
||||
@ -527,14 +527,14 @@ F ext/wasm/demo-worker1-promiser.html 1de7c248c7c2cfd4a5783d2aa154bce62d74c6de98
|
||||
F ext/wasm/demo-worker1-promiser.js b85a2bb1b918db4f09dfa24419241cb3edad7791389425c2505092e9b715017d
|
||||
F ext/wasm/demo-worker1.html 2c178c1890a2beb5a5fecb1453e796d067a4b8d3d2a04d65ca2eb1ab2c68ef5d
|
||||
F ext/wasm/demo-worker1.js a619adffc98b75b66c633b00f747b856449a134a9a0357909287d80a182d70fa
|
||||
F ext/wasm/dist.make 481289899a07958439d07ee4302ff86235fa0fbb72f17ea05db2be90a94abf90
|
||||
F ext/wasm/fiddle.make e570ec1bfc7d803507a2e514fe32f673fe001b2114b85c73c3964a462ba8bcfc
|
||||
F ext/wasm/dist.make 4b55c8a7926bbab4936adab6a08eca524085fc47bc3b08f41918df5b4665da3d
|
||||
F ext/wasm/fiddle.make 2812c44c9bafb5be9c8767963d1b9f374d77af7795fcaa06483c03e7059dea74
|
||||
F ext/wasm/fiddle/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
|
||||
F ext/wasm/fiddle/fiddle-worker.js b4a0c8ab6c0983218543ca771c45f6075449f63a1dcf290ae5a681b2cba8800d
|
||||
F ext/wasm/fiddle/fiddle.js 974b995119ac443685d7d94d3b3c58c6a36540e9eb3fed7069d5653284071715
|
||||
F ext/wasm/fiddle/index.html 5daf54e8f3d7777cbb1ca4f93affe28858dbfff25841cb4ab81d694efed28ec2
|
||||
F ext/wasm/index-dist.html cb0da16cba0f21cda2c25724c5869102d48eb0af04446acd3cd0ca031f80ed19
|
||||
F ext/wasm/index.html ce6a68a75532b47e3c0adb83381a06d15de8c0ac0331fb7bf31d33f8e7c77dc4
|
||||
F ext/wasm/index-dist.html 6bfb3591e40f7c23626730df587f533e983e996d4d1fb67244fb6a88fe6cf9a6
|
||||
F ext/wasm/index.html 49f58dddc29f6394b6e8a93e42768de59380c258454b68b9182e1946d13a4a4b
|
||||
F ext/wasm/jaccwabyt/jaccwabyt.js 95f573de1826474c9605dda620ee622fcb1673ae74f191eb324c0853aa4dcb66
|
||||
F ext/wasm/jaccwabyt/jaccwabyt.md 9aa6951b529a8b29f578ec8f0355713c39584c92cf1708f63ba0cf917cb5b68e
|
||||
F ext/wasm/module-symbols.html b8eebafef8e536624bbe5f7a3da40c07a9062b843dfd3161a0bb72cbb6763dc5
|
||||
@ -549,11 +549,12 @@ F ext/wasm/sql/000-mandelbrot.sql 775337a4b80938ac8146aedf88808282f04d02d983d826
|
||||
F ext/wasm/sql/001-sudoku.sql 35b7cb7239ba5d5f193bc05ec379bcf66891bce6f2a5b3879f2f78d0917299b5
|
||||
F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555e685bce3da8c3f
|
||||
F ext/wasm/test-opfs-vfs.js 44363db07b2a20e73b0eb1808de4400ca71b703af718d0fa6d962f15e73bf2ac
|
||||
F ext/wasm/tester1-esm.html 8d226a21b20707dbd66d68a3990141f0392fc781a281291d3dc59f38a3555887
|
||||
F ext/wasm/tester1-worker.html 51bf39e2b87f974ae3d5bc3086e2fb36d258f3698c54f6e21ba4b3b99636fa27
|
||||
F ext/wasm/tester1.html 624ec41cd9f78a1f2b6d7df70aaa7a6394396b1f2455ecbd6de5775c1275b121
|
||||
F ext/wasm/tester1.js bff806de454de115922d78c056f11d523ec7ed9ed3839d4e21433a9f72558b88
|
||||
F ext/wasm/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd72273503ae7d5
|
||||
F ext/wasm/wasmfs.make edfd60691d10fd19ada4c061280fd7fbe4cf5f6bf6b913268e8ebedfccea6ab5
|
||||
F ext/wasm/wasmfs.make 8aa7565f9de8dd3c291ad8c3ceb1a2c67a3eb31a8e531070b25c6c6b1f0278bf
|
||||
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
|
||||
F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
|
||||
F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0
|
||||
@ -2056,9 +2057,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||
P f710cce13577788cf3b95ed7089c3af2854271ff53f0a0b7b0619f315e331eff 6b826e700f6849eebfbba38e5948b96be245994e3e03ea30743114d3f5689c42
|
||||
R a5784f7e95f9f4ca471c3d20c7b7d6ea
|
||||
T +closed 6b826e700f6849eebfbba38e5948b96be245994e3e03ea30743114d3f5689c42 Closed\sby\sintegrate-merge.
|
||||
P 10c723d96d61d2e552ec1102563d58f1eb11bc3d30e03606fd8e0279c5a9043a
|
||||
R 222130501cabad70ae0d5e4c47519919
|
||||
U stephan
|
||||
Z 22024ccae1db68511ad1978bbc10208a
|
||||
Z bbe51f75fec2c52a531f67e9a6ac36f6
|
||||
# Remove this line to create a well-formed Fossil manifest.
|
||||
|
@ -1 +1 @@
|
||||
10c723d96d61d2e552ec1102563d58f1eb11bc3d30e03606fd8e0279c5a9043a
|
||||
2e783670e10b59e67c14b0db7f4803b41790cc7730de221d54fa2d4483cfba33
|
Loading…
x
Reference in New Issue
Block a user