1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-10-21 11:13:54 +03:00
Files
sqlite/ext/wasm/mkdist.sh
stephan ae48a2463b wasm dist: add --snapshot flag, add -64 flag to include 64-bit builds, and add module-symbols.html to the dist.
FossilOrigin-Name: e9a6391b377b6964620285192262a4dc9fe1712799f7aa8a8b37c5f718544ed2
2025-09-25 18:53:28 +00:00

210 lines
3.8 KiB
Bash
Executable File

#!/usr/bin/env bash
###
#
# Builds the SQLite JS/WASM distribution zip file.
#
# Usage: $0 build-name ?flags?
#
# build-name is the dir/archive name prefix for the
# build and defaults to sqlite-wasm.
#
# -?|--help = Show this text
#
# -0 = Use -O0 instead of ${optFlag}
#
# -1 = Use make -j1 instead of ${makeFlag}
#
# -64 = Include 64-bit builds
#
# --noclean = do not run 'make clean' first
#
# --snapshot = gives the archive name a distinctive suffix
#
###
function die(){
local rc=$1
shift
echo "Error: $@" 1>&2
exit $rc
}
dirTop=../..
buildName=
b64=0
optFlag=-Oz
clean=1
makeFlag=-j4
snapshotSuffix=
for arg in $@; do
case $arg in
-64) b64=1
;;
-0) optFlag=-O0
;;
-1) makeFlag=
;;
--noclean) clean=0
;;
--snapshot)
snapshotSuffix=$(date +%Y%m%d)
;;
-?|--help)
sed -n -e '2,/^###/p' $0
exit
;;
*) if [[ x != x${buildName} ]]; then
die 1 "Unhandled argument: $arg"
fi
buildName=$arg
;;
esac
done
make=
for i in gmake make; do
make=$(which $i 2>/dev/null)
[[ x != x${make} ]] && break
done
[[ x = x$make ]] && die 127 "Cannot find make"
[[ x = x${buildName} ]] && buildName=sqlite-wasm
buildName=${buildName}${snapshotSuffix}
echo "Creating the SQLite wasm dist bundle..."
#
# Generates files which, when built, will also build all of the pieces
# neaded for the dist bundle.
#
tgtFiles=(
demo-worker1-promiser.html
demo-worker1-promiser.js
demo-worker1-promiser-esm.html
demo-worker1-promiser.mjs
tester1.html
tester1-esm.html
tester1-worker.html
tester1.js
tester1.mjs
)
if [[ 1 = $b64 ]]; then
tgtFiles+=(
tester1-64bit.html
tester1-esm-64bit.html
tester1-worker-64bit.html
tester1-64bit.js
tester1-64bit.mjs
)
fi
[[ 1 = $clean ]] && $make clean
$make $makeFlag \
t-version-info t-stripccomments \
${tgtFiles[@]} \
"emcc_opt=${optFlag}" || die $?
dirTmp=d.dist
rm -fr $dirTmp
mkdir -p $dirTmp/jswasm || die $?
mkdir -p $dirTmp/common || die $?
# Static files for the top-most dir:
fTop=(
demo-123.html
demo-123-worker.html
demo-123.js
demo-worker1.html
demo-worker1.js
demo-jsstorage.html
demo-jsstorage.js
module-symbols.html
)
# Files for the jswasm subdir sans jswasm prefix:
#
# fJ1 = JS files to stripccomments -k on
# fJ2 = JS files to stripccomments -k -k on
fJ1=(
sqlite3-opfs-async-proxy.js
sqlite3-worker1.js
sqlite3-worker1.mjs
sqlite3-worker1-bundler-friendly.mjs
sqlite3-worker1-promiser.js
sqlite3-worker1-promiser.mjs
sqlite3-worker1-promiser-bundler-friendly.mjs
)
fJ2=(
sqlite3.js
sqlite3.mjs
)
# fW = list of wasm files to copy from jswasm/.
fW=(sqlite3.wasm)
if [[ 1 = $b64 ]]; then
fW+=(sqlite3-64bit.wasm)
fi
function fcp() {
cp -p $@ || die $?
chmod +w ${@: -1}
}
function scc(){
${dirTop}/tool/stripccomments $@ || die $?
}
jw=jswasm
fcp ${tgtFiles[@]} $dirTmp/.
fcp README-dist.txt $dirTmp/README.txt
fcp index-dist.html $dirTmp/index.html
fcp common/*.css common/SqliteTestUtil.js $dirTmp/common/.
for i in ${fTop[@]}; do
fcp $i $dirTmp/.
done
for i in ${fW[@]}; do
fcp $jw/$i $dirTmp/$jw/.
done
for i in ${fJ1[@]}; do
scc -k < $jw/$i > $dirTmp/$jw/$i || die $?
done
for i in ${fJ2[@]}; do
scc -k -k < $jw/$i > $dirTmp/$jw/$i || die $?
done
#
# Done copying files. Now zip it up...
#
svi=${dirTop}/version-info
vnum=$($svi --download-version)
vdir=${buildName}-${vnum}
fzip=${vdir}.zip
rm -fr ${vdir} ${fzip}
mv $dirTmp $vdir || die $?
zip -rq9 $fzip $(find $vdir -type f | sort) || die $?
ls -la $fzip
unzip -lv $fzip || die $?
cat <<EOF
**
** Unzipped files are in $vdir
**
EOF