cmake-wasm.yml 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. name: CMake WebAssembly
  2. on:
  3. push:
  4. branches: [ "master" ]
  5. pull_request:
  6. branches: [ "master" ]
  7. env:
  8. wasmtime_version: v7.0.0
  9. wasmer_version: v3.1.1
  10. jobs:
  11. build_wasi_sdk:
  12. strategy:
  13. matrix:
  14. BUILD_TYPE: [Release, Debug, RelWithDebInfo, MinSizeRel]
  15. C_FLAGS: ['', '-msimd128']
  16. wasi_sdk_version: [19, 20]
  17. # The CMake configure and build commands are platform agnostic and should work equally well on Windows or Mac.
  18. # You can convert this to a matrix build if you need cross-platform coverage.
  19. # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
  20. runs-on: ubuntu-latest
  21. steps:
  22. - uses: actions/checkout@v4
  23. - name: Downloading wasi-sdk
  24. run: |
  25. cd ${{github.workspace}}
  26. 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
  27. tar xf wasi-sdk-${{matrix.wasi_sdk_version}}.0-linux.tar.gz
  28. # Building a wasm library without needing to define a main():
  29. # https://github.com/WebAssembly/wasi-sdk/issues/332
  30. - name: Modify CMakeLists.txt for WASI
  31. run: |
  32. echo 'if (CMAKE_SYSTEM_NAME STREQUAL "WASI")' >> CMakeLists.txt
  33. echo ' target_link_options(${PROJECT_NAME} PRIVATE -mexec-model=reactor)' >> CMakeLists.txt
  34. echo 'endif()' >> CMakeLists.txt
  35. - name: Configure CMake
  36. # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
  37. # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
  38. # Below suppress <<'clock' is deprecated: WASI lacks process-associated clocks; ...>> warns:
  39. # -D_WASI_EMULATED_PROCESS_CLOCKS" -DCMAKE_EXE_LINKER_FLAGS="-lwasi-emulated-process-clocks
  40. 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
  41. - name: Build
  42. # Build your program with the given configuration
  43. run: cmake --build ${{github.workspace}}/build --config ${{matrix.BUILD_TYPE}}
  44. - name: Test with wasmtime
  45. run: |
  46. cd ${{github.workspace}}
  47. ls -lh ${{github.workspace}}/build/
  48. wget --no-verbose https://github.com/bytecodealliance/wasmtime/releases/download/${{env.wasmtime_version}}/wasmtime-${{env.wasmtime_version}}-x86_64-linux.tar.xz
  49. tar xf wasmtime-${{env.wasmtime_version}}-x86_64-linux.tar.xz
  50. ./wasmtime-${{env.wasmtime_version}}-x86_64-linux/wasmtime run --wasm-features simd ${{github.workspace}}/build/tests
  51. - name: Test with wasmer
  52. run: |
  53. cd ${{github.workspace}}
  54. mkdir wasmer
  55. cd wasmer
  56. wget --no-verbose https://github.com/wasmerio/wasmer/releases/download/${{env.wasmer_version}}/wasmer-linux-amd64.tar.gz
  57. tar xf wasmer-linux-amd64.tar.gz
  58. ./bin/wasmer run --enable-simd ${{github.workspace}}/build/tests
  59. build_emsdk:
  60. strategy:
  61. matrix:
  62. BUILD_TYPE: [Release, Debug, RelWithDebInfo, MinSizeRel]
  63. C_FLAGS: ['', '-msimd128', '-msse -msse2 -msimd128', '-msse -msse2 -msse3 -msse4 -msimd128']
  64. runs-on: ubuntu-latest
  65. steps:
  66. - uses: actions/checkout@v4
  67. - name: Setup emsdk
  68. uses: mymindstorm/setup-emsdk@v12
  69. - name: Verify emsdk
  70. run: emcc -v
  71. - name: Configure CMake
  72. # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
  73. # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
  74. 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
  75. - name: Build
  76. # Build your program with the given configuration
  77. run: cmake --build ${{github.workspace}}/build --config ${{matrix.BUILD_TYPE}}
  78. - name: Test with wasmtime
  79. run: |
  80. cd ${{github.workspace}}
  81. ls -lh ${{github.workspace}}/build/
  82. wget --no-verbose https://github.com/bytecodealliance/wasmtime/releases/download/${{env.wasmtime_version}}/wasmtime-${{env.wasmtime_version}}-x86_64-linux.tar.xz
  83. tar xf wasmtime-${{env.wasmtime_version}}-x86_64-linux.tar.xz
  84. ./wasmtime-${{env.wasmtime_version}}-x86_64-linux/wasmtime run --wasm-features simd ${{github.workspace}}/build/tests.wasm
  85. - name: Test with wasmer
  86. run: |
  87. cd ${{github.workspace}}
  88. mkdir wasmer
  89. cd wasmer
  90. wget --no-verbose https://github.com/wasmerio/wasmer/releases/download/${{env.wasmer_version}}/wasmer-linux-amd64.tar.gz
  91. tar xf wasmer-linux-amd64.tar.gz
  92. ./bin/wasmer run --enable-simd ${{github.workspace}}/build/tests.wasm