1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-29 08:01:23 +03:00

More work on the minimal-mode wasm build (now 603kb uncompressed). Remove the hard-coded feature-enable flags from sqlite3-wasm.c and rely on the build to provide them. Some wasm build cleanup, but attempts to completely overhaul it have been thwarted by my inability to make script-generated makefile code more legible/maintainable than the current eval spaghetti.

FossilOrigin-Name: b029c4067943e366a9b25b8303136fab10822bd771ea4658ac4cd716ff4a0d8f
This commit is contained in:
stephan
2024-07-25 14:00:26 +00:00
parent cc65612e35
commit 520d1a8486
9 changed files with 120 additions and 117 deletions

View File

@ -15,8 +15,9 @@
# by the target name. Rebuild is necessary for all components to get # by the target name. Rebuild is necessary for all components to get
# the desired optimization level. # the desired optimization level.
# #
# quick, q = do just a minimal build (sqlite3.js/wasm, tester1) for # quick, q = do just build the essentials for testing
# faster development-mode turnaround. # (sqlite3.js/wasm, tester1) for faster development-mode
# turnaround.
# #
# dist = create end user deliverables. Add dist.build=oX to build # dist = create end user deliverables. Add dist.build=oX to build
# with a specific optimization level, where oX is one of the # with a specific optimization level, where oX is one of the
@ -45,16 +46,24 @@
# related to each build variant $(JS_BUILD_MODES). (Update: an # related to each build variant $(JS_BUILD_MODES). (Update: an
# external script was attempted but generating properly-escaped # external script was attempted but generating properly-escaped
# makefile code from within a shell script is even less legible # makefile code from within a shell script is even less legible
# than the $(eval) indirection going on in this file.) # than the $(eval) indirection going on in this file.) (Update 2:
# a second attempt at that make yet another mess of it.)
# #
default: all default: all
#default: quick #default: quick
SHELL := $(shell which bash 2>/dev/null) SHELL := $(firstword $(wildcard /usr/local/bin/bash /usr/bin/bash /bin/bash))
ifeq (,$(SHELL))
$(error Cannot find the bash shell)
endif
MAKEFILE := $(lastword $(MAKEFILE_LIST)) MAKEFILE := $(lastword $(MAKEFILE_LIST))
CLEAN_FILES := CLEAN_FILES := .gen.make
DISTCLEAN_FILES := ./--dummy-- DISTCLEAN_FILES := ./--dummy--
release: oz
MAKING_CLEAN := $(if $(filter %clean,$(MAKECMDGOALS)),1,0) MAKING_CLEAN := $(if $(filter %clean,$(MAKECMDGOALS)),1,0)
.PHONY: clean distclean
clean:
-rm -f $(CLEAN_FILES)
distclean: clean
-rm -f $(DISTCLEAN_FILES)
######################################################################## ########################################################################
# JS_BUILD_NAMES exists for documentation purposes only. It enumerates # JS_BUILD_NAMES exists for documentation purposes only. It enumerates
@ -143,33 +152,49 @@ $(sqlite3.h):
$(MAKE) -C $(dir.top) sqlite3.c $(MAKE) -C $(dir.top) sqlite3.c
$(sqlite3.c): $(sqlite3.h) $(sqlite3.c): $(sqlite3.h)
# .cache.make is generated by a shell script and holds certain parts ########################################################################
# .gen.make is generated by a shell script and holds certain parts
# of the makefile, some of which are relatively expensive to calculate # of the makefile, some of which are relatively expensive to calculate
# on each run (that is, they can take a human-visible amount of time). # on each run (that is, they can take a human-visible amount of time).
#
# .gen.make is also home to make-side vars which are needed for
# generating makefile code via shell code.
ifeq (0,$(MAKING_CLEAN)) ifeq (0,$(MAKING_CLEAN))
.cache.make: $(sqlite3.c) $(sqlite3.canonical.c) $(MAKEFILE) make-make.sh .gen.make: $(MAKEFILE) $(sqlite3.c)
rm -f $@ rm -f $@
$(SHELL) make-make.sh "$(sqlite3.c)" > $@ $(SHELL) make-make.sh $(sqlite3.c) > $@
chmod -w $@ chmod -w $@
-include .cache.make -include .gen.make
.cache.make: $(emcc.bin) endif
ifeq (,$(filter release snapshot,$(MAKECMDGOALS)))
$(info Development build. Use 'release' or 'snapshot' target for a smaller release build.)
endif endif
CLEAN_FILES += .cache.make
# Common options for building sqlite3-wasm.c and speedtest1.c. # Common options for building sqlite3-wasm.c and speedtest1.c.
# Explicit ENABLEs...
SQLITE_OPT = \ SQLITE_OPT = \
-DSQLITE_ENABLE_FTS5 \ -DSQLITE_ENABLE_BYTECODE_VTAB \
-DSQLITE_ENABLE_RTREE \
-DSQLITE_ENABLE_UNKNOWN_SQL_FUNCTION \
-DSQLITE_ENABLE_STMTVTAB \
-DSQLITE_ENABLE_DBPAGE_VTAB \ -DSQLITE_ENABLE_DBPAGE_VTAB \
-DSQLITE_ENABLE_DBSTAT_VTAB \ -DSQLITE_ENABLE_DBSTAT_VTAB \
-DSQLITE_ENABLE_BYTECODE_VTAB \ -DSQLITE_ENABLE_FTS5 \
-DSQLITE_ENABLE_MATH_FUNCTIONS \
-DSQLITE_ENABLE_OFFSET_SQL_FUNC \ -DSQLITE_ENABLE_OFFSET_SQL_FUNC \
-DSQLITE_ENABLE_PREUPDATE_HOOK \
-DSQLITE_ENABLE_RTREE \
-DSQLITE_ENABLE_SESSION \
-DSQLITE_ENABLE_STMTVTAB \
-DSQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
# Explicit OMITs...
SQLITE_OPT += \
-DSQLITE_OMIT_LOAD_EXTENSION \ -DSQLITE_OMIT_LOAD_EXTENSION \
-DSQLITE_OMIT_DEPRECATED \ -DSQLITE_OMIT_DEPRECATED \
-DSQLITE_OMIT_UTF16 \ -DSQLITE_OMIT_UTF16 \
-DSQLITE_OMIT_SHARED_CACHE \ -DSQLITE_OMIT_SHARED_CACHE
# Misc. build-time config options...
SQLITE_OPT += \
-DSQLITE_THREADSAFE=0 \ -DSQLITE_THREADSAFE=0 \
-DSQLITE_TEMP_STORE=2 \ -DSQLITE_TEMP_STORE=2 \
-DSQLITE_OS_KV_OPTIONAL=1 \ -DSQLITE_OS_KV_OPTIONAL=1 \
@ -177,6 +202,7 @@ SQLITE_OPT = \
-DSQLITE_USE_URI=1 \ -DSQLITE_USE_URI=1 \
-DSQLITE_WASM_ENABLE_C_TESTS \ -DSQLITE_WASM_ENABLE_C_TESTS \
-DSQLITE_C=$(sqlite3.c) -DSQLITE_C=$(sqlite3.c)
#SQLITE_OPT += -DSQLITE_DEBUG #SQLITE_OPT += -DSQLITE_DEBUG
# Enabling SQLITE_DEBUG will break sqlite3_wasm_vfs_create_file() # Enabling SQLITE_DEBUG will break sqlite3_wasm_vfs_create_file()
# (and thus sqlite3_js_vfs_create_file()). Those functions are # (and thus sqlite3_js_vfs_create_file()). Those functions are
@ -187,25 +213,16 @@ SQLITE_OPT = \
######################################################################## ########################################################################
# minimal=1 disables all "extraneous" stuff from sqlite3-wasm.c, the # minimal=1 disables all "extraneous" stuff from sqlite3-wasm.c, the
# goal being to create a WASM file with only the core APIs. # goal being to create a WASM file with only the core APIs.
minimal ?= 0
ifeq (1,$(minimal)) ifeq (1,$(minimal))
SQLITE_OPT += -DSQLITE_WASM_MINIMAL SQLITE_OPT += -DSQLITE_WASM_MINIMAL
endif # SQLITE_WASM_MINIMAL tells sqlite3-wasm.c to explicitly omit
# a bunch of stuff, in the interest of keeping the wasm file size
.PHONY: clean distclean # down.
clean: wasm-minimal := 1
-rm -f $(CLEAN_FILES)
distclean: clean
-rm -f $(DISTCLEAN_FILES)
ifeq (release,$(filter release,$(MAKECMDGOALS)))
ifeq (,$(wasm-strip))
$(error Cannot make release-quality binary because wasm-strip is not available. \
See notes in the warning above)
endif
else else
$(info Development build. Use '$(MAKE) release' for a smaller release build.) wasm-minimal := 0
endif endif
undefine minimal
######################################################################## ########################################################################
# Adding custom C code via sqlite3_wasm_extra_init.c: # Adding custom C code via sqlite3_wasm_extra_init.c:
@ -368,11 +385,11 @@ EXPORTED_FUNCTIONS.api.in := $(EXPORTED_FUNCTIONS.api.core)
ifeq (1,$(SQLITE_C_IS_SEE)) ifeq (1,$(SQLITE_C_IS_SEE))
EXPORTED_FUNCTIONS.api.in += $(dir.api)/EXPORTED_FUNCTIONS.sqlite3-see EXPORTED_FUNCTIONS.api.in += $(dir.api)/EXPORTED_FUNCTIONS.sqlite3-see
endif endif
ifeq (0,$(minimal)) ifeq (0,$(wasm-minimal))
EXPORTED_FUNCTIONS.api.in += $(dir.api)/EXPORTED_FUNCTIONS.sqlite3-extras EXPORTED_FUNCTIONS.api.in += $(dir.api)/EXPORTED_FUNCTIONS.sqlite3-extras
else else
$(info ========================================) $(info ========================================)
$(info This is a minimal-mode build) $(info This is a minimal-mode build. It is missing many features.)
$(info ========================================) $(info ========================================)
endif endif
EXPORTED_FUNCTIONS.api := $(dir.tmp)/EXPORTED_FUNCTIONS.api EXPORTED_FUNCTIONS.api := $(dir.tmp)/EXPORTED_FUNCTIONS.api
@ -408,8 +425,10 @@ sqlite3-api.jses += $(dir.api)/sqlite3-api-oo1.c-pp.js
sqlite3-api.jses += $(dir.api)/sqlite3-api-worker1.c-pp.js sqlite3-api.jses += $(dir.api)/sqlite3-api-worker1.c-pp.js
# sqlite3-vfs-helper = helper APIs for VFSes: # sqlite3-vfs-helper = helper APIs for VFSes:
sqlite3-api.jses += $(dir.api)/sqlite3-vfs-helper.c-pp.js sqlite3-api.jses += $(dir.api)/sqlite3-vfs-helper.c-pp.js
# sqlite3-vtab-helper = helper APIs for VTABLEs: ifeq (0,$(wasm-minimal))
sqlite3-api.jses += $(dir.api)/sqlite3-vtab-helper.c-pp.js # sqlite3-vtab-helper = helper APIs for VTABLEs:
sqlite3-api.jses += $(dir.api)/sqlite3-vtab-helper.c-pp.js
endif
# sqlite3-vfs-opfs = the first OPFS VFS: # sqlite3-vfs-opfs = the first OPFS VFS:
sqlite3-api.jses += $(dir.api)/sqlite3-vfs-opfs.c-pp.js sqlite3-api.jses += $(dir.api)/sqlite3-vfs-opfs.c-pp.js
# sqlite3-vfs-opfs-sahpool = the second OPFS VFS: # sqlite3-vfs-opfs-sahpool = the second OPFS VFS:

View File

@ -49,7 +49,6 @@ _sqlite3_db_name
_sqlite3_db_readonly _sqlite3_db_readonly
_sqlite3_db_status _sqlite3_db_status
_sqlite3_deserialize _sqlite3_deserialize
_sqlite3_drop_modules
_sqlite3_errcode _sqlite3_errcode
_sqlite3_errmsg _sqlite3_errmsg
_sqlite3_error_offset _sqlite3_error_offset

View File

@ -50,6 +50,7 @@ _sqlite3session_table_filter
_sqlite3_create_module _sqlite3_create_module
_sqlite3_create_module_v2 _sqlite3_create_module_v2
_sqlite3_declare_vtab _sqlite3_declare_vtab
_sqlite3_drop_modules
_sqlite3_vtab_collation _sqlite3_vtab_collation
_sqlite3_vtab_distinct _sqlite3_vtab_distinct
_sqlite3_vtab_in _sqlite3_vtab_in

View File

@ -385,7 +385,6 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
of this, the canonical builds of sqlite3.wasm/js guarantee that of this, the canonical builds of sqlite3.wasm/js guarantee that
sqlite3.wasm.alloc() and friends use those allocators. Custom builds sqlite3.wasm.alloc() and friends use those allocators. Custom builds
may not guarantee that, however. */, may not guarantee that, however. */,
["sqlite3_drop_modules", "int", ["sqlite3*", "**"]],
["sqlite3_last_insert_rowid", "i64", ["sqlite3*"]], ["sqlite3_last_insert_rowid", "i64", ["sqlite3*"]],
["sqlite3_malloc64", "*","i64"], ["sqlite3_malloc64", "*","i64"],
["sqlite3_msize", "i64", "*"], ["sqlite3_msize", "i64", "*"],
@ -422,6 +421,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
["sqlite3_create_module_v2", "int", ["sqlite3_create_module_v2", "int",
["sqlite3*","string","sqlite3_module*","*","*"]], ["sqlite3*","string","sqlite3_module*","*","*"]],
["sqlite3_declare_vtab", "int", ["sqlite3*", "string:flexible"]], ["sqlite3_declare_vtab", "int", ["sqlite3*", "string:flexible"]],
["sqlite3_drop_modules", "int", ["sqlite3*", "**"]],
["sqlite3_vtab_collation","string","sqlite3_index_info*","int"], ["sqlite3_vtab_collation","string","sqlite3_index_info*","int"],
["sqlite3_vtab_distinct","int", "sqlite3_index_info*"], ["sqlite3_vtab_distinct","int", "sqlite3_index_info*"],
["sqlite3_vtab_in","int", "sqlite3_index_info*", "int", "int"], ["sqlite3_vtab_in","int", "sqlite3_index_info*", "int", "int"],

View File

@ -14,16 +14,17 @@
*/ */
#define SQLITE_WASM #define SQLITE_WASM
#ifdef SQLITE_WASM_ENABLE_C_TESTS #ifdef SQLITE_WASM_ENABLE_C_TESTS
# undef SQLITE_WASM_ENABLE_C_TESTS
# define SQLITE_WASM_ENABLE_C_TESTS 1
/* /*
** Code blocked off by SQLITE_WASM_TESTS is intended solely for use in ** Code blocked off by SQLITE_WASM_ENABLE_C_TESTS is intended solely
** unit/regression testing. They may be safely omitted from ** for use in unit/regression testing. They may be safely omitted from
** client-side builds. The main unit test script, tester1.js, will ** client-side builds. The main unit test script, tester1.js, will
** skip related tests if it doesn't find the corresponding functions ** skip related tests if it doesn't find the corresponding functions
** in the WASM exports. ** in the WASM exports.
*/ */
# define SQLITE_WASM_TESTS 1
#else #else
# define SQLITE_WASM_TESTS 0 # define SQLITE_WASM_ENABLE_C_TESTS 0
#endif #endif
/* /*
@ -92,43 +93,6 @@
#undef SQLITE_ENABLE_API_ARMOR #undef SQLITE_ENABLE_API_ARMOR
#define SQLITE_ENABLE_API_ARMOR 1 #define SQLITE_ENABLE_API_ARMOR 1
#ifndef SQLITE_ENABLE_BYTECODE_VTAB
# define SQLITE_ENABLE_BYTECODE_VTAB 1
#endif
#ifndef SQLITE_ENABLE_DBPAGE_VTAB
# define SQLITE_ENABLE_DBPAGE_VTAB 1
#endif
#ifndef SQLITE_ENABLE_DBSTAT_VTAB
# define SQLITE_ENABLE_DBSTAT_VTAB 1
#endif
#ifndef SQLITE_ENABLE_EXPLAIN_COMMENTS
# define SQLITE_ENABLE_EXPLAIN_COMMENTS 1
#endif
#ifndef SQLITE_ENABLE_FTS5
# define SQLITE_ENABLE_FTS5 1
#endif
#ifndef SQLITE_ENABLE_MATH_FUNCTIONS
# define SQLITE_ENABLE_MATH_FUNCTIONS 1
#endif
#ifndef SQLITE_ENABLE_OFFSET_SQL_FUNC
# define SQLITE_ENABLE_OFFSET_SQL_FUNC 1
#endif
#ifndef SQLITE_ENABLE_PREUPDATE_HOOK
# define SQLITE_ENABLE_PREUPDATE_HOOK 1 /*required by session extension*/
#endif
#ifndef SQLITE_ENABLE_RTREE
# define SQLITE_ENABLE_RTREE 1
#endif
#ifndef SQLITE_ENABLE_SESSION
# define SQLITE_ENABLE_SESSION 1
#endif
#ifndef SQLITE_ENABLE_STMTVTAB
# define SQLITE_ENABLE_STMTVTAB 1
#endif
#ifndef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
# define SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
#endif
/**********************************************************************/ /**********************************************************************/
/* SQLITE_O... */ /* SQLITE_O... */
#ifndef SQLITE_OMIT_DEPRECATED #ifndef SQLITE_OMIT_DEPRECATED
@ -214,6 +178,12 @@
# define SQLITE_OMIT_JSON # define SQLITE_OMIT_JSON
#endif #endif
#if !defined(SQLITE_OMIT_VIRTUALTABLE) && !defined(SQLITE_WASM_MINIMAL)
# define SQLITE_WASM_HAS_VTAB 1
#else
# define SQLITE_WASM_HAS_VTAB 0
#endif
#include <assert.h> #include <assert.h>
/* /*
@ -412,7 +382,7 @@ int sqlite3__wasm_db_error(sqlite3*db, int err_code, const char *zMsg){
return err_code; return err_code;
} }
#if SQLITE_WASM_TESTS #if SQLITE_WASM_ENABLE_C_TESTS
struct WasmTestStruct { struct WasmTestStruct {
int v4; int v4;
void * ppV; void * ppV;
@ -432,7 +402,7 @@ void sqlite3__wasm_test_struct(WasmTestStruct * s){
} }
return; return;
} }
#endif /* SQLITE_WASM_TESTS */ #endif /* SQLITE_WASM_ENABLE_C_TESTS */
/* /*
** This function is NOT part of the sqlite3 public API. It is strictly ** This function is NOT part of the sqlite3 public API. It is strictly
@ -967,7 +937,7 @@ const char * sqlite3__wasm_enum_json(void){
} _DefGroup; } _DefGroup;
DefGroup(vtab) { DefGroup(vtab) {
#if !defined(SQLITE_OMIT_VIRTUALTABLE) && !defined(SQLITE_WASM_MINIMAL) #if SQLITE_WASM_HAS_VTAB
DefInt(SQLITE_INDEX_SCAN_UNIQUE); DefInt(SQLITE_INDEX_SCAN_UNIQUE);
DefInt(SQLITE_INDEX_CONSTRAINT_EQ); DefInt(SQLITE_INDEX_CONSTRAINT_EQ);
DefInt(SQLITE_INDEX_CONSTRAINT_GT); DefInt(SQLITE_INDEX_CONSTRAINT_GT);
@ -995,7 +965,7 @@ const char * sqlite3__wasm_enum_json(void){
DefInt(SQLITE_FAIL); DefInt(SQLITE_FAIL);
//DefInt(SQLITE_ABORT); // Also an error code //DefInt(SQLITE_ABORT); // Also an error code
DefInt(SQLITE_REPLACE); DefInt(SQLITE_REPLACE);
#endif /*!SQLITE_OMIT_VIRTUALTABLE*/ #endif /*SQLITE_WASM_HAS_VTAB*/
} _DefGroup; } _DefGroup;
#undef DefGroup #undef DefGroup
@ -1110,6 +1080,7 @@ const char * sqlite3__wasm_enum_json(void){
#undef CurrentStruct #undef CurrentStruct
#if SQLITE_WASM_HAS_VTAB
#define CurrentStruct sqlite3_vtab #define CurrentStruct sqlite3_vtab
StructBinder { StructBinder {
M(pModule, "p"); M(pModule, "p");
@ -1155,7 +1126,6 @@ const char * sqlite3__wasm_enum_json(void){
} _StructBinder; } _StructBinder;
#undef CurrentStruct #undef CurrentStruct
#if !defined(SQLITE_OMIT_VIRTUALTABLE) && !defined(SQLITE_WASM_MINIMAL)
/** /**
** Workaround: in order to map the various inner structs from ** Workaround: in order to map the various inner structs from
** sqlite3_index_info, we have to uplift those into constructs we ** sqlite3_index_info, we have to uplift those into constructs we
@ -1232,9 +1202,9 @@ const char * sqlite3__wasm_enum_json(void){
} _StructBinder; } _StructBinder;
#undef CurrentStruct #undef CurrentStruct
#endif /*!SQLITE_OMIT_VIRTUALTABLE*/ #endif /*SQLITE_WASM_HAS_VTAB*/
#if SQLITE_WASM_TESTS #if SQLITE_WASM_ENABLE_C_TESTS
#define CurrentStruct WasmTestStruct #define CurrentStruct WasmTestStruct
StructBinder { StructBinder {
M(v4, "i"); M(v4, "i");
@ -1244,7 +1214,7 @@ const char * sqlite3__wasm_enum_json(void){
M(xFunc, "v(p)"); M(xFunc, "v(p)");
} _StructBinder; } _StructBinder;
#undef CurrentStruct #undef CurrentStruct
#endif #endif /*SQLITE_WASM_ENABLE_C_TESTS*/
} out( "]"/*structs*/); } out( "]"/*structs*/);
@ -1603,7 +1573,7 @@ sqlite3_kvvfs_methods * sqlite3__wasm_kvvfs_methods(void){
return &sqlite3KvvfsMethods; return &sqlite3KvvfsMethods;
} }
#if !defined(SQLITE_OMIT_VIRTUALTABLE) && !defined(SQLITE_WASM_MINIMAL) #if SQLITE_WASM_HAS_VTAB
/* /*
** This function is NOT part of the sqlite3 public API. It is strictly ** This function is NOT part of the sqlite3 public API. It is strictly
** for use by the sqlite project's own JS/WASM bindings. ** for use by the sqlite project's own JS/WASM bindings.
@ -1626,7 +1596,7 @@ int sqlite3__wasm_vtab_config(sqlite3 *pDb, int op, int arg){
return SQLITE_MISUSE; return SQLITE_MISUSE;
} }
} }
#endif /*!SQLITE_OMIT_VIRTUALTABLE*/ #endif /*SQLITE_WASM_HAS_VTAB*/
/* /*
** This function is NOT part of the sqlite3 public API. It is strictly ** This function is NOT part of the sqlite3 public API. It is strictly
@ -1801,7 +1771,7 @@ int sqlite3__wasm_init_wasmfs(const char *zUnused){
} }
#endif /* __EMSCRIPTEN__ && SQLITE_ENABLE_WASMFS */ #endif /* __EMSCRIPTEN__ && SQLITE_ENABLE_WASMFS */
#if SQLITE_WASM_TESTS #if SQLITE_WASM_ENABLE_C_TESTS
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int sqlite3__wasm_test_intptr(int * p){ int sqlite3__wasm_test_intptr(int * p){
@ -1967,6 +1937,9 @@ int sqlite3__wasm_SQLTester_strglob(const char *zGlob, const char *z){
return !sqlite3__wasm_SQLTester_strnotglob(zGlob, z); return !sqlite3__wasm_SQLTester_strnotglob(zGlob, z);
} }
#endif /* SQLITE_WASM_TESTS */ #endif /* SQLITE_WASM_ENABLE_C_TESTS */
#undef SQLITE_WASM_EXPORT #undef SQLITE_WASM_EXPORT
#undef SQLITE_WASM_HAS_VTAB
#undef SQLITE_WASM_MINIMAL
#undef SQLITE_WASM_ENABLE_C_TESTS

View File

@ -23,7 +23,14 @@ function die(){
SQLITE3_C="${1-../../sqlite3.c}" SQLITE3_C="${1-../../sqlite3.c}"
echo "# GENERATED makefile code. DO NOT EDIT." separator='########################################################################'
cat <<EOF
# GENERATED makefile code. DO NOT EDIT.
# Generated by $0 on $(date)
_GEN_MAKE := \$(lastword \$(MAKEFILE_LIST))
\$(_GEN_MAKE): ${SQLITE3_C} $0
EOF
if grep sqlite3_activate_see "$SQLITE3_C" &>/dev/null; then if grep sqlite3_activate_see "$SQLITE3_C" &>/dev/null; then
echo 'SQLITE_C_IS_SEE := 1' echo 'SQLITE_C_IS_SEE := 1'
@ -34,6 +41,7 @@ fi
######################################################################## ########################################################################
# Locate the emcc (Emscripten) binary... # Locate the emcc (Emscripten) binary...
echo $separator
EMCC_BIN=$(which emcc) EMCC_BIN=$(which emcc)
if [[ x = "x${EMCC_BIN}" ]]; then if [[ x = "x${EMCC_BIN}" ]]; then
if [[ x != "x${EMSDK_HOME}" ]]; then if [[ x != "x${EMSDK_HOME}" ]]; then
@ -51,6 +59,7 @@ echo '$(info using emcc version [$(emcc.version)])'
######################################################################### #########################################################################
# wasm-strip binary... # wasm-strip binary...
echo $separator
WASM_STRIP_BIN=$(which wasm-strip 2>/dev/null) WASM_STRIP_BIN=$(which wasm-strip 2>/dev/null)
echo "wasm-strip ?= ${WASM_STRIP_BIN}" echo "wasm-strip ?= ${WASM_STRIP_BIN}"
if [[ x = "x${WASM_STRIP_BIN}" ]]; then if [[ x = "x${WASM_STRIP_BIN}" ]]; then
@ -71,14 +80,19 @@ ifeq (,\$(filter clean,\$(MAKECMDGOALS)))'
\$(info WARNING: sudo apt install wabt) \$(info WARNING: sudo apt install wabt)
\$(info WARNING: *******************************************************************) \$(info WARNING: *******************************************************************)
endif endif
ifneq (,\$(filter release snapshot,\$(MAKECMDGOALS)))
\$(error Cannot make release-quality binary because wasm-strip is not available.)
endif
EOF EOF
else else
echo 'maybe-wasm-strip = $(wasm-strip)' echo 'maybe-wasm-strip = $(wasm-strip)'
fi fi
# /$(wasm-strip)
########################################################################
########################################################################
dir_dout=jswasm # Make necessary dirs. Note that these need to align with their names
dir_tmp=bld # in the main makefile.
for d in $dir_dout $dir_tmp; do for d in jswasm bld; do
[ -d $d ] || mkdir -p $d [ -d $d ] || mkdir -p $d
done done

View File

@ -2153,7 +2153,7 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
.t({ .t({
name: 'virtual table #1: eponymous w/ manual exception handling', name: 'virtual table #1: eponymous w/ manual exception handling',
predicate: ()=>!!capi.sqlite3_create_module || "Missing vtab support", predicate: (sqlite3)=>!!sqlite3.capi.sqlite3_vtab || "Missing vtab support",
test: function(sqlite3){ test: function(sqlite3){
const VT = sqlite3.vtab; const VT = sqlite3.vtab;
const tmplCols = Object.assign(Object.create(null),{ const tmplCols = Object.assign(Object.create(null),{
@ -2350,7 +2350,7 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
.t({ .t({
name: 'virtual table #2: non-eponymous w/ automated exception wrapping', name: 'virtual table #2: non-eponymous w/ automated exception wrapping',
predicate: ()=>!!capi.sqlite3_create_module || "Missing vtab support", predicate: (sqlite3)=>!!sqlite3.capi.sqlite3_vtab || "Missing vtab support",
test: function(sqlite3){ test: function(sqlite3){
const VT = sqlite3.vtab; const VT = sqlite3.vtab;
const tmplCols = Object.assign(Object.create(null),{ const tmplCols = Object.assign(Object.create(null),{
@ -3300,7 +3300,7 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
T.g('Bug Reports') T.g('Bug Reports')
.t({ .t({
name: 'Delete via bound parameter in subquery', name: 'Delete via bound parameter in subquery',
predicate: ()=>wasm.compileOptionUsed('ENABLE_FTS5') || "FTS5 is not available", predicate: ()=>wasm.compileOptionUsed('ENABLE_FTS5') || "Missing FTS5",
test: function(sqlite3){ test: function(sqlite3){
// Testing https://sqlite.org/forum/forumpost/40ce55bdf5 // Testing https://sqlite.org/forum/forumpost/40ce55bdf5
// with the exception that that post uses "external content" // with the exception that that post uses "external content"

View File

@ -1,5 +1,5 @@
C Start\swork\son\san\soverhaul\sof\sthe\swasm\sbuild\sprocess,\swith\san\seye\stowards\sless\sover-engineering. C More\swork\son\sthe\sminimal-mode\swasm\sbuild\s(now\s603kb\suncompressed).\sRemove\sthe\shard-coded\sfeature-enable\sflags\sfrom\ssqlite3-wasm.c\sand\srely\son\sthe\sbuild\sto\sprovide\sthem.\sSome\swasm\sbuild\scleanup,\sbut\sattempts\sto\scompletely\soverhaul\sit\shave\sbeen\sthwarted\sby\smy\sinability\sto\smake\sscript-generated\smakefile\scode\smore\slegible/maintainable\sthan\sthe\scurrent\seval\sspaghetti.
D 2024-07-25T10:50:45.547 D 2024-07-25T14:00:26.899
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@ -593,7 +593,7 @@ F ext/userauth/sqlite3userauth.h 7f3ea8c4686db8e40b0a0e7a8e0b00fac13aa7a3
F ext/userauth/user-auth.txt ca7e9ee82ca4e1c1744295f8184dd70edfae1992865d26c64303f539eb6c084c F ext/userauth/user-auth.txt ca7e9ee82ca4e1c1744295f8184dd70edfae1992865d26c64303f539eb6c084c
F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb
F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c
F ext/wasm/GNUmakefile 2037399f1a33f8c0bab52e5aba78d4c6b6d9fb8d905ddf5fc3dd10f2a6fdb494 F ext/wasm/GNUmakefile c89b6d0e7f969de03cfcbd5d5f64985ee9ba823a7be6b150fb9c2976c7adb0d6
F ext/wasm/README-dist.txt 6382cb9548076fca472fb3330bbdba3a55c1ea0b180ff9253f084f07ff383576 F ext/wasm/README-dist.txt 6382cb9548076fca472fb3330bbdba3a55c1ea0b180ff9253f084f07ff383576
F ext/wasm/README.md a8a2962c3aebdf8d2104a9102e336c5554e78fc6072746e5daf9c61514e7d193 F ext/wasm/README.md a8a2962c3aebdf8d2104a9102e336c5554e78fc6072746e5daf9c61514e7d193
F ext/wasm/SQLTester/GNUmakefile e0794f676d55819951bbfae45cc5e8d7818dc460492dc317ce7f0d2eca15caff F ext/wasm/SQLTester/GNUmakefile e0794f676d55819951bbfae45cc5e8d7818dc460492dc317ce7f0d2eca15caff
@ -601,8 +601,8 @@ F ext/wasm/SQLTester/SQLTester.mjs ce765c0ad7d57f93553d12ef4dca574deb00300134a26
F ext/wasm/SQLTester/SQLTester.run.mjs c72b7fe2072d05992f7a3d8c6a1d34e95712513ceabe40849784e24e41c84638 F ext/wasm/SQLTester/SQLTester.run.mjs c72b7fe2072d05992f7a3d8c6a1d34e95712513ceabe40849784e24e41c84638
F ext/wasm/SQLTester/index.html 3f8a016df0776be76605abf20e815ecaafbe055abac0e1fe5ea080e7846b760d F ext/wasm/SQLTester/index.html 3f8a016df0776be76605abf20e815ecaafbe055abac0e1fe5ea080e7846b760d
F ext/wasm/SQLTester/touint8array.c 2d5ece04ec1393a6a60c4bf96385bda5e1a10ad49f3038b96460fc5e5aa7e536 F ext/wasm/SQLTester/touint8array.c 2d5ece04ec1393a6a60c4bf96385bda5e1a10ad49f3038b96460fc5e5aa7e536
F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-core 400213eb52a7e5ad5f448053d375cacf4dac2cf45d134f3edfe485ae4a49a183 F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-core 38f85e6ec5f9c776087bc38aef9ef35eeb7e54942ddb1dd04e9ac0122958b741
F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-extras e9a42a86d1e09cfd46fd22438e0cb9449e6eae2eff39597cdc834c183775286a w ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-session F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-extras 2a8c9f7d865cc6e5661b2cd40a45e963a1f8070a88def6ead4c40d4fa0c91998
F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-see fb29e62082a658f0d81102488414d422c393c4b20cc2f685b216bc566237957b F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-see fb29e62082a658f0d81102488414d422c393c4b20cc2f685b216bc566237957b
F ext/wasm/api/EXPORTED_RUNTIME_METHODS.sqlite3-api 1ec3c73e7d66e95529c3c64ac3de2470b0e9e7fbf7a5b41261c367cf4f1b7287 F ext/wasm/api/EXPORTED_RUNTIME_METHODS.sqlite3-api 1ec3c73e7d66e95529c3c64ac3de2470b0e9e7fbf7a5b41261c367cf4f1b7287
F ext/wasm/api/README.md 34fe11466f9c1d81b10a0469e1114e5f1c5a6365c73d80a1a6ca639a1a358b73 F ext/wasm/api/README.md 34fe11466f9c1d81b10a0469e1114e5f1c5a6365c73d80a1a6ca639a1a358b73
@ -612,7 +612,7 @@ F ext/wasm/api/post-js-footer.js cd0a8ec768501d9bd45d325ab0442037fb0e33d1f3b4f08
F ext/wasm/api/post-js-header.js 04dc12c3edd666b64a1b4ef3b6690c88dcc653f26451fd4734472d8e29c1c122 F ext/wasm/api/post-js-header.js 04dc12c3edd666b64a1b4ef3b6690c88dcc653f26451fd4734472d8e29c1c122
F ext/wasm/api/pre-js.c-pp.js ad906703f7429590f2fbf5e6498513bf727a1a4f0ebfa057afb08161d7511219 F ext/wasm/api/pre-js.c-pp.js ad906703f7429590f2fbf5e6498513bf727a1a4f0ebfa057afb08161d7511219
F ext/wasm/api/sqlite3-api-cleanup.js d235ad237df6954145404305040991c72ef8b1881715d2a650dda7b3c2576d0e F ext/wasm/api/sqlite3-api-cleanup.js d235ad237df6954145404305040991c72ef8b1881715d2a650dda7b3c2576d0e
F ext/wasm/api/sqlite3-api-glue.c-pp.js 30abfbb9ed4b6732e2fd78dbfedee5f8d7a395a6d38f140f8df19bd9c30b4191 F ext/wasm/api/sqlite3-api-glue.c-pp.js 12f6f3840afdf8ff7a4374dc1a96a26bcc369e17853e0fe917c38f4d66c6e2d8
F ext/wasm/api/sqlite3-api-oo1.c-pp.js f3a8e2004c6625d17946c11f2fb32008be78bc5207bf746fc77d59848813225f F ext/wasm/api/sqlite3-api-oo1.c-pp.js f3a8e2004c6625d17946c11f2fb32008be78bc5207bf746fc77d59848813225f
F ext/wasm/api/sqlite3-api-prologue.js 6f1257e04885632ed9f44d43aba200b86e0bc16709ffdba29abbbeb1bc8e8b76 F ext/wasm/api/sqlite3-api-prologue.js 6f1257e04885632ed9f44d43aba200b86e0bc16709ffdba29abbbeb1bc8e8b76
F ext/wasm/api/sqlite3-api-worker1.c-pp.js 5cc22a3c0d52828cb32aad8691488719f47d27567e63e8bc8b832d74371c352d F ext/wasm/api/sqlite3-api-worker1.c-pp.js 5cc22a3c0d52828cb32aad8691488719f47d27567e63e8bc8b832d74371c352d
@ -622,7 +622,7 @@ F ext/wasm/api/sqlite3-vfs-helper.c-pp.js 3f828cc66758acb40e9c5b4dcfd87fd478a14c
F ext/wasm/api/sqlite3-vfs-opfs-sahpool.c-pp.js e529a99b7d5a088284821e2902b20d3404b561126969876997d5a73a656c9199 F ext/wasm/api/sqlite3-vfs-opfs-sahpool.c-pp.js e529a99b7d5a088284821e2902b20d3404b561126969876997d5a73a656c9199
F ext/wasm/api/sqlite3-vfs-opfs.c-pp.js e99e3d99f736937914527070f00ab13e9391d3f1cef884ab99a64cbcbee8d675 F ext/wasm/api/sqlite3-vfs-opfs.c-pp.js e99e3d99f736937914527070f00ab13e9391d3f1cef884ab99a64cbcbee8d675
F ext/wasm/api/sqlite3-vtab-helper.c-pp.js e809739d71e8b35dfe1b55d24d91f02d04239e6aef7ca1ea92a15a29e704f616 F ext/wasm/api/sqlite3-vtab-helper.c-pp.js e809739d71e8b35dfe1b55d24d91f02d04239e6aef7ca1ea92a15a29e704f616
F ext/wasm/api/sqlite3-wasm.c 09a938fc570f282e602acd111147c7b74b5332da72540c512a79b916ab57882a F ext/wasm/api/sqlite3-wasm.c 79335b70d4d404b33fb485a4f65422a1ded0977c38e3b1a0cd8e26b49d3c9fba
F ext/wasm/api/sqlite3-worker1-promiser.c-pp.js 46f303ba8ddd1b2f0a391798837beddfa72e8c897038c8047eda49ce7d5ed46b F ext/wasm/api/sqlite3-worker1-promiser.c-pp.js 46f303ba8ddd1b2f0a391798837beddfa72e8c897038c8047eda49ce7d5ed46b
F ext/wasm/api/sqlite3-worker1.c-pp.js 5e8706c2c4af2a57fbcdc02f4e7ef79869971bc21bb8ede777687786ce1c92d5 F ext/wasm/api/sqlite3-worker1.c-pp.js 5e8706c2c4af2a57fbcdc02f4e7ef79869971bc21bb8ede777687786ce1c92d5
F ext/wasm/batch-runner-sahpool.html e9a38fdeb36a13eac7b50241dfe7ae066fe3f51f5c0b0151e7baee5fce0d07a7 F ext/wasm/batch-runner-sahpool.html e9a38fdeb36a13eac7b50241dfe7ae066fe3f51f5c0b0151e7baee5fce0d07a7
@ -653,7 +653,7 @@ F ext/wasm/index-dist.html 564b5ec5669676482c5a25dea9e721d8eafed426ecb155f93d29a
F ext/wasm/index.html 4337f495416756802669f69f9f9f3df9f87ee4c1918e6718719b4b5718e4713a F ext/wasm/index.html 4337f495416756802669f69f9f9f3df9f87ee4c1918e6718719b4b5718e4713a
F ext/wasm/jaccwabyt/jaccwabyt.js 1264710db3cfbcb6887d95665b7aeba60c1126eaef789ca4cf1a4a17d5bc7f54 F ext/wasm/jaccwabyt/jaccwabyt.js 1264710db3cfbcb6887d95665b7aeba60c1126eaef789ca4cf1a4a17d5bc7f54
F ext/wasm/jaccwabyt/jaccwabyt.md 59a20df389abcc3606eb4eaea7fb7ba14504beb3e345dbea9b99a0618ba3bec8 F ext/wasm/jaccwabyt/jaccwabyt.md 59a20df389abcc3606eb4eaea7fb7ba14504beb3e345dbea9b99a0618ba3bec8
F ext/wasm/make-make.sh 93fa6d00f0ffa3481badd068b8da8ed5825cf74999d5e54b2a0c9b90579a3056 x F ext/wasm/make-make.sh 3c1964f5ed80af79c21e583abb9adac2eb11141c98c1cf57eba7ebcb210f1025 x
F ext/wasm/module-symbols.html dc476b403369b26a1a23773e13b80f41b9a49f0825e81435fe3600a7cfbbe337 F ext/wasm/module-symbols.html dc476b403369b26a1a23773e13b80f41b9a49f0825e81435fe3600a7cfbbe337
F ext/wasm/scratchpad-wasmfs.html a3d7388f3c4b263676b58b526846e9d02dfcb4014ff29d3a5040935286af5b96 F ext/wasm/scratchpad-wasmfs.html a3d7388f3c4b263676b58b526846e9d02dfcb4014ff29d3a5040935286af5b96
F ext/wasm/scratchpad-wasmfs.mjs 66034b9256b218de59248aad796760a1584c1dd842231505895eff00dbd57c63 F ext/wasm/scratchpad-wasmfs.mjs 66034b9256b218de59248aad796760a1584c1dd842231505895eff00dbd57c63
@ -669,7 +669,7 @@ F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555
F ext/wasm/test-opfs-vfs.js 1618670e466f424aa289859fe0ec8ded223e42e9e69b5c851f809baaaca1a00c F ext/wasm/test-opfs-vfs.js 1618670e466f424aa289859fe0ec8ded223e42e9e69b5c851f809baaaca1a00c
F ext/wasm/tester1-worker.html ebc4b820a128963afce328ecf63ab200bd923309eb939f4110510ab449e9814c F ext/wasm/tester1-worker.html ebc4b820a128963afce328ecf63ab200bd923309eb939f4110510ab449e9814c
F ext/wasm/tester1.c-pp.html 1c1bc78b858af2019e663b1a31e76657b73dc24bede28ca92fbe917c3a972af2 F ext/wasm/tester1.c-pp.html 1c1bc78b858af2019e663b1a31e76657b73dc24bede28ca92fbe917c3a972af2
F ext/wasm/tester1.c-pp.js b5a126b7ae3f3b5628e74ca806f65394f309326dd518831b2186f88850439be2 F ext/wasm/tester1.c-pp.js 7d0eba1496286338770133356488b4415de7970f4ee2c08f7f587bb18d8b6b0b
F ext/wasm/tests/opfs/concurrency/index.html 657578a6e9ce1e9b8be951549ed93a6a471f4520a99e5b545928668f4285fb5e F ext/wasm/tests/opfs/concurrency/index.html 657578a6e9ce1e9b8be951549ed93a6a471f4520a99e5b545928668f4285fb5e
F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65ad09f510589c779b7cc6a803a88 F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65ad09f510589c779b7cc6a803a88
F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2 F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2
@ -2197,11 +2197,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
P eb64d106551718467e0f6c6b53695410bf4c566901008e4cda8580d0f7efa7b0 P ed746b3dd3248b68cb91de50ac5ba5fd3a7c2fcbde76324e86b88edbfecd896b
R 5dcb0158c3e9e326c7d4eacaa8552ecf R acaefae7f2493e8276236de40774aafc
T *branch * wasm-build-rework
T *sym-wasm-build-rework *
T -sym-trunk * Cancelled\sby\sbranch.
U stephan U stephan
Z 6b2b2a8483fc393f764799aae3eb47aa Z 2f4bcd240a0ced338bed244e56f0f58c
# Remove this line to create a well-formed Fossil manifest. # Remove this line to create a well-formed Fossil manifest.

View File

@ -1 +1 @@
ed746b3dd3248b68cb91de50ac5ba5fd3a7c2fcbde76324e86b88edbfecd896b b029c4067943e366a9b25b8303136fab10822bd771ea4658ac4cd716ff4a0d8f