| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- name: CMake WebAssembly
- on:
- push:
- branches: [ "master" ]
- pull_request:
- branches: [ "master" ]
- env:
- wasmtime_version: v7.0.0
- wasmer_version: v3.1.1
- jobs:
- build_wasi_sdk:
- strategy:
- matrix:
- BUILD_TYPE: [Release, Debug, RelWithDebInfo, MinSizeRel]
- C_FLAGS: ['', '-msimd128']
- wasi_sdk_version: [19, 20]
- # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac.
- # You can convert this to a matrix build if you need cross-platform coverage.
- # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
- - name: Downloading wasi-sdk
- run: |
- cd ${{github.workspace}}
- wget --no-verbose https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${{matrix.wasi_sdk_version}}/wasi-sdk-${{matrix.wasi_sdk_version}}.0-linux.tar.gz
- tar xf wasi-sdk-${{matrix.wasi_sdk_version}}.0-linux.tar.gz
- # Building a wasm library without needing to define a main():
- # https://github.com/WebAssembly/wasi-sdk/issues/332
- - name: Modify CMakeLists.txt for WASI
- run: |
- echo 'if (CMAKE_SYSTEM_NAME STREQUAL "WASI")' >> CMakeLists.txt
- echo ' target_link_options(${PROJECT_NAME} PRIVATE -mexec-model=reactor)' >> CMakeLists.txt
- echo 'endif()' >> CMakeLists.txt
- - name: Configure CMake
- # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
- # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
- # Below suppress <<'clock' is deprecated: WASI lacks process-associated clocks; ...>> warns:
- # -D_WASI_EMULATED_PROCESS_CLOCKS" -DCMAKE_EXE_LINKER_FLAGS="-lwasi-emulated-process-clocks
- run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{matrix.BUILD_TYPE}} -DCMAKE_C_FLAGS="${{matrix.C_FLAGS}} -D_WASI_EMULATED_PROCESS_CLOCKS" -DCMAKE_EXE_LINKER_FLAGS="-lwasi-emulated-process-clocks" -DCMAKE_TOOLCHAIN_FILE=${{github.workspace}}/wasi-sdk-${{matrix.wasi_sdk_version}}.0/share/cmake/wasi-sdk.cmake -DWASI_SDK_PREFIX=${{github.workspace}}/wasi-sdk-${{matrix.wasi_sdk_version}}.0 -DCGLM_STATIC=ON -DCGLM_SHARED=OFF -DCGLM_USE_TEST=ON
- - name: Build
- # Build your program with the given configuration
- run: cmake --build ${{github.workspace}}/build --config ${{matrix.BUILD_TYPE}}
- - name: Test with wasmtime
- run: |
- cd ${{github.workspace}}
- ls -lh ${{github.workspace}}/build/
- wget --no-verbose https://github.com/bytecodealliance/wasmtime/releases/download/${{env.wasmtime_version}}/wasmtime-${{env.wasmtime_version}}-x86_64-linux.tar.xz
- tar xf wasmtime-${{env.wasmtime_version}}-x86_64-linux.tar.xz
- ./wasmtime-${{env.wasmtime_version}}-x86_64-linux/wasmtime run --wasm-features simd ${{github.workspace}}/build/tests
- - name: Test with wasmer
- run: |
- cd ${{github.workspace}}
- mkdir wasmer
- cd wasmer
- wget --no-verbose https://github.com/wasmerio/wasmer/releases/download/${{env.wasmer_version}}/wasmer-linux-amd64.tar.gz
- tar xf wasmer-linux-amd64.tar.gz
- ./bin/wasmer run --enable-simd ${{github.workspace}}/build/tests
- build_emsdk:
- strategy:
- matrix:
- BUILD_TYPE: [Release, Debug, RelWithDebInfo, MinSizeRel]
- C_FLAGS: ['', '-msimd128', '-msse -msse2 -msimd128', '-msse -msse2 -msse3 -msse4 -msimd128']
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
- - name: Setup emsdk
- uses: mymindstorm/setup-emsdk@v12
- - name: Verify emsdk
- run: emcc -v
- - name: Configure CMake
- # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
- # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
- run: emcmake cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{matrix.BUILD_TYPE}} -DCMAKE_C_FLAGS="${{matrix.C_FLAGS}}" -DCMAKE_EXE_LINKER_FLAGS="-s STANDALONE_WASM" -DCGLM_STATIC=ON -DCGLM_USE_TEST=ON
- - name: Build
- # Build your program with the given configuration
- run: cmake --build ${{github.workspace}}/build --config ${{matrix.BUILD_TYPE}}
- - name: Test with wasmtime
- run: |
- cd ${{github.workspace}}
- ls -lh ${{github.workspace}}/build/
- wget --no-verbose https://github.com/bytecodealliance/wasmtime/releases/download/${{env.wasmtime_version}}/wasmtime-${{env.wasmtime_version}}-x86_64-linux.tar.xz
- tar xf wasmtime-${{env.wasmtime_version}}-x86_64-linux.tar.xz
- ./wasmtime-${{env.wasmtime_version}}-x86_64-linux/wasmtime run --wasm-features simd ${{github.workspace}}/build/tests.wasm
- - name: Test with wasmer
- run: |
- cd ${{github.workspace}}
- mkdir wasmer
- cd wasmer
- wget --no-verbose https://github.com/wasmerio/wasmer/releases/download/${{env.wasmer_version}}/wasmer-linux-amd64.tar.gz
- tar xf wasmer-linux-amd64.tar.gz
- ./bin/wasmer run --enable-simd ${{github.workspace}}/build/tests.wasm
|