From cea9e31bdd849eb0c17611bb99e33d590e126164 Mon Sep 17 00:00:00 2001 From: amesgen Date: Mon, 3 Apr 2023 13:34:42 +0200 Subject: [PATCH] Add WASI initialization support --- .github/workflows/simple.yml | 26 ++++++++++++++++++++++++++ cbits-wasi/init.c | 8 ++++++++ splitmix.cabal | 10 ++++++++-- 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 cbits-wasi/init.c diff --git a/.github/workflows/simple.yml b/.github/workflows/simple.yml index 8865f90..3c02c2b 100644 --- a/.github/workflows/simple.yml +++ b/.github/workflows/simple.yml @@ -44,3 +44,29 @@ jobs: - name: Test run: cabal test all --enable-tests --test-show-details=direct + wasi: + runs-on: ubuntu-latest + strategy: + matrix: + ghc: ['9.6', '9.8', '9.10', '9.12'] + fail-fast: false + steps: + - name: setup-ghc-wasm32-wasi + run: | + cd $(mktemp -d) + curl -L https://gitlab.haskell.org/haskell-wasm/ghc-wasm-meta/-/archive/$GHC_WASM_META_REV/ghc-wasm-meta.tar.gz | tar xz --strip-components=1 + ./setup.sh + ~/.ghc-wasm/add_to_github_path.sh + env: + GHC_WASM_META_REV: f0faac335c6f5e967d1bdbfca5768232483fd2a8 + FLAVOUR: ${{ matrix.ghc }} + - uses: actions/checkout@v4 + - name: Build + run: | + wasm32-wasi-cabal build splitmix splitmix:test:examples splitmix:test:initialization + - name: Test + run: | + for test in examples initialization; do + echo --- Running test $test --- + wasmtime $(wasm32-wasi-cabal list-bin splitmix:test:$test) + done diff --git a/cbits-wasi/init.c b/cbits-wasi/init.c new file mode 100644 index 0000000..2b9b017 --- /dev/null +++ b/cbits-wasi/init.c @@ -0,0 +1,8 @@ +#include +#include + +uint64_t splitmix_init() { + uint64_t result; + int r = getentropy(&result, sizeof(uint64_t)); + return r == 0 ? result : 0xfeed1000; +} diff --git a/splitmix.cabal b/splitmix.cabal index fc1cb14..c66d12e 100644 --- a/splitmix.cabal +++ b/splitmix.cabal @@ -93,7 +93,11 @@ library c-sources: cbits-win/init.c else - c-sources: cbits-unix/init.c + if arch(wasm32) + c-sources: cbits-wasi/init.c + + else + c-sources: cbits-unix/init.c else cpp-options: -DSPLITMIX_INIT_COMPAT=1 @@ -226,7 +230,9 @@ test-suite splitmix-testu01 test-suite initialization default-language: Haskell2010 type: exitcode-stdio-1.0 - ghc-options: -Wall -threaded -rtsopts + ghc-options: -Wall -rtsopts + if !arch(wasm32) + ghc-options: -threaded hs-source-dirs: tests main-is: Initialization.hs build-depends: