|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#undef NDEBUG |
|
|
#define DEBUG 1 |
|
|
#include <assert.h> |
|
|
#include <stdio.h> |
|
|
#include <string.h> |
|
|
|
|
|
#define pf printf |
|
|
#define ps puts |
|
|
|
|
|
|
|
|
#define zBanner \ |
|
|
"\n########################################################################\n" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
enum BuildDefFlags { |
|
|
|
|
|
F_ESM = 0x01, |
|
|
|
|
|
F_BUNDLER_FRIENDLY = 1<<1, |
|
|
|
|
|
|
|
|
|
|
|
F_UNSUPPORTED = 1<<2, |
|
|
|
|
|
F_NOT_IN_ALL = 1<<3, |
|
|
|
|
|
F_64BIT = 1<<4, |
|
|
|
|
|
|
|
|
F_NODEJS = 1<<5, |
|
|
|
|
|
F_WASMFS = 1<<6, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CP_JS = 1 << 30, |
|
|
CP_WASM = 1 << 31, |
|
|
CP_ALL = CP_JS | CP_WASM |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct BuildDef { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const char *zBaseName; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const char *zEmo; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const char *zDotWasm; |
|
|
const char *zCmppD; |
|
|
const char *zEmcc; |
|
|
const char *zEmccExtra; |
|
|
const char *zDeps; |
|
|
const char *zEnv; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const char *zIfCond; |
|
|
int flags; |
|
|
}; |
|
|
typedef struct BuildDef BuildDef; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define BuildDefs_map(E) \ |
|
|
E(vanilla) E(vanilla64) \ |
|
|
E(esm) E(esm64) \ |
|
|
E(bundler) E(bundler64) \ |
|
|
E(speedtest1) E(speedtest164) \ |
|
|
E(node) E(node64) \ |
|
|
E(wasmfs) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct BuildDefs { |
|
|
#define E(N) BuildDef N; |
|
|
BuildDefs_map(E) |
|
|
#undef E |
|
|
}; |
|
|
typedef struct BuildDefs BuildDefs; |
|
|
|
|
|
const BuildDefs oBuildDefs = { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.vanilla = { |
|
|
.zEmo = "🍦", |
|
|
.zBaseName = "sqlite3", |
|
|
.zDotWasm = 0, |
|
|
.zCmppD = 0, |
|
|
.zEmcc = 0, |
|
|
.zEmccExtra = 0, |
|
|
.zEnv = "web,worker", |
|
|
.zDeps = 0, |
|
|
.zIfCond = 0, |
|
|
.flags = CP_ALL |
|
|
}, |
|
|
|
|
|
|
|
|
.vanilla64 = { |
|
|
.zEmo = "🍨", |
|
|
.zBaseName = "sqlite3-64bit", |
|
|
.zDotWasm = 0, |
|
|
.zCmppD = 0, |
|
|
.zEmcc = 0, |
|
|
.zEmccExtra = "-sMEMORY64=1 -sWASM_BIGINT=1", |
|
|
.zEnv = 0, |
|
|
.zDeps = 0, |
|
|
.zIfCond = 0, |
|
|
.flags = CP_ALL | F_64BIT |
|
|
}, |
|
|
|
|
|
|
|
|
.esm = { |
|
|
.zEmo = "🍬", |
|
|
.zBaseName = "sqlite3", |
|
|
.zDotWasm = 0, |
|
|
.zCmppD = "-Dtarget:es6-module", |
|
|
.zEmcc = 0, |
|
|
.zEmccExtra = 0, |
|
|
.zEnv = 0, |
|
|
.zDeps = 0, |
|
|
.zIfCond = 0, |
|
|
.flags = CP_JS | F_ESM |
|
|
}, |
|
|
|
|
|
|
|
|
.esm64 = { |
|
|
.zEmo = "🍫", |
|
|
.zBaseName = "sqlite3-64bit", |
|
|
.zDotWasm = 0, |
|
|
.zCmppD = "-Dtarget:es6-module", |
|
|
.zEmcc = 0, |
|
|
.zEmccExtra = "-sMEMORY64=1 -sWASM_BIGINT=1", |
|
|
.zEnv = 0, |
|
|
.zDeps = 0, |
|
|
.zIfCond = 0, |
|
|
.flags = CP_JS | F_ESM | F_64BIT |
|
|
}, |
|
|
|
|
|
|
|
|
.speedtest1 = { |
|
|
.zEmo = "🛼", |
|
|
.zBaseName = "speedtest1", |
|
|
.zDotWasm = 0, |
|
|
.zCmppD = 0, |
|
|
.zEmcc = |
|
|
"$(emcc.speedtest1)" |
|
|
" $(emcc.speedtest1.common)" |
|
|
" $(pre-post.speedtest1.flags)" |
|
|
" $(cflags.common)" |
|
|
" -DSQLITE_SPEEDTEST1_WASM" |
|
|
" $(SQLITE_OPT)" |
|
|
" -USQLITE_WASM_BARE_BONES" |
|
|
" -USQLITE_C -DSQLITE_C=$(sqlite3.c)" |
|
|
" $(speedtest1.exit-runtime0)" |
|
|
" $(speedtest1.c.in)" |
|
|
" -lm", |
|
|
.zEmccExtra = 0, |
|
|
.zEnv = 0, |
|
|
.zDeps = |
|
|
"$(speedtest1.c.in)" |
|
|
" $(EXPORTED_FUNCTIONS.speedtest1)", |
|
|
.zIfCond = 0, |
|
|
.flags = CP_ALL |
|
|
}, |
|
|
|
|
|
|
|
|
.speedtest164 = { |
|
|
.zEmo = "🛼64", |
|
|
.zBaseName = "speedtest1-64bit", |
|
|
.zDotWasm = 0, |
|
|
.zCmppD = 0, |
|
|
.zEmcc = |
|
|
"$(emcc.speedtest1)" |
|
|
" $(emcc.speedtest1.common)" |
|
|
" -sMEMORY64=1 -sWASM_BIGINT=1" |
|
|
" $(pre-post.speedtest164.flags)" |
|
|
" $(cflags.common)" |
|
|
" -DSQLITE_SPEEDTEST1_WASM" |
|
|
" $(SQLITE_OPT)" |
|
|
" -USQLITE_WASM_BARE_BONES" |
|
|
" -USQLITE_C -DSQLITE_C=$(sqlite3.c)" |
|
|
" $(speedtest1.exit-runtime0)" |
|
|
" $(speedtest1.c.in)" |
|
|
" -lm", |
|
|
.zEmccExtra = 0, |
|
|
.zEmccExtra = 0, |
|
|
.zEnv = 0, |
|
|
.zDeps = |
|
|
"$(speedtest1.c.in)" |
|
|
" $(EXPORTED_FUNCTIONS.speedtest1)", |
|
|
.zIfCond = 0, |
|
|
.flags = CP_ALL | F_NOT_IN_ALL |
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.bundler = { |
|
|
.zEmo = "👛", |
|
|
.zBaseName = "sqlite3-bundler-friendly", |
|
|
.zDotWasm = "sqlite3", |
|
|
.zCmppD = "$(c-pp.D.esm) -Dtarget:es6-bundler-friendly", |
|
|
.zEmcc = 0, |
|
|
.zEmccExtra = 0, |
|
|
.zEnv = 0, |
|
|
.zDeps = 0, |
|
|
.zIfCond = 0, |
|
|
.flags = CP_JS | F_BUNDLER_FRIENDLY | F_ESM |
|
|
}, |
|
|
|
|
|
|
|
|
.bundler64 = { |
|
|
.zEmo = "📦", |
|
|
.zBaseName = "sqlite3-bundler-friendly-64bit", |
|
|
.zDotWasm = "sqlite3-64bit", |
|
|
.zCmppD = "$(c-pp.D.bundler)", |
|
|
.zEmcc = 0, |
|
|
.zEmccExtra = "-sMEMORY64=1", |
|
|
.zEnv = 0, |
|
|
.zDeps = 0, |
|
|
.zIfCond = 0, |
|
|
.flags = CP_JS | F_ESM | F_BUNDLER_FRIENDLY | F_64BIT | F_NOT_IN_ALL |
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.node = { |
|
|
.zEmo = "🍟", |
|
|
.zBaseName = "sqlite3-node", |
|
|
.zDotWasm = "sqlite3", |
|
|
.zCmppD = "-Dtarget:node $(c-pp.D.bundler)", |
|
|
.zEmcc = 0, |
|
|
.zEmccExtra = 0, |
|
|
.zEnv = "node" |
|
|
|
|
|
|
|
|
|
|
|
, |
|
|
.zDeps = 0, |
|
|
.zIfCond = 0, |
|
|
.flags = CP_JS | F_UNSUPPORTED | F_ESM | F_NODEJS |
|
|
}, |
|
|
|
|
|
|
|
|
.node64 = { |
|
|
.zEmo = "🍔", |
|
|
.zBaseName = "sqlite3-node-64bit", |
|
|
.zDotWasm = "sqlite3-64bit", |
|
|
.zCmppD = "-Dtarget:node $(c-pp.D.bundler)", |
|
|
.zEmcc = 0, |
|
|
.zEmccExtra = 0, |
|
|
.zEnv = "node", |
|
|
.zDeps = 0, |
|
|
.zIfCond = 0, |
|
|
.flags = CP_JS | F_UNSUPPORTED | F_ESM | F_NODEJS | F_64BIT |
|
|
}, |
|
|
|
|
|
|
|
|
.wasmfs = { |
|
|
.zEmo = "💿", |
|
|
.zBaseName = "sqlite3-wasmfs", |
|
|
.zDotWasm = 0, |
|
|
.zCmppD = "$(c-pp.D.bundler) -Dwasmfs", |
|
|
.zEmcc = 0, |
|
|
.zEmccExtra = |
|
|
"-sEXPORT_ES6 -sUSE_ES6_IMPORT_META" |
|
|
" -sUSE_CLOSURE_COMPILER=0" |
|
|
" -pthread -sWASMFS -sPTHREAD_POOL_SIZE=1" |
|
|
" -sERROR_ON_UNDEFINED_SYMBOLS=0 -sLLD_REPORT_UNDEFINED" |
|
|
" -DSQLITE_ENABLE_WASMFS" |
|
|
, |
|
|
.zEnv = 0, |
|
|
.zDeps = 0, |
|
|
.zIfCond = "ifeq (1,$(wasmfs.enable))", |
|
|
.flags = CP_ALL | F_UNSUPPORTED | F_WASMFS | F_ESM |
|
|
} |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void mk_prologue(void){ |
|
|
|
|
|
|
|
|
char const * aRequiredVars[] = { |
|
|
"dir.top", |
|
|
"dir.api", "dir.dout", "dir.tmp", |
|
|
"dir.fiddle", "dir.fiddle.debug", |
|
|
|
|
|
0 |
|
|
}; |
|
|
char const * zVar; |
|
|
int i; |
|
|
ps(zBanner "# Build setup sanity checks..."); |
|
|
for( i = 0; (zVar = aRequiredVars[i]); ++i ){ |
|
|
pf("ifeq (,$(%s))\n", zVar); |
|
|
pf(" $(error build process error: expecting make var $$(%s) to " |
|
|
"have been set up by now)\n", zVar); |
|
|
ps("endif"); |
|
|
} |
|
|
|
|
|
ps("define label.unsupported-build\n" |
|
|
"$(emo.fire)$(emo.fire)$(emo.fire)Unsupported build:" |
|
|
" use at your own risk!\n" |
|
|
"endef"); |
|
|
|
|
|
ps(zBanner |
|
|
|
|
|
"b.call.wasm-strip = " |
|
|
"echo '[$(emo.b.$(1)) $(out.$(1).wasm)] $(emo.strip) wasm-strip'; " |
|
|
"$(bin.wasm-strip) $(out.$(1).wasm)\n" |
|
|
); |
|
|
|
|
|
pf(zBanner |
|
|
"define b.do.emcc\n" |
|
|
|
|
|
"$(bin.emcc) -o $@ $(emcc_opt_full) $(emcc.flags) " |
|
|
"$(emcc.jsflags) -sENVIRONMENT=$(emcc.environment.$(1)) " |
|
|
" $(pre-post.$(1).flags) " |
|
|
" $(emcc.flags.$(1)) " |
|
|
" $(cflags.common) $(cflags.$(1)) " |
|
|
" $(SQLITE_OPT) " |
|
|
" $(cflags.wasm_extra_init) $(sqlite3-wasm.c.in)\n" |
|
|
"endef\n" |
|
|
); |
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const char * zOptFlags = |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"--enable-bulk-memory-opt " |
|
|
"--all-features " |
|
|
"--post-emscripten " |
|
|
"--strip-debug " |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"--local-cse " |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
|
|
ps(zBanner |
|
|
"# post-compilation WASM file optimization"); |
|
|
|
|
|
|
|
|
ps("ifeq (,$(bin.wasm-opt))"); { |
|
|
ps("b.do.wasm-opt = echo '$(logtag.$(1)) wasm-opt not available'"); |
|
|
} |
|
|
ps("else"); { |
|
|
ps("define b.do.wasm-opt"); |
|
|
pf( |
|
|
"echo '[$(emo.b.$(1)) $(out.$(1).wasm)] $(emo.wasm-opt) $(bin.wasm-opt)';\\\n" |
|
|
"\ttmpfile=$(dir.dout.$(1))/wasm-opt-tmp.$(1).wasm; \\\n" |
|
|
"\trm -f $$tmpfile; \\\n" |
|
|
"\tif $(bin.wasm-opt) $(out.$(1).wasm) " |
|
|
"-o $$tmpfile \\\n" |
|
|
"\t\t%s; then \\\n" |
|
|
"\t\tmv $$tmpfile $(out.$(1).wasm); \\\n" |
|
|
#if 0 |
|
|
"\t\techo -n 'After wasm-opt: '; \\\n" |
|
|
"\t\tls -l $(1); \\\n" |
|
|
#endif |
|
|
|
|
|
|
|
|
"\telse \\\n" |
|
|
"\t\trm -f $$tmpfile; \\\n" |
|
|
"\t\techo '$(logtag.$(1)) $(emo.fire) ignoring wasm-opt failure'; \\\n" |
|
|
"\tfi\n", |
|
|
zOptFlags |
|
|
); |
|
|
ps("endef"); |
|
|
} |
|
|
ps("endif"); |
|
|
} |
|
|
|
|
|
ps("more: all"); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if !defined(WASM_CUSTOM_INSTANTIATE) |
|
|
# define WASM_CUSTOM_INSTANTIATE 0 |
|
|
#elif (WASM_CUSTOM_INSTANTIATE+0)==0 |
|
|
# undef WASM_CUSTOM_INSTANTIATE |
|
|
# define WASM_CUSTOM_INSTANTIATE 0 |
|
|
#endif |
|
|
|
|
|
#if WASM_CUSTOM_INSTANTIATE |
|
|
|
|
|
#define C_PP_D_CUSTOM_INSTANTIATE " -DModule.instantiateWasm " |
|
|
#else |
|
|
#define C_PP_D_CUSTOM_INSTANTIATE |
|
|
#endif |
|
|
|
|
|
static char const * BuildDef_jsext(const BuildDef * pB){ |
|
|
return (F_ESM & pB->flags) ? ".mjs" : ".js"; |
|
|
} |
|
|
|
|
|
static char const * BuildDef_basename(const BuildDef * pB){ |
|
|
return pB->zBaseName ? pB->zBaseName : oBuildDefs.vanilla.zBaseName; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void mk_pre_post(char const *zBuildName, BuildDef const * pB){ |
|
|
char const * const zBaseName = pB |
|
|
? BuildDef_basename(pB) : 0; |
|
|
|
|
|
assert( zBuildName ); |
|
|
pf("%s# Begin --pre/--post flags for %s\n", zBanner, zBuildName); |
|
|
|
|
|
ps("# --pre-js=..."); |
|
|
pf("pre-js.%s.js = $(dir.tmp)/pre-js.%s.js\n", |
|
|
zBuildName, zBuildName); |
|
|
|
|
|
if( 0==WASM_CUSTOM_INSTANTIATE || !pB ){ |
|
|
pf("$(eval $(call b.c-pp.target," |
|
|
"%s," |
|
|
"$(pre-js.in.js)," |
|
|
"$(pre-js.%s.js)," |
|
|
"$(c-pp.D.%s)" |
|
|
"))", |
|
|
zBuildName, zBuildName, zBuildName); |
|
|
}else{ |
|
|
char const *zWasmFile = pB->zDotWasm |
|
|
? pB->zDotWasm |
|
|
: pB->zBaseName; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pf("$(pre-js.%s.js): $(pre-js.in.js) $(bin.c-pp) $(MAKEFILE_LIST)", |
|
|
zBuildName); |
|
|
if( pB->zDotWasm ){ |
|
|
pf(" $(dir.dout)/%s.wasm" |
|
|
|
|
|
, |
|
|
pB->zDotWasm); |
|
|
} |
|
|
ps(""); |
|
|
pf("\t@$(call b.mkdir@); $(call b.c-pp.shcmd," |
|
|
"%s," |
|
|
"$(pre-js.in.js)," |
|
|
"$(pre-js.%s.js)," |
|
|
"$(c-pp.D.%s)" C_PP_D_CUSTOM_INSTANTIATE |
|
|
")\n", |
|
|
zBuildName, zBuildName, zBuildName); |
|
|
} |
|
|
|
|
|
ps("\n# --post-js=..."); |
|
|
pf("post-js.%s.js = $(dir.tmp)/post-js.%s.js\n", |
|
|
zBuildName, zBuildName); |
|
|
pf("post-js.%s.in =" |
|
|
" $(dir.api)/post-js-header.js" |
|
|
" $(sqlite3-api.%s.js)" |
|
|
" $(dir.api)/post-js-footer.js\n", |
|
|
zBuildName, zBuildName); |
|
|
|
|
|
pf("$(eval $(call b.c-pp.target," |
|
|
"%s," |
|
|
"$(post-js.%s.in)," |
|
|
"$(post-js.%s.js)," |
|
|
"$(c-pp.D.%s)" |
|
|
"))\n", |
|
|
zBuildName, zBuildName, zBuildName, zBuildName); |
|
|
|
|
|
pf("$(post-js.%s.js): $(post-js.%s.in) $(bin.c-pp)\n", |
|
|
zBuildName, zBuildName); |
|
|
|
|
|
ps("\n# --extern-post-js=..."); |
|
|
pf("extern-post-js.%s.js = $(dir.tmp)/extern-post-js.%s.js\n", |
|
|
zBuildName, zBuildName); |
|
|
if( 0!=WASM_CUSTOM_INSTANTIATE && zBaseName ){ |
|
|
pf("$(eval $(call b.c-pp.target," |
|
|
"%s," |
|
|
"$(extern-post-js.in.js)," |
|
|
"$(extern-post-js.%s.js)," |
|
|
"$(c-pp.D.%s) --@policy=error -Dsqlite3.wasm=%s.wasm" |
|
|
"))", |
|
|
zBuildName, zBuildName, zBuildName, |
|
|
zBaseName); |
|
|
}else{ |
|
|
pf("$(eval $(call b.c-pp.target," |
|
|
"%s," |
|
|
"$(extern-post-js.in.js)," |
|
|
"$(extern-post-js.%s.js)," |
|
|
"$(c-pp.D.%s)" |
|
|
"))", |
|
|
zBuildName, zBuildName, zBuildName); |
|
|
} |
|
|
|
|
|
ps("\n# --pre/post misc..."); |
|
|
|
|
|
pf("pre-post.%s.flags = " |
|
|
"--extern-pre-js=$(sqlite3-license-version.js) " |
|
|
"--pre-js=$(pre-js.%s.js) " |
|
|
"--post-js=$(post-js.%s.js) " |
|
|
"--extern-post-js=$(extern-post-js.%s.js)\n", |
|
|
zBuildName, zBuildName, zBuildName, zBuildName); |
|
|
|
|
|
|
|
|
|
|
|
pf("pre-post.%s.deps = " |
|
|
"$(pre-post-jses.common.deps) " |
|
|
"$(post-js.%s.js) $(extern-post-js.%s.js) " |
|
|
"$(dir.tmp)/pre-js.%s.js\n", |
|
|
zBuildName, zBuildName, zBuildName, zBuildName); |
|
|
pf("# End --pre/--post flags for %s%s", zBuildName, zBanner); |
|
|
} |
|
|
|
|
|
static void emit_compile_start(char const *zBuildName){ |
|
|
pf("\t@$(call b.mkdir@);" |
|
|
" $(call b.echo,%s,$(emo.compile) building ...)\n", |
|
|
zBuildName); |
|
|
} |
|
|
|
|
|
static void emit_logtag(char const *zBuildName){ |
|
|
#if 1 |
|
|
pf("logtag.%s ?= [$(emo.b.%s)$(if $@, $@,)]:\n", |
|
|
zBuildName, zBuildName); |
|
|
#else |
|
|
pf("logtag.%s ?= [$(emo.b.%s) [%s] $@]:\n", |
|
|
zBuildName, zBuildName, zBuildName); |
|
|
#endif |
|
|
pf("$(info $(logtag.%s) Setting up target b-%s)\n", |
|
|
zBuildName, zBuildName ); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void emit_api_js(char const *zBuildName){ |
|
|
pf("sqlite3-api.%s.js = $(dir.tmp)/sqlite3-api.%s.js\n", |
|
|
zBuildName, zBuildName); |
|
|
pf("$(eval $(call b.c-pp.target," |
|
|
"%s," |
|
|
"$(sqlite3-api.jses)," |
|
|
"$(sqlite3-api.%s.js)," |
|
|
"$(c-pp.D.%s)" |
|
|
"))\n", |
|
|
zBuildName, zBuildName, zBuildName); |
|
|
pf("$(out.%s.js): $(sqlite3-api.%s.js)\n", |
|
|
zBuildName, zBuildName); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void mk_lib_mode(const char *zBuildName, const BuildDef * pB){ |
|
|
const char * zJsExt = BuildDef_jsext(pB); |
|
|
char const * const zBaseName = BuildDef_basename(pB); |
|
|
|
|
|
assert( oBuildDefs.vanilla.zEnv ); |
|
|
assert( zBaseName ); |
|
|
|
|
|
pf("%s# Begin build [%s%s]. flags=0x%02x\n", zBanner, |
|
|
pB->zEmo, zBuildName, pB->flags); |
|
|
pf("# zCmppD=%s\n# zBaseName=%s\n", |
|
|
pB->zCmppD ? pB->zCmppD : "", zBaseName); |
|
|
pf("b.names += %s\n" |
|
|
"emo.b.%s = %s\n", |
|
|
zBuildName, zBuildName, pB->zEmo); |
|
|
emit_logtag(zBuildName); |
|
|
|
|
|
if( pB->zIfCond ){ |
|
|
pf("%s\n", pB->zIfCond ); |
|
|
} |
|
|
|
|
|
pf("dir.dout.%s ?= $(dir.dout)/%s\n", zBuildName, zBuildName); |
|
|
|
|
|
pf("out.%s.base ?= $(dir.dout.%s)/%s\n", |
|
|
zBuildName, zBuildName, zBaseName); |
|
|
pf("out.%s.js ?= $(dir.dout.%s)/%s%s\n", |
|
|
zBuildName, zBuildName, zBaseName, zJsExt); |
|
|
pf("out.%s.wasm ?= $(dir.dout.%s)/%s.wasm\n", |
|
|
|
|
|
zBuildName, zBuildName, zBaseName); |
|
|
|
|
|
pf("dir.dout.%s ?= $(dir.dout)/%s\n", zBuildName, zBuildName); |
|
|
|
|
|
pf("c-pp.D.%s ?= %s\n", zBuildName, pB->zCmppD ? pB->zCmppD : ""); |
|
|
if( pB->flags & F_64BIT ){ |
|
|
pf("c-pp.D.%s += $(c-pp.D.64bit)\n", zBuildName); |
|
|
} |
|
|
if( pB->flags & F_UNSUPPORTED ){ |
|
|
pf("c-pp.D.%s += -Dunsupported-build\n", zBuildName); |
|
|
} |
|
|
|
|
|
pf("emcc.environment.%s ?= %s\n", zBuildName, |
|
|
pB->zEnv ? pB->zEnv : oBuildDefs.vanilla.zEnv); |
|
|
if( pB->zEmccExtra ){ |
|
|
pf("emcc.flags.%s = %s\n", zBuildName, pB->zEmccExtra); |
|
|
} |
|
|
|
|
|
if( pB->zDeps ){ |
|
|
pf("deps.%s += %s\n", zBuildName, pB->zDeps); |
|
|
} |
|
|
|
|
|
emit_api_js(zBuildName); |
|
|
mk_pre_post(zBuildName, pB); |
|
|
|
|
|
{ |
|
|
pf(zBanner |
|
|
"$(out.%s.js): $(MAKEFILE_LIST) $(sqlite3-wasm.c.in)" |
|
|
" $(EXPORTED_FUNCTIONS.api) $(deps.%s)" |
|
|
" $(bin.mkwb) $(pre-post.%s.deps)" |
|
|
"\n", |
|
|
zBuildName, zBuildName, zBuildName); |
|
|
|
|
|
emit_compile_start(zBuildName); |
|
|
|
|
|
if( F_UNSUPPORTED & pB->flags ){ |
|
|
pf("\t@echo '$(logtag.%s) $(label.unsupported-build)'\n", |
|
|
zBuildName); |
|
|
} |
|
|
|
|
|
|
|
|
{ |
|
|
pf("\t$(b.cmd@)$(bin.emcc) -o $@ "); |
|
|
if( pB->zEmcc ){ |
|
|
pf("%s $(emcc.flags.%s)\n", |
|
|
pB->zEmcc, zBuildName); |
|
|
}else{ |
|
|
pf("$(emcc_opt_full) $(emcc.flags)" |
|
|
" $(emcc.jsflags)" |
|
|
" -sENVIRONMENT=$(emcc.environment.%s)" |
|
|
" $(pre-post.%s.flags)" |
|
|
" $(emcc.flags.%s)" |
|
|
" $(cflags.common)" |
|
|
" $(cflags.%s)" |
|
|
" $(SQLITE_OPT)" |
|
|
" $(cflags.wasm_extra_init) $(sqlite3-wasm.c.in)\n", |
|
|
zBuildName, zBuildName, zBuildName, zBuildName |
|
|
); |
|
|
} |
|
|
} |
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pf("\t@if grep -e '^ *importScripts(' $@; " |
|
|
"then echo '$(logtag.%s) $(emo.bug)$(emo.fire): " |
|
|
"bug fixed in 65798c09a00662a3 has re-appeared'; " |
|
|
"exit 1; fi;\n", zBuildName); |
|
|
|
|
|
if( (F_ESM & pB->flags) || (F_NODEJS & pB->flags) ){ |
|
|
pf("\t@$(call b.call.patch-export-default,1,%d,$(logtag.%s))\n", |
|
|
(F_WASMFS & pB->flags) ? 1 : 0, |
|
|
zBuildName |
|
|
); |
|
|
} |
|
|
|
|
|
pf("\t@chmod -x $(out.%s.wasm)\n", zBuildName |
|
|
|
|
|
|
|
|
); |
|
|
pf("\t@$(call b.call.wasm-strip,%s)\n", zBuildName); |
|
|
|
|
|
pf("\t@$(call b.do.wasm-opt,%s)\n", zBuildName); |
|
|
pf("\t@$(call b.strip-js-emcc-bindings,$(logtag.%s))\n", zBuildName); |
|
|
|
|
|
if( CP_JS & pB->flags ){ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if( pB->zDotWasm ){ |
|
|
pf("\t@echo '$(logtag.%s) $(emo.disk) " |
|
|
"s/\"%s.wasm\"/\"%s.wasm\"/g " |
|
|
"in $(dir.dout)/$(notdir $@)'; \\\n" |
|
|
"sed" |
|
|
" -e 's/\"%s.wasm\"/\"%s.wasm\"/g'" |
|
|
" -e \"s/'%s.wasm'/'%s.wasm'/g\"" |
|
|
" $@ > $(dir.dout)/$(notdir $@);\n", |
|
|
zBuildName, |
|
|
zBaseName, pB->zDotWasm, |
|
|
zBaseName, pB->zDotWasm, |
|
|
zBaseName, pB->zDotWasm); |
|
|
}else{ |
|
|
pf("\t@$(call b.cp,%s,$@,$(dir.dout))\n", |
|
|
zBuildName); |
|
|
} |
|
|
} |
|
|
if( CP_WASM & pB->flags ){ |
|
|
pf("\t@$(call b.cp,%s,$(basename $@).wasm,$(dir.dout))\n", |
|
|
zBuildName |
|
|
|
|
|
|
|
|
); |
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
pf("\t@$(call b.echo,%s,$(emo.done) done!%s)\n", |
|
|
zBuildName, |
|
|
(F_UNSUPPORTED & pB->flags) |
|
|
? " $(label.unsupported-build)" |
|
|
: ""); |
|
|
|
|
|
pf("\n%dbit: $(out.%s.js)\n" |
|
|
"$(out.%s.wasm): $(out.%s.js)\n" |
|
|
"b-%s: $(out.%s.wasm)\n", |
|
|
(F_64BIT & pB->flags) ? 64 : 32, zBuildName, |
|
|
zBuildName, zBuildName, zBuildName, zBuildName); |
|
|
|
|
|
if( CP_JS & pB->flags ){ |
|
|
pf("$(dir.dout)/%s%s: $(out.%s.js)\n", |
|
|
zBaseName, zJsExt, zBuildName |
|
|
); |
|
|
} |
|
|
|
|
|
if( CP_WASM & pB->flags ){ |
|
|
pf("$(dir.dout)/%s.wasm: $(out.%s.wasm)\n", |
|
|
zBaseName, zBuildName |
|
|
); |
|
|
} |
|
|
|
|
|
pf("%s: $(out.%s.js)\n", |
|
|
0==((F_UNSUPPORTED | F_NOT_IN_ALL) & pB->flags) |
|
|
? "all" : "more", zBuildName); |
|
|
|
|
|
if( pB->zIfCond ){ |
|
|
pf("else\n" |
|
|
"$(info $(logtag.%s) $(emo.stop) disabled by condition: %s)\n" |
|
|
"endif\n", |
|
|
zBuildName, pB->zIfCond); |
|
|
} |
|
|
pf("# End build [%s]%s", zBuildName, zBanner); |
|
|
} |
|
|
|
|
|
|
|
|
static void emit_gz(char const *zBuildName, |
|
|
char const *zFileExt){ |
|
|
pf("\n$(out.%s.%s).gz: $(out.%s.%s)\n" |
|
|
"\t@$(call b.echo,%s,$(emo.disk))\n" |
|
|
"\t@gzip < $< > $@\n", |
|
|
zBuildName, zFileExt, |
|
|
zBuildName, zFileExt, |
|
|
zBuildName); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void mk_fiddle(void){ |
|
|
for(int i = 0; i < 2; ++i ){ |
|
|
|
|
|
int const isDebug = i>0; |
|
|
const char * const zBuildName = i ? "fiddle.debug" : "fiddle"; |
|
|
|
|
|
pf(zBanner "# Begin build %s\n", zBuildName); |
|
|
if( isDebug ){ |
|
|
pf("emo.b.%s = $(emo.b.fiddle)$(emo.bug)\n", zBuildName); |
|
|
}else{ |
|
|
pf("emo.b.fiddle = 🎻\n"); |
|
|
} |
|
|
emit_logtag(zBuildName); |
|
|
|
|
|
pf("dir.%s = %s\n" |
|
|
"out.%s.js = $(dir.%s)/fiddle-module.js\n" |
|
|
"out.%s.wasm = $(dir.%s)/fiddle-module.wasm\n" |
|
|
"$(out.%s.wasm): $(out.%s.js)\n", |
|
|
zBuildName, zBuildName, |
|
|
zBuildName, zBuildName, |
|
|
zBuildName, zBuildName, |
|
|
zBuildName, zBuildName); |
|
|
|
|
|
emit_api_js(zBuildName); |
|
|
mk_pre_post(zBuildName, 0); |
|
|
|
|
|
{ |
|
|
pf("$(out.%s.js): $(MAKEFILE_LIST) " |
|
|
"$(EXPORTED_FUNCTIONS.fiddle) " |
|
|
"$(fiddle.c.in) " |
|
|
"$(pre-post.%s.deps)\n", |
|
|
zBuildName, zBuildName); |
|
|
emit_compile_start(zBuildName); |
|
|
pf("\t$(b.cmd@)$(bin.emcc) -o $@" |
|
|
" $(emcc.flags.%s)" |
|
|
" $(pre-post.%s.flags)" |
|
|
" $(fiddle.c.in)" |
|
|
"\n", |
|
|
zBuildName, zBuildName); |
|
|
pf("\t@chmod -x $(out.%s.wasm)\n", zBuildName); |
|
|
pf("\t@$(call b.call.wasm-strip,%s)\n", zBuildName); |
|
|
pf("\t@$(call b.strip-js-emcc-bindings,$(logtag.%s))\n", |
|
|
zBuildName); |
|
|
pf("\t@$(call b.cp," |
|
|
"%s," |
|
|
"$(dir.api)/sqlite3-opfs-async-proxy.js," |
|
|
"$(dir $@))\n", zBuildName); |
|
|
if( isDebug ){ |
|
|
pf("\t@$(call b.cp,%s," |
|
|
"$(dir.fiddle)/index.html " |
|
|
"$(dir.fiddle)/fiddle.js " |
|
|
"$(dir.fiddle)/fiddle-worker.js," |
|
|
"$(dir $@)" |
|
|
")\n", |
|
|
zBuildName); |
|
|
} |
|
|
pf("\t@$(call b.echo,%s,$(emo.done) done!)\n", zBuildName); |
|
|
} |
|
|
|
|
|
pf("\n%s: $(out.%s.wasm)\n", isDebug ? "more" : "all", zBuildName); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
emit_gz(zBuildName, "js"); |
|
|
emit_gz(zBuildName, "wasm"); |
|
|
|
|
|
pf("\n%s: $(out.%s.js).gz $(out.%s.wasm).gz\n" |
|
|
"b-%s: %s\n", |
|
|
zBuildName, zBuildName, zBuildName, |
|
|
zBuildName, zBuildName); |
|
|
if( isDebug ){ |
|
|
ps("fiddle-debug: fiddle.debug"); |
|
|
}else{ |
|
|
ps("all: b-fiddle"); |
|
|
} |
|
|
pf("# End %s" zBanner, zBuildName); |
|
|
} |
|
|
} |
|
|
|
|
|
int main(int argc, char const ** argv){ |
|
|
int rc = 0; |
|
|
const BuildDef *pB; |
|
|
pf("# What follows was GENERATED by %s. Edit at your own risk.\n", __FILE__); |
|
|
|
|
|
if(argc>1){ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for( int i = 1; i < argc; ++i ){ |
|
|
char const * const zArg = argv[i]; |
|
|
#define E(N) if(0==strcmp(#N, zArg)) {mk_lib_mode(# N, &oBuildDefs.N);} else |
|
|
BuildDefs_map(E) if( 0==strcmp("prologue",zArg) ){ |
|
|
mk_prologue(); |
|
|
}else { |
|
|
fprintf(stderr,"Unkown build name: %s\n", zArg); |
|
|
rc = 1; |
|
|
break; |
|
|
} |
|
|
#undef E |
|
|
} |
|
|
}else{ |
|
|
|
|
|
|
|
|
|
|
|
mk_prologue(); |
|
|
#define E(N) mk_lib_mode(# N, &oBuildDefs.N); |
|
|
BuildDefs_map(E) |
|
|
#undef E |
|
|
mk_fiddle(); |
|
|
} |
|
|
return rc; |
|
|
} |
|
|
|