From 0c7d0a097dd047c0dec12755725e9373090e2e5f Mon Sep 17 00:00:00 2001 From: Nuno Cruces Date: Thu, 11 Jul 2024 13:35:41 +0100 Subject: [PATCH] Allow SQLite to use atomic operations. (#118) --- embed/build.sh | 4 ++-- embed/sqlite3.wasm | Bin 1364094 -> 1364410 bytes sqlite.go | 11 +++++++---- vfs/tests/mptest/mptest_test.go | 5 ++++- vfs/tests/mptest/testdata/build.sh | 2 +- vfs/tests/mptest/testdata/mptest.wasm.bz2 | 4 ++-- vfs/tests/speedtest1/speedtest1_test.go | 6 +++++- vfs/tests/speedtest1/testdata/build.sh | 2 +- .../speedtest1/testdata/speedtest1.wasm.bz2 | 4 ++-- 9 files changed, 24 insertions(+), 14 deletions(-) diff --git a/embed/build.sh b/embed/build.sh index 36183bb..0e82195 100755 --- a/embed/build.sh +++ b/embed/build.sh @@ -12,13 +12,13 @@ WASI_SDK="$ROOT/tools/wasi-sdk-22.0/bin" -o sqlite3.wasm "$ROOT/sqlite3/main.c" \ -I"$ROOT/sqlite3" \ -mexec-model=reactor \ - -msimd128 -mmutable-globals \ + -matomics -msimd128 -mmutable-globals \ -mbulk-memory -mreference-types \ -mnontrapping-fptoint -msign-ext \ -fno-stack-protector -fno-stack-clash-protection \ - -Wl,--initial-memory=327680 \ -Wl,--stack-first \ -Wl,--import-undefined \ + -Wl,--initial-memory=327680 \ -D_HAVE_SQLITE_CONFIG_H \ -DSQLITE_CUSTOM_INCLUDE=sqlite_opt.h \ $(awk '{print "-Wl,--export="$0}' exports.txt) diff --git a/embed/sqlite3.wasm b/embed/sqlite3.wasm index 569f0b32ef45a89ae4d502695452e4cb53b4eaff..bb4f7ea7d2d4419fe58d2346acb0d64c1a60af7f 100755 GIT binary patch delta 4859 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 A$^ZZW delta 4696 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 J<4%Q7{6BZDyte=V diff --git a/sqlite.go b/sqlite.go index 61a0365..e698fc8 100644 --- a/sqlite.go +++ b/sqlite.go @@ -13,6 +13,7 @@ import ( "github.com/ncruces/go-sqlite3/vfs" "github.com/tetratelabs/wazero" "github.com/tetratelabs/wazero/api" + "github.com/tetratelabs/wazero/experimental" ) // Configure SQLite Wasm. @@ -44,12 +45,14 @@ var instance struct { } func compileSQLite() { - if RuntimeConfig == nil { - RuntimeConfig = wazero.NewRuntimeConfig() + ctx := context.Background() + cfg := RuntimeConfig + if cfg == nil { + cfg = wazero.NewRuntimeConfig() } - ctx := context.Background() - instance.runtime = wazero.NewRuntimeWithConfig(ctx, RuntimeConfig) + instance.runtime = wazero.NewRuntimeWithConfig(ctx, + cfg.WithCoreFeatures(api.CoreFeaturesV2|experimental.CoreFeaturesThreads)) env := instance.runtime.NewHostModuleBuilder("env") env = vfs.ExportHostFunctions(env) diff --git a/vfs/tests/mptest/mptest_test.go b/vfs/tests/mptest/mptest_test.go index a65cb45..a47133e 100644 --- a/vfs/tests/mptest/mptest_test.go +++ b/vfs/tests/mptest/mptest_test.go @@ -23,6 +23,7 @@ import ( "github.com/ncruces/go-sqlite3/vfs/memdb" "github.com/tetratelabs/wazero" "github.com/tetratelabs/wazero/api" + "github.com/tetratelabs/wazero/experimental" "github.com/tetratelabs/wazero/imports/wasi_snapshot_preview1" ) @@ -40,7 +41,9 @@ var ( func TestMain(m *testing.M) { ctx := context.Background() - cfg := wazero.NewRuntimeConfig().WithMemoryLimitPages(1024) + cfg := wazero.NewRuntimeConfig(). + WithCoreFeatures(api.CoreFeaturesV2 | experimental.CoreFeaturesThreads). + WithMemoryLimitPages(1024) rt = wazero.NewRuntimeWithConfig(ctx, cfg) wasi_snapshot_preview1.MustInstantiate(ctx, rt) diff --git a/vfs/tests/mptest/testdata/build.sh b/vfs/tests/mptest/testdata/build.sh index bd2e4ba..67d6b91 100755 --- a/vfs/tests/mptest/testdata/build.sh +++ b/vfs/tests/mptest/testdata/build.sh @@ -10,7 +10,7 @@ WASI_SDK="$ROOT/tools/wasi-sdk-22.0/bin" "$WASI_SDK/clang" --target=wasm32-wasi -std=c23 -flto -g0 -O2 \ -o mptest.wasm main.c \ -I"$ROOT/sqlite3" \ - -msimd128 -mmutable-globals \ + -matomics -msimd128 -mmutable-globals \ -mbulk-memory -mreference-types \ -mnontrapping-fptoint -msign-ext \ -fno-stack-protector -fno-stack-clash-protection \ diff --git a/vfs/tests/mptest/testdata/mptest.wasm.bz2 b/vfs/tests/mptest/testdata/mptest.wasm.bz2 index a19b679..d6922d3 100644 --- a/vfs/tests/mptest/testdata/mptest.wasm.bz2 +++ b/vfs/tests/mptest/testdata/mptest.wasm.bz2 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:92c82e38e6b6d97086ef84f5cee6442ebf36ffa15629c76c31edca0592ac11fc -size 479929 +oid sha256:05dc5c2008972a605af3adec692827658255514fda73cc608856e27b4fd0e3e1 +size 479728 diff --git a/vfs/tests/speedtest1/speedtest1_test.go b/vfs/tests/speedtest1/speedtest1_test.go index b647fc9..4aa0fd3 100644 --- a/vfs/tests/speedtest1/speedtest1_test.go +++ b/vfs/tests/speedtest1/speedtest1_test.go @@ -17,6 +17,8 @@ import ( _ "embed" "github.com/tetratelabs/wazero" + "github.com/tetratelabs/wazero/api" + "github.com/tetratelabs/wazero/experimental" "github.com/tetratelabs/wazero/imports/wasi_snapshot_preview1" "github.com/ncruces/go-sqlite3/internal/util" @@ -39,7 +41,9 @@ func TestMain(m *testing.M) { initFlags() ctx := context.Background() - rt = wazero.NewRuntime(ctx) + cfg := wazero.NewRuntimeConfig(). + WithCoreFeatures(api.CoreFeaturesV2 | experimental.CoreFeaturesThreads) + rt = wazero.NewRuntimeWithConfig(ctx, cfg) wasi_snapshot_preview1.MustInstantiate(ctx, rt) env := vfs.ExportHostFunctions(rt.NewHostModuleBuilder("env")) _, err := env.Instantiate(ctx) diff --git a/vfs/tests/speedtest1/testdata/build.sh b/vfs/tests/speedtest1/testdata/build.sh index 0700b8c..adbc4fb 100755 --- a/vfs/tests/speedtest1/testdata/build.sh +++ b/vfs/tests/speedtest1/testdata/build.sh @@ -10,7 +10,7 @@ WASI_SDK="$ROOT/tools/wasi-sdk-22.0/bin" "$WASI_SDK/clang" --target=wasm32-wasi -std=c23 -flto -g0 -O2 \ -o speedtest1.wasm main.c \ -I"$ROOT/sqlite3" \ - -msimd128 -mmutable-globals \ + -matomics -msimd128 -mmutable-globals \ -mbulk-memory -mreference-types \ -mnontrapping-fptoint -msign-ext \ -fno-stack-protector -fno-stack-clash-protection \ diff --git a/vfs/tests/speedtest1/testdata/speedtest1.wasm.bz2 b/vfs/tests/speedtest1/testdata/speedtest1.wasm.bz2 index 7b4b1cf..0fa7ab6 100644 --- a/vfs/tests/speedtest1/testdata/speedtest1.wasm.bz2 +++ b/vfs/tests/speedtest1/testdata/speedtest1.wasm.bz2 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fc6236a295ad2b24ec21c13cbd5047817ac4c97722de6fe8b7b16d1760e398e4 -size 491989 +oid sha256:ef42f76fb3c0cf742aa3500454c7d1b2d7e13526f4c39f217c983e574683d757 +size 491674