diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c0343b42a..76cb19936 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,6 +39,41 @@ jobs: - name: Run clippy run: cargo clippy --workspace --all-targets --all-features + wasm-check: + name: WASM walletkit-db compile check + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - name: Checkout code + uses: actions/checkout@v6 + + - name: Set up Rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.92.0 + targets: wasm32-unknown-unknown + + - name: Install LLVM toolchain for WASM C build + shell: bash + run: | + set -euo pipefail + sudo apt-get update + sudo apt-get install -y clang-18 llvm-18 + + - name: Configure C toolchain for wasm32 + shell: bash + run: | + set -euo pipefail + echo "CC_wasm32_unknown_unknown=clang-18" >> "$GITHUB_ENV" + echo "AR_wasm32_unknown_unknown=llvm-ar-18" >> "$GITHUB_ENV" + clang-18 --version | head -n1 + llvm-ar-18 --version | head -n1 + + - name: Run WASM compile check + run: cargo check -p walletkit-db --target wasm32-unknown-unknown + swift-build-and-test: name: Swift Build & Foreign Binding Tests runs-on: macos-14 diff --git a/walletkit-db/src/ffi.rs b/walletkit-db/src/ffi.rs index 75b150920..117b017e8 100644 --- a/walletkit-db/src/ffi.rs +++ b/walletkit-db/src/ffi.rs @@ -514,7 +514,7 @@ mod raw { wasm::sqlite3_open_v2(filename.cast(), pp_db.cast(), flags, z_vfs.cast()) } pub unsafe fn sqlite3_close_v2(db: *mut c_void) -> c_int { - wasm::sqlite3_close_v2(db.cast()) + wasm::sqlite3_close(db.cast()) } pub unsafe fn sqlite3_exec( db: *mut c_void, @@ -566,7 +566,9 @@ mod raw { n: c_int, destructor: isize, ) -> c_int { - wasm::sqlite3_bind_blob(stmt.cast(), index, value, n, destructor) + // WASM bindings use typed destructor callbacks; all callers pass SQLITE_TRANSIENT. + let _ = destructor; + wasm::sqlite3_bind_blob(stmt.cast(), index, value, n, wasm::SQLITE_TRANSIENT()) } pub unsafe fn sqlite3_bind_text( stmt: *mut c_void, @@ -575,7 +577,15 @@ mod raw { n: c_int, destructor: isize, ) -> c_int { - wasm::sqlite3_bind_text(stmt.cast(), index, value.cast(), n, destructor) + // WASM bindings use typed destructor callbacks; all callers pass SQLITE_TRANSIENT. + let _ = destructor; + wasm::sqlite3_bind_text( + stmt.cast(), + index, + value.cast(), + n, + wasm::SQLITE_TRANSIENT(), + ) } pub unsafe fn sqlite3_bind_null(stmt: *mut c_void, index: c_int) -> c_int { wasm::sqlite3_bind_null(stmt.cast(), index)