From: stephan Date: Wed, 10 Aug 2022 09:36:10 +0000 (+0000) Subject: wasm/fiddle refactoring part 1 of N: move fiddle app from ext/fiddle to ext/wasm... X-Git-Tag: version-3.40.0~246^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8c3b7501af8fa321a1cdf3194d91603d0cbc6394;p=thirdparty%2Fsqlite.git wasm/fiddle refactoring part 1 of N: move fiddle app from ext/fiddle to ext/wasm/fiddle, which only contains files intended to be pushed to the live site. Disabled build of the non-fiddle wasm parts, pending a later step of the refactoring. FossilOrigin-Name: fb4eb93080288b60815be14afd7ddbbca470ce363fa3735352ea9a558fef583e --- diff --git a/Makefile.in b/Makefile.in index cfa81cacf9..3b9a7b56bc 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1524,13 +1524,12 @@ sqlite3.dll: $(REAL_LIBOBJ) sqlite3.def # # fiddle/wasm section # -fiddle_dir = ext/fiddle -fiddle_dir_abs = $(TOP)/$(fiddle_dir) +wasm_dir = ext/wasm +wasm_dir_abs = $(TOP)/ext/wasm # ^^^ some emcc opts require absolute paths -fiddle_html = $(fiddle_dir)/fiddle.html +fiddle_dir = $(wasm_dir)/fiddle +fiddle_dir_abs = $(TOP)/$(fiddle_dir) fiddle_module_js = $(fiddle_dir)/fiddle-module.js -sqlite3_wasm_js = $(fiddle_dir)/sqlite3.js -sqlite3_wasm = $(fiddle_dir)/sqlite3.wasm #emcc_opt = -O0 #emcc_opt = -O1 #emcc_opt = -O2 @@ -1542,54 +1541,34 @@ emcc_flags = $(emcc_opt) \ -sSTRICT_JS \ -sENVIRONMENT=web \ -sMODULARIZE \ - -sEXPORTED_RUNTIME_METHODS=@$(fiddle_dir_abs)/EXPORTED_RUNTIME_METHODS \ + -sEXPORTED_RUNTIME_METHODS=@$(wasm_dir_abs)/EXPORTED_RUNTIME_METHODS.fiddle \ -sDYNAMIC_EXECUTION=0 \ --minify 0 \ - -I. $(SHELL_OPT) + -I. $(SHELL_OPT) \ + -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_UTF16 -DSQLITE_OMIT_DEPRECATED $(fiddle_module_js): Makefile sqlite3.c shell.c \ - $(fiddle_dir)/EXPORTED_RUNTIME_METHODS \ - $(fiddle_dir)/EXPORTED_FUNCTIONS.fiddle + $(wasm_dir)/EXPORTED_RUNTIME_METHODS.fiddle \ + $(wasm_dir)/EXPORTED_FUNCTIONS.fiddle emcc -o $@ $(emcc_flags) \ -sEXPORT_NAME=initFiddleModule \ - -sEXPORTED_FUNCTIONS=@$(fiddle_dir_abs)/EXPORTED_FUNCTIONS.fiddle \ + -sEXPORTED_FUNCTIONS=@$(wasm_dir_abs)/EXPORTED_FUNCTIONS.fiddle \ -DSQLITE_SHELL_FIDDLE \ sqlite3.c shell.c gzip < $@ > $@.gz gzip < $(fiddle_dir)/fiddle-module.wasm > $(fiddle_dir)/fiddle-module.wasm.gz -$(sqlite3_wasm_js): Makefile sqlite3.c $(fiddle_dir)/wasm_util.c \ - $(fiddle_dir)/sqlite3-api.js \ - $(fiddle_dir)/EXPORTED_RUNTIME_METHODS \ - $(fiddle_dir)/EXPORTED_FUNCTIONS.sqlite3-api - emcc -o $@ $(emcc_flags) \ - -sEXPORT_NAME=sqlite3InitModule \ - -sEXPORTED_FUNCTIONS=@$(fiddle_dir_abs)/EXPORTED_FUNCTIONS.sqlite3-api \ - --post-js=$(fiddle_dir)/sqlite3-api.js \ - --no-entry \ - sqlite3.c $(fiddle_dir)/wasm_util.c - gzip < $@ > $@.gz - gzip < $(sqlite3_wasm) > $(sqlite3_wasm).gz - gzip < $(fiddle_dir)/sqlite3-api.js > $(fiddle_dir)/sqlite3-api.js.gz $(fiddle_dir)/fiddle.js.gz: $(fiddle_dir)/fiddle.js gzip < $< > $@ -$(fiddle_dir)/sqlite3-api.js.gz: $(fiddle_dir)/sqlite3-api.js - gzip < $< > $@ fiddle_generated = $(fiddle_module_js) $(fiddle_module_js).gz \ $(fiddle_dir)/fiddle-module.wasm \ $(fiddle_dir)/fiddle-module.wasm.gz \ $(fiddle_dir)/fiddle.js.gz -sqlite3_wasm_generated = \ - $(sqlite3_wasm) $(sqlite3_wasm).gz \ - $(sqlite3_wasm_js) $(sqlite3_wasm_js).gz \ - $(fiddle_dir)/sqlite3.js.gz \ - $(fiddle_dir)/sqlite3-api.js.gz clean-wasm: - rm -f $(fiddle_generated) $(sqlite3_wasm_generated) + rm -f $(fiddle_generated) clean: clean-wasm fiddle: $(fiddle_module_js) $(fiddle_dir)/fiddle.js.gz -sqlite3-wasm: $(sqlite3_wasm_js) -wasm: fiddle sqlite3-wasm +wasm: fiddle ######################################################################## # Explanation of the emcc build flags follows. Full docs for these can # be found at: diff --git a/ext/fiddle/EXPORTED_FUNCTIONS.fiddle b/ext/wasm/EXPORTED_FUNCTIONS.fiddle similarity index 100% rename from ext/fiddle/EXPORTED_FUNCTIONS.fiddle rename to ext/wasm/EXPORTED_FUNCTIONS.fiddle diff --git a/ext/fiddle/EXPORTED_RUNTIME_METHODS b/ext/wasm/EXPORTED_RUNTIME_METHODS.fiddle similarity index 100% rename from ext/fiddle/EXPORTED_RUNTIME_METHODS rename to ext/wasm/EXPORTED_RUNTIME_METHODS.fiddle diff --git a/ext/fiddle/Makefile b/ext/wasm/GNUmakefile similarity index 77% rename from ext/fiddle/Makefile rename to ext/wasm/GNUmakefile index b274574d7f..99a1c5b031 100644 --- a/ext/fiddle/Makefile +++ b/ext/wasm/GNUmakefile @@ -6,11 +6,6 @@ default: clean: $(MAKE) -C ../../ clean-wasm -fiddle_files = emscripten.css fiddle.html \ - fiddle.js fiddle-module.js \ - fiddle-module.wasm fiddle-worker.js \ - $(wildcard *.wasm.gz) $(wildcard *.js.gz) - # fiddle_remote is the remote destination for the fiddle app. It # must be a [user@]HOST:/path for rsync. # Note that the target "should probably" contain a symlink of @@ -31,4 +26,4 @@ push-fiddle: $(fiddle_files) echo "fiddle_remote must be a [user@]HOST:/path for rsync"; \ exit 1; \ fi - rsync -va $(fiddle_files) $(fiddle_remote) + rsync -va fiddle/ $(fiddle_remote) diff --git a/ext/fiddle/index.md b/ext/wasm/README.md similarity index 78% rename from ext/fiddle/index.md rename to ext/wasm/README.md index 9d1f8d83ea..1702e1f427 100644 --- a/ext/fiddle/index.md +++ b/ext/wasm/README.md @@ -1,7 +1,5 @@ -This directory houses a "fiddle"-style application which embeds a -[Web Assembly (WASM)](https://en.wikipedia.org/wiki/WebAssembly) -build of the sqlite3 shell app into an HTML page, effectively running -the shell in a client-side browser. +This directory houses the [Web Assembly (WASM)](https://en.wikipedia.org/wiki/WebAssembly) +parts of the sqlite3 build. It requires [emscripten][] and that the build environment be set up for emscripten. A mini-HOWTO for setting that up follows... @@ -22,8 +20,15 @@ $ ./emsdk install latest $ ./emsdk activate latest ``` -Those parts only need to be run once. The following needs to be run for each -shell instance which needs the `emcc` compiler: +Those parts only need to be run once, but the SDK can be updated using: + +``` +$ git pull +$ ./emsdk activate latest +``` + +The following needs to be run for each shell instance which needs the +`emcc` compiler: ``` # Activate PATH and other environment variables in the current terminal: @@ -33,8 +38,11 @@ $ which emcc /path/to/emsdk/upstream/emscripten/emcc ``` -That `env` script needs to be sourced for building this application from the -top of the sqlite3 build tree: +Optionally, add that to your login shell's resource file (`~/.bashrc` +or equivalent). + +That `env` script needs to be sourced for building this application +from the top of the sqlite3 build tree: ``` $ make fiddle @@ -43,29 +51,30 @@ $ make fiddle Or: ``` -$ cd ext/fiddle +$ cd ext/wasm $ make ``` That will generate the fiddle application under -[ext/fiddle](/dir/ext/fiddle), as `fiddle.html`. That application +[ext/fiddle](/dir/ext/wasm/fiddle), as `fiddle.html`. That application cannot, due to XMLHttpRequest security limitations, run if the HTML file is opened directly in the browser (i.e. if it is opened using a `file://` URL), so it needs to be served via an HTTP server. For example, using [althttpd][]: ``` -$ cd ext/fiddle -$ althttpd -debug 1 -jail 0 -port 9090 -root . +$ cd ext/wasm/fiddle +$ althttpd -page fiddle.html ``` -Then browse to `http://localhost:9090/fiddle.html`. +That will open the system's browser and run the fiddle app's page. Note that when serving this app via [althttpd][], it must be a version from 2022-05-17 or newer so that it recognizes the `.wasm` file extension and responds with the mimetype `application/wasm`, as the WASM loader is pedantic about that detail. + # Known Quirks and Limitations Some "impedence mismatch" between C and WASM/JavaScript is to be diff --git a/ext/fiddle/emscripten.css b/ext/wasm/fiddle/emscripten.css similarity index 100% rename from ext/fiddle/emscripten.css rename to ext/wasm/fiddle/emscripten.css diff --git a/ext/fiddle/fiddle-worker.js b/ext/wasm/fiddle/fiddle-worker.js similarity index 100% rename from ext/fiddle/fiddle-worker.js rename to ext/wasm/fiddle/fiddle-worker.js diff --git a/ext/fiddle/fiddle.html b/ext/wasm/fiddle/fiddle.html similarity index 100% rename from ext/fiddle/fiddle.html rename to ext/wasm/fiddle/fiddle.html diff --git a/ext/fiddle/fiddle.js b/ext/wasm/fiddle/fiddle.js similarity index 100% rename from ext/fiddle/fiddle.js rename to ext/wasm/fiddle/fiddle.js diff --git a/manifest b/manifest index d312d2b6ed..913da59c3c 100644 --- a/manifest +++ b/manifest @@ -1,9 +1,9 @@ -C Merged\sin\strunk\sfor\spending\stree\srefactoring. -D 2022-08-10T07:58:57.865 +C wasm/fiddle\srefactoring\spart\s1\sof\sN:\smove\sfiddle\sapp\sfrom\sext/fiddle\sto\sext/wasm/fiddle,\swhich\sonly\scontains\sfiles\sintended\sto\sbe\spushed\sto\sthe\slive\ssite.\sDisabled\sbuild\sof\sthe\snon-fiddle\swasm\sparts,\spending\sa\slater\sstep\sof\sthe\srefactoring. +D 2022-08-10T09:36:10.232 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 -F Makefile.in efc6e3d5c558ef5abb20cad20cf96bcecb86755ce45a858e6c64bfbd9749fd30 +F Makefile.in a77d419b19eb2f806109ae2d0b81abb39a3a8659b00e528da7e27bd95c7e29fd F Makefile.linux-gcc f609543700659711fbd230eced1f01353117621dccae7b9fb70daa64236c5241 F Makefile.msc d547a2fdba38a1c6cd1954977d0b0cc017f5f8fbfbc65287bf8d335808938016 F README.md 8b8df9ca852aeac4864eb1e400002633ee6db84065bd01b78c33817f97d31f5e @@ -55,16 +55,8 @@ 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.fiddle 7fb73f7150ab79d83bb45a67d257553c905c78cd3d693101699243f36c5ae6c3 F ext/fiddle/EXPORTED_FUNCTIONS.sqlite3-api 356c356931b58eccf68367120f304db43ab6c2ef2f62f17f12f5a99737b43c38 -F ext/fiddle/EXPORTED_RUNTIME_METHODS a004bd5eeeda6d3b28d16779b7f1a80305bfe009dfc7f0721b042967f0d39d02 -F ext/fiddle/Makefile 1d303ee6449be3bab67f4b1456bacf903eb1c5e6d40d3b391651d7e0879d891a F ext/fiddle/SqliteTestUtil.js 2e87d424b12674476bdf8139934dcacc3ff8a7a5f5ff4392ba5e5a8d8cee9fbd -F ext/fiddle/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f -F ext/fiddle/fiddle-worker.js 88bc2193a6cb6a3f04d8911bed50a4401fe6f277de7a71ba833865ab64a1b4ae -F ext/fiddle/fiddle.html 550c5aafce40bd218de9bf26192749f69f9b10bc379423ecd2e162bcef885c08 -F ext/fiddle/fiddle.js 812f9954cc7c4b191884ad171f36fcf2d0112d0a7ecfdf6087896833a0c079a8 -F ext/fiddle/index.md d9c1c308d8074341bc3b11d1d39073cd77754cb3ca9aeb949f23fdd8323d81cf F ext/fiddle/sqlite3-api.js 5a6cc120f3eeaab65e49bcdab234e83d83c67440e04bd97191bdc004ac0cda35 F ext/fiddle/sqlite3-worker.js 50b7a9ce14c8fae0af965e35605fe12cafb79c1e01e99216d8110d8b02fbf4b5 F ext/fiddle/testing.css 750572dded671d2cf142bbcb27af5542522ac08db128245d0b9fe410aa1d7f2a @@ -490,6 +482,14 @@ F ext/session/test_session.c f433f68a8a8c64b0f5bc74dc725078f12483301ad4ae8375205 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 7fb73f7150ab79d83bb45a67d257553c905c78cd3d693101699243f36c5ae6c3 w ext/fiddle/EXPORTED_FUNCTIONS.fiddle +F ext/wasm/EXPORTED_RUNTIME_METHODS.fiddle a004bd5eeeda6d3b28d16779b7f1a80305bfe009dfc7f0721b042967f0d39d02 w ext/fiddle/EXPORTED_RUNTIME_METHODS +F ext/wasm/GNUmakefile c71257754d3f69ed19308e91c2829be98532aa27ba1feaefe53d2bf17c047dc8 w ext/fiddle/Makefile +F ext/wasm/README.md 4b00ae7c7d93c4591251245f0996a319e2651361013c98d2efb0b026771b7331 w ext/fiddle/index.md +F ext/wasm/fiddle/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f w ext/fiddle/emscripten.css +F ext/wasm/fiddle/fiddle-worker.js 88bc2193a6cb6a3f04d8911bed50a4401fe6f277de7a71ba833865ab64a1b4ae w ext/fiddle/fiddle-worker.js +F ext/wasm/fiddle/fiddle.html 550c5aafce40bd218de9bf26192749f69f9b10bc379423ecd2e162bcef885c08 w ext/fiddle/fiddle.html +F ext/wasm/fiddle/fiddle.js 812f9954cc7c4b191884ad171f36fcf2d0112d0a7ecfdf6087896833a0c079a8 w ext/fiddle/fiddle.js F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8 F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60 @@ -1983,8 +1983,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 d662796c658997be13fdc3b77ad97101b9513da53fd0b824d7a4050cac3f7eba f963c2523872b59b8a7a14971f703f2eb0d021501b288597a958f6596885d0de -R 32a46e2655367bd84dca87f379c92af7 +P c3a3cb0103126210692bbeb703e7b8793974042e1fc2473be6d0a0d9b07d5770 +R 7933790875a6b3f54b530ce22fe4d8f0 U stephan -Z ae9739b616b9feb7c2ad647c284be5e7 +Z f8f037574e62bc4aeafe6c26802ca165 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index b2f40f826a..1031463cb5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c3a3cb0103126210692bbeb703e7b8793974042e1fc2473be6d0a0d9b07d5770 \ No newline at end of file +fb4eb93080288b60815be14afd7ddbbca470ce363fa3735352ea9a558fef583e \ No newline at end of file