mirror of
https://github.com/tursodatabase/libsql.git
synced 2025-06-07 10:21:51 +00:00
.cargo
.config
.github
bindings
bottomless
bottomless-cli
docker-compose
docs
libsql
libsql-ffi
libsql-hrana
libsql-replication
libsql-server
libsql-shell
libsql-sqlite3
art
autoconf
benchmark
contrib
crates
doc
ext
async
consio
crr
expert
fts3
fts5
icu
jni
libsql-wasi
lsm1
misc
rbu
recover
repair
rtree
session
udf
userauth
vwal
wasi
wasm
SQLTester
api
common
fiddle
jaccwabyt
sql
tests
EXPORTED_FUNCTIONS.fiddle.in
GNUmakefile
README-dist.txt
README.md
batch-runner-sahpool.html
batch-runner-sahpool.js
batch-runner.html
batch-runner.js
c-pp.c
demo-123-worker.html
demo-123.html
demo-123.js
demo-jsstorage.html
demo-jsstorage.js
demo-worker1-promiser.html
demo-worker1-promiser.js
demo-worker1.html
demo-worker1.js
dist.make
example_extra_init.c
fiddle.make
index-dist.html
index.html
module-symbols.html
scratchpad-wasmfs.html
scratchpad-wasmfs.mjs
speedtest1-wasmfs.html
speedtest1-wasmfs.mjs
speedtest1-worker.html
speedtest1-worker.js
speedtest1.html
split-speedtest1-script.sh
test-opfs-vfs.html
test-opfs-vfs.js
tester1-worker.html
tester1.c-pp.html
tester1.c-pp.js
wasmfs.make
README.md
mptest
src
test
tool
vsixtest
.gitignore
Dockerfile-wasm-udf
LIBSQL_VERSION
LICENSE.md
Makefile.in
Makefile.linux-gcc
Makefile.msc
README-SQLite.md
VERSION
aclocal.m4
config.guess
config.sub
configure
configure.ac
install-sh
libsql.pc.in
ltmain.sh
magic.txt
main.mk
manifest
manifest.uuid
spec.template
sqlite.pc.in
sqlite3.1
sqlite3.pc.in
sqlite_cfg.h.in
libsql-storage
libsql-storage-server
libsql-sys
libsql-wal
sqlx-libsql
tools
vendored
xtask
.dockerignore
.env
.gitignore
.gitmodules
CODE_OF_CONDUCT.md
CONTRIBUTING.md
Cargo.lock
Cargo.toml
Dockerfile
Dockerfile.dev
Dockerfile.musl
LICENSE.md
README-libsql.md
README.md
docker-entrypoint.sh
docker-wrapper.sh
fly.toml
rust-toolchain.toml
107 lines
3.3 KiB
Markdown
107 lines
3.3 KiB
Markdown
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...
|
|
|
|
First, install the Emscripten SDK, as documented
|
|
[here](https://emscripten.org/docs/getting_started/downloads.html) and summarized
|
|
below for Linux environments:
|
|
|
|
```
|
|
# Clone the emscripten repository:
|
|
$ sudo apt install git
|
|
$ git clone https://github.com/emscripten-core/emsdk.git
|
|
$ cd emsdk
|
|
|
|
# Download and install the latest SDK tools:
|
|
$ ./emsdk install latest
|
|
|
|
# Make the "latest" SDK "active" for the current user:
|
|
$ ./emsdk activate latest
|
|
```
|
|
|
|
Those parts only need to be run once, but the SDK can be updated using:
|
|
|
|
```
|
|
$ git pull
|
|
$ ./emsdk install latest
|
|
$ ./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:
|
|
$ source ./emsdk_env.sh
|
|
|
|
$ which emcc
|
|
/path/to/emsdk/upstream/emscripten/emcc
|
|
```
|
|
|
|
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
|
|
```
|
|
|
|
Or:
|
|
|
|
```
|
|
$ cd ext/wasm
|
|
$ make
|
|
```
|
|
|
|
That will generate the a number of files required for a handful of
|
|
test and demo applications which can be accessed via
|
|
`index.html`. WASM content cannot, due to XMLHttpRequest security
|
|
limitations, be loaded if the containing 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/wasm
|
|
$ althttpd --enable-sab --max-age 1 --page index.html
|
|
```
|
|
|
|
That will open the system's browser and run the index page, from which
|
|
all of the test and demo applications can be accessed.
|
|
|
|
Note that when serving this app via [althttpd][], it must be a version
|
|
from 2022-09-26 or newer so that it recognizes the `--enable-sab`
|
|
flag, which causes althttpd to emit two HTTP response headers which
|
|
are required to enable JavaScript's `SharedArrayBuffer` and `Atomics`
|
|
APIs. Those APIs are required in order to enable the OPFS-related
|
|
features in the apps which use them.
|
|
|
|
# Testing on a remote machine that is accessed via SSH
|
|
|
|
*NB: The following are developer notes, last validated on 2023-07-19*
|
|
|
|
* Remote: Install git, emsdk, and althttpd
|
|
* Use a [version of althttpd][althttpd] from
|
|
September 26, 2022 or newer.
|
|
* Remote: Install the SQLite source tree. CD to ext/wasm
|
|
* Remote: "`make`" to build WASM
|
|
* Remote: `althttpd --enable-sab --port 8080 --popup`
|
|
* Local: `ssh -L 8180:localhost:8080 remote`
|
|
* Local: Point your web-browser at http://localhost:8180/index.html
|
|
|
|
In order to enable [SharedArrayBuffer][], the web-browser requires
|
|
that the two extra Cross-Origin lines be present in HTTP reply headers
|
|
and that the request must come from "localhost" (_or_ over an SSL
|
|
connection). Since the web-server is on a different machine from the
|
|
web-broser, the localhost requirement means that the connection must
|
|
be tunneled using SSH.
|
|
|
|
|
|
[emscripten]: https://emscripten.org
|
|
[althttpd]: https://sqlite.org/althttpd
|
|
[SharedArrayBuffer]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer
|