]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Minor fiddle-related build restructuring to support upcoming development of the C...
authorstephan <stephan@noemail.net>
Sat, 21 May 2022 21:13:44 +0000 (21:13 +0000)
committerstephan <stephan@noemail.net>
Sat, 21 May 2022 21:13:44 +0000 (21:13 +0000)
FossilOrigin-Name: c7cfdd4c3682659352642461d3307bf8180703b121ec1802ba5881f8e1ef9809

Makefile.in
ext/fiddle/EXPORTED_FUNCTIONS [new file with mode: 0644]
ext/fiddle/EXPORTED_RUNTIME_METHODS [new file with mode: 0644]
ext/fiddle/fiddle-worker.js
ext/fiddle/fiddle.js
manifest
manifest.uuid

index 7a90bb5f0cadb459c70ecb8d8a79908e232f1fb7..7bc9694ce6263afd5d3c883661ba911b33738285 100644 (file)
@@ -1518,13 +1518,12 @@ sqlite3.dll: $(REAL_LIBOBJ) sqlite3.def
 # fiddle section
 #
 fiddle_dir = ext/fiddle
+fiddle_dir_abs = $(TOP)/$(fiddle_dir)
+# ^^^ some emcc opts require absolute paths
 fiddle_html = $(fiddle_dir)/fiddle.html
 fiddle_module_js = $(fiddle_dir)/fiddle-module.js
 fiddle_generated = $(fiddle_module_js) \
                    $(fiddle_dir)/fiddle-module.wasm
-# fiddle_dummy_exports = ,comma,list of func bound solely for
-# experimentation and testing purposes in the WASM build.
-fiddle_dummy_exports = ,_fiddle_experiment,_fiddle_the_db,_fiddle_db_arg
 clean-fiddle:
        rm -f $(fiddle_generated)
 clean: clean-fiddle
@@ -1535,11 +1534,12 @@ clean: clean-fiddle
 # --js-library $(fiddle_dir)/_dummylib.js
 emcc_opt = -Oz
 emcc_flags = $(emcc_opt) $(SHELL_OPT) \
-             -sEXPORTED_RUNTIME_METHODS=ccall,cwrap \
-             -sEXPORTED_FUNCTIONS=_fiddle_exec,_fiddle_interrupt$(fiddle_dummy_exports) \
+             -sEXPORTED_RUNTIME_METHODS=@$(fiddle_dir_abs)/EXPORTED_RUNTIME_METHODS \
+             -sEXPORTED_FUNCTIONS=@$(fiddle_dir_abs)/EXPORTED_FUNCTIONS \
              $(fiddle_cflags)
 # $(fiddle_cflags) is intended to be passed to make via the CLI in
 # order to override, e.g., -Ox for one-off builds.
-$(fiddle_module_js): Makefile sqlite3.c shell.c
+$(fiddle_module_js): Makefile sqlite3.c shell.c \
+    $(fiddle_dir)/EXPORTED_RUNTIME_METHODS $(fiddle_dir)/EXPORTED_FUNCTIONS
        emcc -o $@ $(emcc_flags) sqlite3.c shell.c
 fiddle: $(fiddle_module_js)
diff --git a/ext/fiddle/EXPORTED_FUNCTIONS b/ext/fiddle/EXPORTED_FUNCTIONS
new file mode 100644 (file)
index 0000000..7ec5df3
--- /dev/null
@@ -0,0 +1,5 @@
+_fiddle_exec
+_fiddle_interrupt
+_fiddle_experiment
+_fiddle_the_db
+_fiddle_db_arg
diff --git a/ext/fiddle/EXPORTED_RUNTIME_METHODS b/ext/fiddle/EXPORTED_RUNTIME_METHODS
new file mode 100644 (file)
index 0000000..a5b33fb
--- /dev/null
@@ -0,0 +1,6 @@
+ccall
+cwrap
+stackAlloc
+stackSave
+stackRestore
+UTF8ToString
index 5c6ed1d4832c5238715670bc8fe214465fe218d9..4f0f7e6c1387496b6ccd80ff26117771cb55ed76 100644 (file)
@@ -138,4 +138,48 @@ self.onmessage = function(ev){
 };
 self.Module.setStatus('Downloading...');
 importScripts('fiddle-module.js')
-/* loads module and notifies, via Module.setStatus(), when it's done loading. */;
+/* loads the wasm module and notifies, via Module.setStatus() and
+   Module.onRuntimeInitialized(), when it's done loading. */;
+
+Module["onRuntimeInitialized"] = function onRuntimeInitialized() {
+    /* For reference: sql.js does essentially everything we want and
+       it solves much of the wasm-related voodoo, but we'll need a
+       different structure because we want the db connection to run in
+       a worker thread and feed data back into the main
+       thread. Regardless of those differences, it makes a great point
+       of reference:
+
+       https://github.com/sql-js/sql.js
+
+       Some of the specific design goals here:
+
+       - Bind a low-level sqlite3 API which is close to the native one in
+         terms of usage.
+
+       - Create a higher-level one, more akin to sql.js and
+         node.js-style implementations. This one would speak directly
+         to the low-level API. This API could be used by clients who
+         import the low-level API directly into their main thread
+         (which we don't want to recommend but also don't want to
+         outright forbid).
+
+       - Create a second higher-level one which speaks to the
+         low-level API via worker messages. This one would be intended
+         for use in the main thread, talking to the low-level UI via
+         worker messages. Because workers have only a single message
+         channel, some acrobatics will be needed here to feed async
+         work results back into client-side callbacks (as those
+         callbacks cannot simply be passed to the worker). Exactly
+         what those acrobatics should look like is not yet entirely
+         clear and much experimentation is pending.
+
+    */
+    console.log('onRuntimeInitialized');
+
+    /*
+      TODO: create the main sqlite API here. We'll have another for
+      use in the main thread which will talk to this one via worker
+      messages.
+    */
+    
+}
index d91f98a6df3ebe9d72009bdd57c1b8d704162f0b..920491e9d39b29e474ed19f8d6c68fd4254ec71f 100644 (file)
             if(sql) SF.dbExec(sql);
         },false);
 
+        /** To be called immediately before work is sent to the
+            worker.  Updates some UI elements. The 'working'/'end'
+            event will apply the inverse, undoing the bits this
+            function does.  This impl is not in the 'working'/'start'
+            event handler because that event is given to us
+            asynchronously _after_ we need to have performed this
+            work.
+        */
         const preStartWork = function f(){
             if(!f._){
                 const title = E('title');
 
         SF.addMsgHandler('working',function f(ev){
             if('start' === ev.data){
-                //btnShellExec.innerText = "Working..."; // forces layout reflow (annoying)
+                /* See notes in preStartWork(). */
             }else if('end' === ev.data){
                 preStartWork._.pageTitle.innerText = preStartWork._.pageTitleOrig;
                 btnShellExec.innerText = preStartWork._.btnLabel;
             }
         });
 
-        /* For each checkboxes with data-csstgt, set up a handler which
+        /* For each checkbox with data-csstgt, set up a handler which
            toggles the given CSS class on the element matching
            E(data-csstgt). */
         EAll('input[type=checkbox][data-csstgt]')
index e97042e51b6953347bae21a75bc97be5eff95e66..8bc74a5e82390c88de547e33d96138b3260bc3c2 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,9 +1,9 @@
-C fiddle:\srefactor\sinto\smain\sthread\s(UI)\sand\sworker\sthread\s(wasm\smodule).\sAdded\sbits\sneeded\sto\ssupport\striggering\ssqlite3_interrupt()\sbut\sdo\snot\syet\shave\sa\ssecond\sSharedWorker\sto\stest\sit\swith.
-D 2022-05-21T14:19:05.384
+C Minor\sfiddle-related\sbuild\srestructuring\sto\ssupport\supcoming\sdevelopment\sof\sthe\sC-style\swasm\ssqlite3\sinterface,\splus\ssome\scommentary\sabout\sthe\splans\sand\sgoals\sfor\sthat.
+D 2022-05-21T21:13:44.686
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
-F Makefile.in 91cf7d4ee6e97dd84cd5cdf541df498e2df038dd83f4b30d1ed8b19fbee3bbdd
+F Makefile.in 62df7206650987c76f15b2e1c23830976858892815b9fc4d283c850628e0c724
 F Makefile.linux-gcc f609543700659711fbd230eced1f01353117621dccae7b9fb70daa64236c5241
 F Makefile.msc b28a8a7a977e7312f6859f560348e1eb110c21bd6cf9fab0d16537c0a514eef3
 F README.md 8b8df9ca852aeac4864eb1e400002633ee6db84065bd01b78c33817f97d31f5e
@@ -55,10 +55,12 @@ F ext/expert/expert1.test 3c642a4e7bbb14f21ddab595436fb465a4733f47a0fe5b2855e1d5
 F ext/expert/sqlite3expert.c 6ca30d73b9ed75bd56d6e0d7f2c962d2affaa72c505458619d0ff5d9cdfac204
 F ext/expert/sqlite3expert.h ca81efc2679a92373a13a3e76a6138d0310e32be53d6c3bfaedabd158ea8969b
 F ext/expert/test_expert.c d56c194b769bdc90cf829a14c9ecbc1edca9c850b837a4d0b13be14095c32a72
+F ext/fiddle/EXPORTED_FUNCTIONS 487fc7c83d45c48326f731c89162ed17ab15767e5efede8999d7d6c6e2d04c0f
+F ext/fiddle/EXPORTED_RUNTIME_METHODS 91d5dcb0168ee056fa1a340cb8ab3c23d922622f8dad39d28919dd8af2b3ade0
 F ext/fiddle/Makefile b2904d52c10a7c984cfab95c54fb85f33aa8a6b2653faf1527d08ce57114be46
-F ext/fiddle/fiddle-worker.js eae61419d5a7fcc9c4fcfda157ca0fe0a36b690b716899e5ec54a6d20c7037a9
-F ext/fiddle/fiddle.html f536878dbaa35ba4d9ad8c87dda7fb2ea5502fdd824577d83b2265d65b8ca4d1 w ext/fiddle/fiddle.in.html
-F ext/fiddle/fiddle.js 76a490d59bf0e09fb8a9610e6fa5c5032ee44680fbf9773b55974cb50d6dc3dc
+F ext/fiddle/fiddle-worker.js 28e50e021e84aaedf4cbdb2ef25e4183f1e5be8da7996a50fc8d0b5ed78fa00a
+F ext/fiddle/fiddle.html f536878dbaa35ba4d9ad8c87dda7fb2ea5502fdd824577d83b2265d65b8ca4d1
+F ext/fiddle/fiddle.js 9361d451845ac3c97c5492c24c8d18b8fe2deff07741462bdf8e39c375be25b2
 F ext/fiddle/index.md d9c1c308d8074341bc3b11d1d39073cd77754cb3ca9aeb949f23fdd8323d81cf
 F ext/fts1/README.txt 20ac73b006a70bcfd80069bdaf59214b6cf1db5e
 F ext/fts1/ft_hash.c 3927bd880e65329bdc6f506555b228b28924921b
@@ -1959,8 +1961,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 74abf03977e1ff8c6043defa38211cdfcfbba1979771b90ed9d3dbc99750fe9f
-R 209182df1b3b6bd2044e6acab7e588b4
+P 5ff3326856bc190cee15a5fca5ded89aacc4bf931a8df98726a872b310e2a4fc
+R 3ab23a2e617cc2f177067d0130c7a41f
 U stephan
-Z 8cd34b489ca85b418bdc02d766bcd2dc
+Z 0792a8e58fb57cfdbc5dcb7974589bd6
 # Remove this line to create a well-formed Fossil manifest.
index 06ad51f191e37c2831b924c468ac7b25c4d7be5f..b2ce3cbe35e0ba928da223511dedd8593623e159 100644 (file)
@@ -1 +1 @@
-5ff3326856bc190cee15a5fca5ded89aacc4bf931a8df98726a872b310e2a4fc
\ No newline at end of file
+c7cfdd4c3682659352642461d3307bf8180703b121ec1802ba5881f8e1ef9809
\ No newline at end of file