diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/wasm/GNUmakefile | 37 | ||||
-rw-r--r-- | ext/wasm/api/sqlite3-api-prologue.js | 2 | ||||
-rw-r--r-- | ext/wasm/demo-kvvfs1.html (renamed from ext/wasm/kvvfs1.html) | 4 | ||||
-rw-r--r-- | ext/wasm/demo-kvvfs1.js (renamed from ext/wasm/kvvfs1.js) | 9 | ||||
-rw-r--r-- | ext/wasm/index.html | 7 | ||||
-rw-r--r-- | ext/wasm/kvvfs.make | 112 | ||||
-rw-r--r-- | ext/wasm/speedtest1-wasmfs.html | 2 | ||||
-rw-r--r-- | ext/wasm/speedtest1-worker.html | 18 | ||||
-rw-r--r-- | ext/wasm/speedtest1-worker.js | 34 | ||||
-rw-r--r-- | ext/wasm/speedtest1.html | 56 |
10 files changed, 106 insertions, 175 deletions
diff --git a/ext/wasm/GNUmakefile b/ext/wasm/GNUmakefile index 730c31642..e1b6784d3 100644 --- a/ext/wasm/GNUmakefile +++ b/ext/wasm/GNUmakefile @@ -53,7 +53,8 @@ SQLITE_OPT = \ -DSQLITE_OMIT_UTF16 \ -DSQLITE_OMIT_SHARED_CACHE \ -DSQLITE_THREADSAFE=0 \ - -DSQLITE_TEMP_STORE=3 + -DSQLITE_TEMP_STORE=3 \ + -DSQLITE_OS_KV_OPTIONAL=1 #SQLITE_OPT += -DSQLITE_ENABLE_MEMSYS5 # ^^^ MEMSYS5 is hypothetically useful for non-Emscripten builds but # requires adding more infrastructure and fixing one spot in the @@ -192,16 +193,19 @@ emcc.cflags += -I. -I$(dir.top) # $(SQLITE_OPT) ######################################################################## # emcc flags specific to building the final .js/.wasm file... emcc.jsflags := -fPIC -emcc.jsflags := --minify 0 +emcc.jsflags += --minify 0 emcc.jsflags += --no-entry emcc.jsflags += -sMODULARIZE emcc.jsflags += -sSTRICT_JS emcc.jsflags += -sDYNAMIC_EXECUTION=0 emcc.jsflags += -sNO_POLYFILL emcc.jsflags += -sEXPORTED_FUNCTIONS=@$(dir.wasm)/EXPORTED_FUNCTIONS.api -emcc.jsflags += -sEXPORTED_RUNTIME_METHODS=FS,wasmMemory,allocateUTF8OnStack - # wasmMemory ==> required by our code for use with -sIMPORTED_MEMORY - # allocateUTF8OnStack => for kvvp internals +emcc.exportedRuntimeMethods := \ + -sEXPORTED_RUNTIME_METHODS=FS,wasmMemory,allocateUTF8OnStack + # FS ==> stdio/POSIX I/O proxies + # wasmMemory ==> required by our code for use with -sIMPORTED_MEMORY + # allocateUTF8OnStack => for kvvfs internals +emcc.jsflags += $(emcc.exportedRuntimeMethods) emcc.jsflags += -sUSE_CLOSURE_COMPILER=0 emcc.jsflags += -sIMPORTED_MEMORY emcc.environment := -sENVIRONMENT=web @@ -332,17 +336,23 @@ speedtest1-common.eflags := -g $(emcc_opt) speedtest1.eflags := speedtest1.eflags += -sENVIRONMENT=web speedtest1-common.eflags += -sINVOKE_RUN=0 -#speedtest1-common.eflags += --no-entry -speedtest1-common.eflags += -flto +speedtest1-common.eflags += --no-entry +#speedtest1-common.eflags += -flto speedtest1-common.eflags += -sABORTING_MALLOC speedtest1-common.eflags += -sINITIAL_MEMORY=128450560 speedtest1-common.eflags += -sSTRICT_JS speedtest1-common.eflags += -sMODULARIZE speedtest1-common.eflags += -Wno-limited-postlink-optimizations -speedtest1-common.eflags += -sEXPORTED_FUNCTIONS=_main,_malloc,_free +speedtest1-common.eflags += -sEXPORTED_FUNCTIONS=@$(dir.wasm)/EXPORTED_FUNCTIONS.speedtest1 +speedtest1-common.eflags += $(emcc.exportedRuntimeMethods) +speedtest1-common.eflags += -sALLOW_TABLE_GROWTH speedtest1-common.eflags += -sDYNAMIC_EXECUTION=0 speedtest1-common.eflags += --minify 0 speedtest1-common.eflags += -sEXPORT_NAME=sqlite3Speedtest1InitModule +speedtest1-common.eflags += --post-js=$(post-js.js) +ifneq (0,$(enable_bigint)) +speedtest1-common.eflags += -sWASM_BIGINT +endif 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 @@ -362,25 +372,29 @@ speedtest1.exit-runtime1 := -sEXIT_RUNTIME=1 # -sEXIT_RUNTIME=1 but we need EXIT_RUNTIME=0 for the worker-based app # which runs speedtest1 multiple times. +EXPORTED_FUNCTIONS.speedtest1: EXPORTED_FUNCTIONS.api + { echo _wasm_main; cat EXPORTED_FUNCTIONS.api; } > $@ +CLEAN_FILES += EXPORTED_FUNCTIONS.speedtest1 speedtest1.js := speedtest1.js speedtest1.wasm := $(subst .js,.wasm,$(speedtest1.js)) speedtest1.cflags := \ -I. -I.. -I$(dir.top) \ -DSQLITE_SPEEDTEST1_WASM - +speedtest1.cs := $(speedtest1.c) $(sqlite3-wasm.c) $(jaccwabyt_test.c) $(speedtest1.js): emcc.cflags+= # speedtest1 notes re. sqlite3-wasm.o vs sqlite3-wasm.c: building against # the latter (predictably) results in a slightly faster binary, but we're # close enough to the target speed requirements that the 500ms makes a # difference. -$(speedtest1.js): $(speedtest1.c) $(sqlite3-wasm.c) $(MAKEFILE) $(sqlite3.c) +$(speedtest1.js): $(MAKEFILE) $(speedtest1.cs) $(post-js.js) \ + EXPORTED_FUNCTIONS.speedtest1 @echo "Building $@ ..." $(emcc.bin) \ $(speedtest1.eflags) $(speedtest1-common.eflags) $(speedtest1.cflags) \ $(SQLITE_OPT) \ $(speedtest1.exit-runtime0) \ '-DSQLITE_DEFAULT_UNIX_VFS="unix-none"' \ - -o $@ $(speedtest1.c) $(sqlite3-wasm.c) -lm + -o $@ $(speedtest1.cs) -lm $(maybe-wasm-strip) $(speedtest1.wasm) ls -la $@ $(speedtest1.wasm) @@ -434,7 +448,6 @@ oz: ######################################################################## # Sub-makes... -include kvvfs.make ######################################################################## # Some platforms do not support the WASMFS build. Raspberry Pi OS is one diff --git a/ext/wasm/api/sqlite3-api-prologue.js b/ext/wasm/api/sqlite3-api-prologue.js index add8ad658..bd9779b7e 100644 --- a/ext/wasm/api/sqlite3-api-prologue.js +++ b/ext/wasm/api/sqlite3-api-prologue.js @@ -749,6 +749,8 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap( }; /** + Experimental and subject to change or removal. + Returns true if sqlite3.capi.sqlite3_web_persistent_dir() is a non-empty string and the given name starts with (that string + '/'), else returns false. diff --git a/ext/wasm/kvvfs1.html b/ext/wasm/demo-kvvfs1.html index 5d9f07795..caa3cdec8 100644 --- a/ext/wasm/kvvfs1.html +++ b/ext/wasm/demo-kvvfs1.html @@ -42,8 +42,8 @@ .toolbar > * { margin: 0.25em; } fieldset { border-radius: 0.5em; } </style> - <script src="sqlite3-kvvfs.js"></script> + <script src="sqlite3.js"></script> <script src="common/SqliteTestUtil.js"></script> - <script src="kvvfs1.js"></script> + <script src="demo-kvvfs1.js"></script> </body> </html> diff --git a/ext/wasm/kvvfs1.js b/ext/wasm/demo-kvvfs1.js index 57f990f16..a2cff8639 100644 --- a/ext/wasm/kvvfs1.js +++ b/ext/wasm/demo-kvvfs1.js @@ -10,8 +10,9 @@ *********************************************************************** - A basic test script for sqlite3-kvvfs.wasm. This file must be run in - main JS thread and sqlite3-kvvfs.js must have been loaded before it. + A basic test script for sqlite3.wasm with kvvfs support. This file + must be run in main JS thread and sqlite3.js must have been loaded + before it. */ 'use strict'; (function(){ @@ -39,7 +40,7 @@ const error = function(...args){ logHtml('error',...args); }; - + const runTests = function(Module){ //log("Module",Module); const sqlite3 = Module.sqlite3, @@ -49,7 +50,7 @@ log("Loaded module:",capi.sqlite3_libversion(), capi.sqlite3_sourceid()); T.assert( 0 !== capi.sqlite3_vfs_find(null) ); if(!capi.sqlite3_vfs_find('kvvfs')){ - warn("This build is not kvvfs-capable."); + error("This build is not kvvfs-capable."); return; } diff --git a/ext/wasm/index.html b/ext/wasm/index.html index 68b43d765..06dd0f31e 100644 --- a/ext/wasm/index.html +++ b/ext/wasm/index.html @@ -51,9 +51,10 @@ <li><a href='speedtest1.html'>speedtest1</a>: a main-thread WASM build of speedtest1.</li> <li><a href='speedtest1-worker.html'>speedtest1-worker</a>: an interactive Worker-thread variant of speedtest1.</li> <li><a href='speedtest1-wasmfs.html'>speedtest1-wasmfs</a>: a variant of speedtest1 built solely for the wasmfs/opfs feature.</li> - <li><a href='speedtest1-kvvfs.html'>speedtest1-kvvfs</a>: a variant of speedtest1 built solely for the kv-vfs feature.</li> - <li><a href='kvvfs1.html'>kvvfs1</a>: very basic demo of using the key-value vfs for storing - a persistent db in JS localStorage or sessionStorage.</li> + <li><a href='speedtest1.html?vfs=kvvfs'>speedtest1-kvvfs</a>: speedtest1 with the kvvfs.</li> + <li><a href='demo-kvvfs1.html'>demo-kvvfs1</a>: very basic + demo of using the key-value vfs for storing a persistent db + in JS localStorage or sessionStorage.</li> <li><a href='scratchpad-wasmfs-main.html'>scratchpad-wasmfs-main</a>: experimenting with WASMFS/OPFS-based persistence. Maintenance reminder: we cannot currently (2022-09-15) load WASMFS in a diff --git a/ext/wasm/kvvfs.make b/ext/wasm/kvvfs.make deleted file mode 100644 index d9a953956..000000000 --- a/ext/wasm/kvvfs.make +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/make -#^^^^ help emacs select makefile mode -# -# This is a sub-make for building a standalone kvvfs-based -# sqlite3.wasm. It is intended to be "include"d from the main -# GNUMakefile. -# -# Notable potential TODOs: -# -# - Trim down a custom sqlite3-api.js for this build. We can elimate -# the jaccwabyt dependency, for example, because this build won't -# make use of the VFS bits. Similarly, we can eliminate or replace -# parts of the OO1 API, or provide a related API which manages -# singletons of the localStorage/sessionStorage instances. -# -######################################################################## -MAKEFILE.kvvfs := $(lastword $(MAKEFILE_LIST)) - -kvvfs.js := sqlite3-kvvfs.js -kvvfs.wasm := sqlite3-kvvfs.wasm -kvvfs.wasm.c := $(dir.api)/sqlite3-wasm.c - -CLEAN_FILES += $(kvvfs.js) $(kvvfs.wasm) - -######################################################################## -# emcc flags for .c/.o/.wasm. -kvvfs.flags = -#kvvfs.flags += -v # _very_ loud but also informative about what it's doing - -######################################################################## -# emcc flags for .c/.o. -kvvfs.cflags := -kvvfs.cflags += -std=c99 -fPIC -g -kvvfs.cflags += -I. -I$(dir.top) -kvvfs.cflags += -DSQLITE_OS_KV=1 $(SQLITE_OPT) - -kvvfs.extra.c := -ifeq (1,1) - # To get testing1.js to run with $(kvvfs.js) we need... - kvvfs.extra.c += $(jaccwabyt_test.c) -endif - -######################################################################## -# emcc flags specific to building the final .js/.wasm file... -kvvfs.jsflags := -fPIC -kvvfs.jsflags += --no-entry -kvvfs.jsflags += --minify 0 -kvvfs.jsflags += -sENVIRONMENT=web -kvvfs.jsflags += -sMODULARIZE -kvvfs.jsflags += -sSTRICT_JS -kvvfs.jsflags += -sDYNAMIC_EXECUTION=0 -kvvfs.jsflags += -sNO_POLYFILL -ifeq (,$(kvvfs.extra.c)) - kvvfs.jsflags += -sEXPORTED_FUNCTIONS=@$(dir.api)/EXPORTED_FUNCTIONS.sqlite3-api -else - # need more exports for jaccwabyt test code... - kvvfs.jsflags += -sEXPORTED_FUNCTIONS=@$(dir.wasm)/EXPORTED_FUNCTIONS.api -endif -kvvfs.jsflags += -sEXPORTED_RUNTIME_METHODS=FS,wasmMemory,allocateUTF8OnStack - # wasmMemory ==> for -sIMPORTED_MEMORY - # allocateUTF8OnStack ==> kvvfs internals -kvvfs.jsflags += -sUSE_CLOSURE_COMPILER=0 -kvvfs.jsflags += -sIMPORTED_MEMORY -#kvvfs.jsflags += -sINITIAL_MEMORY=13107200 -#kvvfs.jsflags += -sTOTAL_STACK=4194304 -kvvfs.jsflags += -sEXPORT_NAME=sqlite3InitModule -kvvfs.jsflags += -sGLOBAL_BASE=4096 # HYPOTHETICALLY keep func table indexes from overlapping w/ heap addr. -kvvfs.jsflags += --post-js=$(post-js.js) -#kvvfs.jsflags += -sFILESYSTEM=0 # only for experimentation. sqlite3 needs the FS API -# Perhaps the kvvfs build doesn't? -#kvvfs.jsflags += -sABORTING_MALLOC -kvvfs.jsflags += -sALLOW_MEMORY_GROWTH -kvvfs.jsflags += -sALLOW_TABLE_GROWTH -kvvfs.jsflags += -Wno-limited-postlink-optimizations -# ^^^^^ it likes to warn when we have "limited optimizations" via the -g3 flag. -kvvfs.jsflags += -sERROR_ON_UNDEFINED_SYMBOLS=0 -kvvfs.jsflags += -sLLD_REPORT_UNDEFINED -#kvvfs.jsflags += --import-undefined -kvvfs.jsflags += -sMEMORY64=0 -ifneq (0,$(enable_bigint)) -kvvfs.jsflags += -sWASM_BIGINT -endif -$(kvvfs.js): $(kvvfs.wasm.c) $(sqlite3.c) $(kvvfs.extra.c) \ - EXPORTED_FUNCTIONS.api $(MAKEFILE) $(MAKEFILE.kvvfs) \ - $(post-js.js) - @echo "Building $@ ..." - $(emcc.bin) -o $@ $(emcc_opt) $(emcc.flags) \ - $(SQLITE_OPT) \ - $(kvvfs.cflags) $(kvvfs.jsflags) $(kvvfs.wasm.c) $(kvvfs.extra.c) - chmod -x $(kvvfs.wasm) - $(maybe-wasm-strip) $(kvvfs.wasm) - @ls -la $@ $(kvvfs.wasm) - -kvvfs: $(kvvfs.js) -all: kvvfs - -######################################################################## -# speedtest1-kvvfs -speedtest1-kvvfs.js := speedtest1-kvvfs.js -speedtest1-kvvfs.wasm := speedtest1-kvvfs.wasm -CLEAN_FILES += $(speedtest1-kvvfs.js) $(speedtest1-kvvfs.wasm) -$(speedtest1-kvvfs.js): $(speedtest1.c) $(sqlite3-wasm.c) $(sqlite3.c) $(MAKEFILE.kvvfs) - $(emcc.bin) \ - $(speedtest1.eflags) $(speedtest1-common.eflags) $(speedtest1.cflags) \ - $(SQLITE_OPT) \ - $(speedtest1.exit-runtime1) \ - $(kvvfs.cflags) \ - -o $@ $(speedtest1.c) $(sqlite3-wasm.c) -lm - $(maybe-wasm-strip) $(speedtest1-kvvfs.wasm) - ls -la $@ $(speedtest1-kvvfs.wasm) - -speedtest1: $(speedtest1-kvvfs.js) diff --git a/ext/wasm/speedtest1-wasmfs.html b/ext/wasm/speedtest1-wasmfs.html index 151ced89a..c8e93f6dc 100644 --- a/ext/wasm/speedtest1-wasmfs.html +++ b/ext/wasm/speedtest1-wasmfs.html @@ -139,7 +139,7 @@ "Give it time..."); logList.length = 0; setTimeout(function(){ - wasm.xCall('__main_argc_argv', argv.length, + wasm.xCall('wasm_main', argv.length, wasm.scopedAllocMainArgv(argv)); wasm.scopedAllocPop(scope); if(pDir) unlink(dbFile); diff --git a/ext/wasm/speedtest1-worker.html b/ext/wasm/speedtest1-worker.html index 3c9740286..bc3f10a6f 100644 --- a/ext/wasm/speedtest1-worker.html +++ b/ext/wasm/speedtest1-worker.html @@ -30,7 +30,9 @@ <div id='toolbar'> <div id='toolbar-select'> <select id='select-flags' size='10' multiple></select> - <div>TODO? Options which require values are not represented here.</div> + <div>The following flags can be passed as URL parameters: + vfs=NAME, size=N + </div> </div> <div class='toolbar-inner-vertical'> <div id='toolbar-selected-flags'></div> @@ -124,6 +126,7 @@ justify-content: flex-start; } </style> + <script src="common/SqliteTestUtil.js"></script> <script>(function(){ 'use strict'; const E = (sel)=>document.querySelector(sel); @@ -167,7 +170,7 @@ return str+a.join(' '); }; - const W = new Worker("speedtest1-worker.js"); + const W = new Worker("speedtest1-worker.js"+self.location.search); const mPost = function(msgType,payload){ W.postMessage({type: msgType, data: payload}); }; @@ -177,7 +180,16 @@ const eLinkMainThread = E('#link-main-thread'); const eLinkWasmfs = E('#link-wasmfs'); const eLinkKvvfs = E('#link-kvvfs'); - const getSelectedFlags = ()=>Array.prototype.map.call(eFlags.selectedOptions, (v)=>v.value); + const urlParams = new URL(self.location.href).searchParams; + const getSelectedFlags = ()=>{ + const f = Array.prototype.map.call(eFlags.selectedOptions, (v)=>v.value); + [ + 'size', 'vfs' + ].forEach(function(k){ + if(urlParams.has(k)) f.push('--'+k, urlParams.get(k)); + }); + return f; + }; const updateSelectedFlags = function(){ eSelectedFlags.innerText = ''; const flags = getSelectedFlags(); diff --git a/ext/wasm/speedtest1-worker.js b/ext/wasm/speedtest1-worker.js index b954f9939..fe43e5646 100644 --- a/ext/wasm/speedtest1-worker.js +++ b/ext/wasm/speedtest1-worker.js @@ -6,7 +6,7 @@ returns the name of the dir on which OPFS is mounted, else it returns an empty string. */ - const opfsDir = function f(wasmUtil){ + const wasmfsDir = function f(wasmUtil){ if(undefined !== f._) return f._; const pdir = '/persistent'; if( !self.FileSystemHandle @@ -27,7 +27,7 @@ return f._ = ""; } }; - opfsDir._ = undefined; + wasmfsDir._ = undefined; const mPost = function(msgType,payload){ postMessage({type: msgType, data: payload}); @@ -42,7 +42,7 @@ }; const log = (...args)=>logMsg('stdout',args); const logErr = (...args)=>logMsg('stderr',args); - + const runSpeedtest = function(cliFlagsArray){ const scope = App.wasm.scopedAllocPush(); const dbFile = 0 ? "" : App.pDir+"/speedtest1.db"; @@ -52,7 +52,7 @@ ]; App.logBuffer.length = 0; mPost('run-start', [...argv]); - App.wasm.xCall('__main_argc_argv', argv.length, + App.wasm.xCall('wasm_main', argv.length, App.wasm.scopedAllocMainArgv(argv)); }catch(e){ mPost('error',e.message); @@ -79,20 +79,18 @@ printErr: logErr, setStatus: (text)=>mPost('load-status',text) }; - self.sqlite3Speedtest1InitModule(EmscriptenModule).then(function(EmscriptenModule){ + self.sqlite3Speedtest1InitModule(EmscriptenModule).then(function(EModule){ + const S = EModule.sqlite3; log("Module inited."); - App.wasm = { - exports: EmscriptenModule.asm, - alloc: (n)=>EmscriptenModule._malloc(n), - dealloc: (m)=>EmscriptenModule._free(m), - memory: EmscriptenModule.asm.memory || EmscriptenModule.wasmMemory - }; - //console.debug('wasm =',wasm); - self.WhWasmUtilInstaller(App.wasm); - App.unlink = App.wasm.xWrap("sqlite3_wasm_vfs_unlink", "int", ["string"]); - App.pDir = opfsDir(App.wasm); - if(App.pDir) log("Persistent storage:",pDir); - else log("Using transient storage."); - mPost('ready',true); + return S.installOpfsVfs() + .catch((e)=>console.warn(e.message)) + .then(()=>{ + App.unlink = S.capi.wasm.xWrap("sqlite3_wasm_vfs_unlink", "int", ["string"]); + App.pDir = wasmfsDir(S.wasm); + App.wasm = S.capi.wasm; + //if(App.pDir) log("Persistent storage:",pDir); + //else log("Using transient storage."); + mPost('ready',true); + }); }); })(); diff --git a/ext/wasm/speedtest1.html b/ext/wasm/speedtest1.html index 172266aa6..aca0734cf 100644 --- a/ext/wasm/speedtest1.html +++ b/ext/wasm/speedtest1.html @@ -45,7 +45,7 @@ returns the name of the dir on which OPFS is mounted, else it returns an empty string. */ - const opfsDir = function f(wasmUtil){ + const wasmfsDir = function f(wasmUtil){ if(undefined !== f._) return f._; const pdir = '/persistent'; if( !self.FileSystemHandle @@ -66,7 +66,7 @@ return f._ = ""; } }; - opfsDir._ = undefined; + wasmfsDir._ = undefined; const eOut = document.querySelector('#test-output'); const log2 = function(cssClass,...args){ @@ -92,28 +92,41 @@ logList.push('ERROR: '+args.join(' ')); }; - const runTests = function(EmscriptenModule){ - console.log("Module inited.",EmscriptenModule); - const wasm = { - exports: EmscriptenModule.asm, - alloc: (n)=>EmscriptenModule._malloc(n), - dealloc: (m)=>EmscriptenModule._free(m), - memory: EmscriptenModule.asm.memory || EmscriptenModule.wasmMemory - }; - //console.debug('wasm =',wasm); - self.WhWasmUtilInstaller(wasm); + const runTests = function(sqlite3){ + const capi = sqlite3.capi, wasm = capi.wasm; + //console.debug('sqlite3 =',sqlite3); const unlink = wasm.xWrap("sqlite3_wasm_vfs_unlink", "int", ["string"]); - const pDir = opfsDir(wasm); + const pDir = wasmfsDir(wasm); if(pDir){ console.warn("Persistent storage:",pDir); } const scope = wasm.scopedAllocPush(); - const dbFile = 0 ? "" : pDir+"/speedtest1.db"; - const urlArgs = self.SqliteTestUtil.processUrlArgs(); + let dbFile = pDir+"/speedtest1.db"; + const urlParams = self.SqliteTestUtil.processUrlArgs(); const argv = ["speedtest1"]; - if(urlArgs.flags){ + if('string'===typeof urlParams.vfs){ + if(!capi.sqlite3_vfs_find(urlParams.vfs)){ + log2('error',"Unknown VFS:",urlParams.vfs); + return; + } + argv.push("--vfs", urlParams.vfs); + log2('',"Using VFS:",urlParams.vfs); + if('kvvfs' === urlParams.vfs){ + urlParams.size = 1; + dbFile = 'session'; + log2('',"kvvfs VFS: forcing --size 1 and filename 'session'"); + capi.sqlite3_web_kvvfs_clear('session'); + } + } + [ + 'size' + ].forEach(function(k){ + const v = urlParams[k]; + if(v) argv.push('--'+k, urlParams[k]); + }); + if(urlParams.flags){ // transform flags=a,b,c to ["--a", "--b", "--c"] - argv.push(...(urlArgs.flags.split(',').map((v)=>'--'+v))); + argv.push(...(urlParams.flags.split(',').map((v)=>'--'+v))); }else{ argv.push( "--singlethread", @@ -134,7 +147,7 @@ "Give it time..."); logList.length = 0; setTimeout(function(){ - wasm.xCall('__main_argc_argv', argv.length, + wasm.xCall('wasm_main', argv.length, wasm.scopedAllocMainArgv(argv)); wasm.scopedAllocPop(scope); if(pDir) unlink(dbFile); @@ -145,8 +158,11 @@ self.sqlite3TestModule.print = log; self.sqlite3TestModule.printErr = logErr; - sqlite3Speedtest1InitModule(self.sqlite3TestModule).then(function(M){ - setTimeout(()=>runTests(M), 100); + sqlite3Speedtest1InitModule(self.sqlite3TestModule) + .then((EmscriptenModule)=>{ + return EmscriptenModule.sqlite3.installOpfsVfs() + .catch((e)=>{console.warn(e.message)}) + .then(()=>runTests(EmscriptenModule.sqlite3)); }); })(); </script> |