diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 530c6dc5..fb04cae1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -92,6 +92,14 @@ jobs: - name: netbsd version: '10.0' flags: '-test.v' + - name: freebsd + arch: arm64 + version: '14.2' + flags: '-test.v -test.short' + - name: netbsd + arch: arm64 + version: '10.0' + flags: '-test.v -test.short' - name: openbsd version: '7.6' flags: '-test.v -test.short' @@ -104,6 +112,7 @@ jobs: - name: Build env: GOOS: ${{ matrix.os.name }} + GOARCH: ${{ matrix.os.arch }} TESTFLAGS: ${{ matrix.os.flags }} run: .github/workflows/build-test.sh @@ -111,6 +120,7 @@ jobs: uses: cross-platform-actions/action@v0.26.0 with: operating_system: ${{ matrix.os.name }} + architecture: ${{ matrix.os.arch }} version: ${{ matrix.os.version }} shell: bash run: . ./test.sh diff --git a/embed/bcw2/bcw2.wasm b/embed/bcw2/bcw2.wasm index 4673098e..e7c6de58 100755 Binary files a/embed/bcw2/bcw2.wasm and b/embed/bcw2/bcw2.wasm differ diff --git a/embed/bcw2/build.sh b/embed/bcw2/build.sh index 977ab10b..eca0a9fb 100755 --- a/embed/bcw2/build.sh +++ b/embed/bcw2/build.sh @@ -45,7 +45,7 @@ cd ~- -o bcw2.wasm "build/main.c" \ -I"build" \ -mexec-model=reactor \ - -matomics -msimd128 -mmutable-globals -mmultivalue \ + -msimd128 -mmutable-globals -mmultivalue \ -mbulk-memory -mreference-types \ -mnontrapping-fptoint -msign-ext \ -fno-stack-protector -fno-stack-clash-protection \ diff --git a/embed/bcw2/go.mod b/embed/bcw2/go.mod index b28d1aae..2fd5be5d 100644 --- a/embed/bcw2/go.mod +++ b/embed/bcw2/go.mod @@ -4,10 +4,10 @@ go 1.21 toolchain go1.23.0 -require github.com/ncruces/go-sqlite3 v0.21.0 +require github.com/ncruces/go-sqlite3 v0.21.3 require ( github.com/ncruces/julianday v1.0.0 // indirect github.com/tetratelabs/wazero v1.8.2 // indirect - golang.org/x/sys v0.28.0 // indirect + golang.org/x/sys v0.29.0 // indirect ) diff --git a/embed/bcw2/go.sum b/embed/bcw2/go.sum index 4ee45070..f5255b09 100644 --- a/embed/bcw2/go.sum +++ b/embed/bcw2/go.sum @@ -1,10 +1,10 @@ -github.com/ncruces/go-sqlite3 v0.21.0 h1:EwKFoy1hHEopN4sFZarmi+McXdbCcbTuLixhEayXVbQ= -github.com/ncruces/go-sqlite3 v0.21.0/go.mod h1:zxMOaSG5kFYVFK4xQa0pdwIszqxqJ0W0BxBgwdrNjuA= +github.com/ncruces/go-sqlite3 v0.21.3 h1:hHkfNQLcbnxPJZhC/RGw9SwP3bfkv/Y0xUHWsr1CdMQ= +github.com/ncruces/go-sqlite3 v0.21.3/go.mod h1:zxMOaSG5kFYVFK4xQa0pdwIszqxqJ0W0BxBgwdrNjuA= github.com/ncruces/julianday v1.0.0 h1:fH0OKwa7NWvniGQtxdJRxAgkBMolni2BjDHaWTxqt7M= github.com/ncruces/julianday v1.0.0/go.mod h1:Dusn2KvZrrovOMJuOt0TNXL6tB7U2E8kvza5fFc9G7g= github.com/tetratelabs/wazero v1.8.2 h1:yIgLR/b2bN31bjxwXHD8a3d+BogigR952csSDdLYEv4= github.com/tetratelabs/wazero v1.8.2/go.mod h1:yAI0XTsMBhREkM/YDAK/zNou3GoiAce1P6+rp/wQhjs= -golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= -golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= diff --git a/embed/build.sh b/embed/build.sh index ed2aaec5..a6b21d36 100755 --- a/embed/build.sh +++ b/embed/build.sh @@ -14,7 +14,7 @@ trap 'rm -f sqlite3.tmp' EXIT -o sqlite3.wasm "$ROOT/sqlite3/main.c" \ -I"$ROOT/sqlite3" \ -mexec-model=reactor \ - -matomics -msimd128 -mmutable-globals -mmultivalue \ + -msimd128 -mmutable-globals -mmultivalue \ -mbulk-memory -mreference-types \ -mnontrapping-fptoint -msign-ext \ -fno-stack-protector -fno-stack-clash-protection \ diff --git a/embed/sqlite3.wasm b/embed/sqlite3.wasm index c312aa62..9beaa2cc 100755 Binary files a/embed/sqlite3.wasm and b/embed/sqlite3.wasm differ diff --git a/go.mod b/go.mod index 70e4bc61..4ed5cb1c 100644 --- a/go.mod +++ b/go.mod @@ -8,8 +8,8 @@ require ( github.com/ncruces/julianday v1.0.0 github.com/ncruces/sort v0.1.2 github.com/tetratelabs/wazero v1.8.2 - golang.org/x/crypto v0.31.0 - golang.org/x/sys v0.28.0 + golang.org/x/crypto v0.32.0 + golang.org/x/sys v0.29.0 ) require ( diff --git a/go.sum b/go.sum index 496bbd4d..97c9ff3c 100644 --- a/go.sum +++ b/go.sum @@ -10,12 +10,12 @@ github.com/psanford/httpreadat v0.1.0 h1:VleW1HS2zO7/4c7c7zNl33fO6oYACSagjJIyMIw github.com/psanford/httpreadat v0.1.0/go.mod h1:Zg7P+TlBm3bYbyHTKv/EdtSJZn3qwbPwpfZ/I9GKCRE= github.com/tetratelabs/wazero v1.8.2 h1:yIgLR/b2bN31bjxwXHD8a3d+BogigR952csSDdLYEv4= github.com/tetratelabs/wazero v1.8.2/go.mod h1:yAI0XTsMBhREkM/YDAK/zNou3GoiAce1P6+rp/wQhjs= -golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= -golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= +golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= -golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= lukechampine.com/adiantum v1.1.1 h1:4fp6gTxWCqpEbLy40ExiYDDED3oUNWx5cTqBCtPdZqA= diff --git a/gormlite/go.mod b/gormlite/go.mod index 9b4c2afc..bcb46af2 100644 --- a/gormlite/go.mod +++ b/gormlite/go.mod @@ -5,7 +5,7 @@ go 1.21 toolchain go1.23.0 require ( - github.com/ncruces/go-sqlite3 v0.21.0 + github.com/ncruces/go-sqlite3 v0.21.3 gorm.io/gorm v1.25.12 ) @@ -14,6 +14,6 @@ require ( github.com/jinzhu/now v1.1.5 // indirect github.com/ncruces/julianday v1.0.0 // indirect github.com/tetratelabs/wazero v1.8.2 // indirect - golang.org/x/sys v0.28.0 // indirect + golang.org/x/sys v0.29.0 // indirect golang.org/x/text v0.21.0 // indirect ) diff --git a/gormlite/go.sum b/gormlite/go.sum index d752bc5e..6ef0eb61 100644 --- a/gormlite/go.sum +++ b/gormlite/go.sum @@ -2,14 +2,14 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/ncruces/go-sqlite3 v0.21.0 h1:EwKFoy1hHEopN4sFZarmi+McXdbCcbTuLixhEayXVbQ= -github.com/ncruces/go-sqlite3 v0.21.0/go.mod h1:zxMOaSG5kFYVFK4xQa0pdwIszqxqJ0W0BxBgwdrNjuA= +github.com/ncruces/go-sqlite3 v0.21.3 h1:hHkfNQLcbnxPJZhC/RGw9SwP3bfkv/Y0xUHWsr1CdMQ= +github.com/ncruces/go-sqlite3 v0.21.3/go.mod h1:zxMOaSG5kFYVFK4xQa0pdwIszqxqJ0W0BxBgwdrNjuA= github.com/ncruces/julianday v1.0.0 h1:fH0OKwa7NWvniGQtxdJRxAgkBMolni2BjDHaWTxqt7M= github.com/ncruces/julianday v1.0.0/go.mod h1:Dusn2KvZrrovOMJuOt0TNXL6tB7U2E8kvza5fFc9G7g= github.com/tetratelabs/wazero v1.8.2 h1:yIgLR/b2bN31bjxwXHD8a3d+BogigR952csSDdLYEv4= github.com/tetratelabs/wazero v1.8.2/go.mod h1:yAI0XTsMBhREkM/YDAK/zNou3GoiAce1P6+rp/wQhjs= -golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= -golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8= diff --git a/internal/testcfg/testcfg.go b/internal/testcfg/testcfg.go index e5acfb7c..82358961 100644 --- a/internal/testcfg/testcfg.go +++ b/internal/testcfg/testcfg.go @@ -7,14 +7,18 @@ import ( "github.com/tetratelabs/wazero" "github.com/ncruces/go-sqlite3" + "github.com/ncruces/go-sqlite3/internal/util" ) // notest func init() { - sqlite3.RuntimeConfig = wazero.NewRuntimeConfig(). - WithMemoryLimitPages(512) - + if util.CompilerSupported() { + sqlite3.RuntimeConfig = wazero.NewRuntimeConfigCompiler() + } else { + sqlite3.RuntimeConfig = wazero.NewRuntimeConfigInterpreter() + } + sqlite3.RuntimeConfig = sqlite3.RuntimeConfig.WithMemoryLimitPages(512) if os.Getenv("CI") != "" { path := filepath.Join(os.TempDir(), "wazero") if err := os.MkdirAll(path, 0777); err == nil { diff --git a/internal/util/compiler.go b/internal/util/compiler.go new file mode 100644 index 00000000..aeefcced --- /dev/null +++ b/internal/util/compiler.go @@ -0,0 +1,27 @@ +package util + +import ( + "runtime" + + "golang.org/x/sys/cpu" +) + +func CompilerSupported() bool { + switch runtime.GOOS { + case "linux", "android", + "windows", "darwin", + "freebsd", "netbsd", "dragonfly", + "solaris", "illumos": + break + default: + return false + } + switch runtime.GOARCH { + case "amd64": + return cpu.X86.HasSSE41 + case "arm64": + return true + default: + return false + } +} diff --git a/sqlite.go b/sqlite.go index 18a2c2a7..18f8241d 100644 --- a/sqlite.go +++ b/sqlite.go @@ -11,7 +11,6 @@ import ( "github.com/tetratelabs/wazero" "github.com/tetratelabs/wazero/api" - "github.com/tetratelabs/wazero/experimental" "github.com/ncruces/go-sqlite3/internal/util" "github.com/ncruces/go-sqlite3/vfs" @@ -49,14 +48,18 @@ func compileSQLite() { ctx := context.Background() cfg := RuntimeConfig if cfg == nil { - cfg = wazero.NewRuntimeConfig() - if bits.UintSize >= 64 { - cfg = cfg.WithMemoryLimitPages(4096) // 256MB + if util.CompilerSupported() { + cfg = wazero.NewRuntimeConfigCompiler() } else { + cfg = wazero.NewRuntimeConfigInterpreter() + } + if bits.UintSize < 64 { cfg = cfg.WithMemoryLimitPages(512) // 32MB + } else { + cfg = cfg.WithMemoryLimitPages(4096) // 256MB } } - cfg = cfg.WithCoreFeatures(api.CoreFeaturesV2 | experimental.CoreFeaturesThreads) + cfg = cfg.WithCoreFeatures(api.CoreFeaturesV2) instance.runtime = wazero.NewRuntimeWithConfig(ctx, cfg) diff --git a/vfs/tests/mptest/mptest_test.go b/vfs/tests/mptest/mptest_test.go index c6108781..ad27ab62 100644 --- a/vfs/tests/mptest/mptest_test.go +++ b/vfs/tests/mptest/mptest_test.go @@ -31,8 +31,6 @@ import ( //go:embed testdata/* var scripts embed.FS -const qemuCI = runtime.GOARCH != "386" && runtime.GOARCH != "amd64" && runtime.GOARCH != "arm64" - var ( rt wazero.Runtime module wazero.CompiledModule @@ -155,8 +153,8 @@ func Test_crash01(t *testing.T) { } func Test_multiwrite01(t *testing.T) { - if os.Getenv("CI") != "" && qemuCI { - t.Skip("skipping in CI") + if testing.Short() && os.Getenv("CI") != "" { + t.Skip("skipping in slow CI") } if !vfs.SupportsFileLocking { t.Skip("skipping without locks") @@ -185,8 +183,8 @@ func Test_config01_memory(t *testing.T) { } func Test_multiwrite01_memory(t *testing.T) { - if os.Getenv("CI") != "" && qemuCI { - t.Skip("skipping in CI") + if testing.Short() && os.Getenv("CI") != "" { + t.Skip("skipping in slow CI") } memdb.Create("test.db", nil) @@ -220,8 +218,8 @@ func Test_crash01_wal(t *testing.T) { } func Test_multiwrite01_wal(t *testing.T) { - if os.Getenv("CI") != "" && qemuCI { - t.Skip("skipping in CI") + if testing.Short() && os.Getenv("CI") != "" { + t.Skip("skipping in slow CI") } if !vfs.SupportsSharedMemory { t.Skip("skipping without shared memory") diff --git a/vfs/tests/mptest/wasm/build.sh b/vfs/tests/mptest/wasm/build.sh index 4b2eff70..9e660cf9 100755 --- a/vfs/tests/mptest/wasm/build.sh +++ b/vfs/tests/mptest/wasm/build.sh @@ -10,7 +10,7 @@ WASI_SDK="$ROOT/tools/wasi-sdk/bin" "$WASI_SDK/clang" --target=wasm32-wasi -std=c23 -g0 -O2 \ -o mptest.wasm main.c \ -I"$ROOT/sqlite3" \ - -matomics -msimd128 -mmutable-globals -mmultivalue \ + -msimd128 -mmutable-globals -mmultivalue \ -mbulk-memory -mreference-types \ -mnontrapping-fptoint -msign-ext \ -fno-stack-protector -fno-stack-clash-protection \ diff --git a/vfs/tests/mptest/wasm/mptest.wasm b/vfs/tests/mptest/wasm/mptest.wasm index 53870c8e..76f27457 100644 Binary files a/vfs/tests/mptest/wasm/mptest.wasm and b/vfs/tests/mptest/wasm/mptest.wasm differ diff --git a/vfs/tests/speedtest1/wasm/build.sh b/vfs/tests/speedtest1/wasm/build.sh index 9189008a..833205f9 100755 --- a/vfs/tests/speedtest1/wasm/build.sh +++ b/vfs/tests/speedtest1/wasm/build.sh @@ -10,7 +10,7 @@ WASI_SDK="$ROOT/tools/wasi-sdk/bin" "$WASI_SDK/clang" --target=wasm32-wasi -std=c23 -g0 -O2 \ -o speedtest1.wasm main.c \ -I"$ROOT/sqlite3" \ - -matomics -msimd128 -mmutable-globals -mmultivalue \ + -msimd128 -mmutable-globals -mmultivalue \ -mbulk-memory -mreference-types \ -mnontrapping-fptoint -msign-ext \ -fno-stack-protector -fno-stack-clash-protection \ diff --git a/vfs/tests/speedtest1/wasm/speedtest1.wasm b/vfs/tests/speedtest1/wasm/speedtest1.wasm index d375efcd..97265640 100644 Binary files a/vfs/tests/speedtest1/wasm/speedtest1.wasm and b/vfs/tests/speedtest1/wasm/speedtest1.wasm differ