Ver Fonte

feat(wasi-threads): Add CI for WASI threads (#1819)

Update wasi-sdk from 12.0 to 16.0 in CI
Build wasi-libc and build wai-threads sample in CI
Enrico Loparco há 3 anos atrás
pai
commit
7d19b229eb

+ 23 - 4
.github/workflows/compilation_on_android_ubuntu.yml

@@ -232,7 +232,7 @@ jobs:
         os: [ubuntu-20.04, ubuntu-22.04]
         os: [ubuntu-20.04, ubuntu-22.04]
         wasi_sdk_release:
         wasi_sdk_release:
           [
           [
-            "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-linux.tar.gz",
+            "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-16/wasi-sdk-16.0-linux.tar.gz",
           ]
           ]
         wabt_release:
         wabt_release:
           [
           [
@@ -299,7 +299,7 @@ jobs:
         os: [ubuntu-20.04, ubuntu-22.04]
         os: [ubuntu-20.04, ubuntu-22.04]
         wasi_sdk_release:
         wasi_sdk_release:
           [
           [
-            "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-linux.tar.gz",
+            "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-16/wasi-sdk-16.0-linux.tar.gz",
           ]
           ]
         wabt_release:
         wabt_release:
           [
           [
@@ -313,8 +313,8 @@ jobs:
         run: |
         run: |
           cd /opt
           cd /opt
           sudo wget ${{ matrix.wasi_sdk_release }}
           sudo wget ${{ matrix.wasi_sdk_release }}
-          sudo tar -xzf wasi-sdk-12.0-*.tar.gz
-          sudo mv wasi-sdk-12.0 wasi-sdk
+          sudo tar -xzf wasi-sdk-16.0-*.tar.gz
+          sudo mv wasi-sdk-16.0 wasi-sdk
 
 
       - name: download and install wabt
       - name: download and install wabt
         run: |
         run: |
@@ -323,6 +323,17 @@ jobs:
           sudo tar -xzf wabt-1.0.24-*.tar.gz
           sudo tar -xzf wabt-1.0.24-*.tar.gz
           sudo mv wabt-1.0.24 wabt
           sudo mv wabt-1.0.24 wabt
 
 
+      - name: build wasi-libc (needed for wasi-threads)
+        run: |
+          git clone --branch wasi-sdk-17 https://github.com/WebAssembly/wasi-libc
+          cd wasi-libc
+          make \
+            AR=/opt/wasi-sdk/bin/llvm-ar \
+            NM=/opt/wasi-sdk/bin/llvm-nm \
+            CC=/opt/wasi-sdk/bin/clang \
+            THREAD_MODEL=posix
+        working-directory: core/deps
+
       - name: Build Sample [basic]
       - name: Build Sample [basic]
         run: |
         run: |
           cd samples/basic
           cd samples/basic
@@ -376,6 +387,14 @@ jobs:
           exit $?
           exit $?
         working-directory: ./samples/simple
         working-directory: ./samples/simple
 
 
+      - name: Build Sample [wasi-threads]
+        run: |
+          cd samples/wasi-threads
+          mkdir build && cd build
+          cmake -DWASI_SYSROOT=`pwd`/../../../core/deps/wasi-libc/sysroot ..
+          cmake --build . --config Release --parallel 4
+          ./iwasm wasm-apps/no_pthread.wasm
+
   spec_test:
   spec_test:
     needs: [build_iwasm, build_llvm_libraries, build_wamrc]
     needs: [build_iwasm, build_llvm_libraries, build_wamrc]
     runs-on: ubuntu-20.04
     runs-on: ubuntu-20.04

+ 23 - 4
.github/workflows/compilation_on_macos.yml

@@ -210,7 +210,7 @@ jobs:
             #$AOT_BUILD_OPTIONS,
             #$AOT_BUILD_OPTIONS,
           ]
           ]
         os: [macos-latest]
         os: [macos-latest]
-        wasi_sdk_release: ["https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-macos.tar.gz"]
+        wasi_sdk_release: ["https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-16/wasi-sdk-16.0-macos.tar.gz"]
         wabt_release: ["https://github.com/WebAssembly/wabt/releases/download/1.0.24/wabt-1.0.24-macos.tar.gz"]
         wabt_release: ["https://github.com/WebAssembly/wabt/releases/download/1.0.24/wabt-1.0.24-macos.tar.gz"]
     steps:
     steps:
       - name: checkout
       - name: checkout
@@ -246,7 +246,7 @@ jobs:
     strategy:
     strategy:
       matrix:
       matrix:
         os: [macos-latest]
         os: [macos-latest]
-        wasi_sdk_release: ["https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-macos.tar.gz"]
+        wasi_sdk_release: ["https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-16/wasi-sdk-16.0-macos.tar.gz"]
         wabt_release: ["https://github.com/WebAssembly/wabt/releases/download/1.0.24/wabt-1.0.24-macos.tar.gz"]
         wabt_release: ["https://github.com/WebAssembly/wabt/releases/download/1.0.24/wabt-1.0.24-macos.tar.gz"]
     steps:
     steps:
       - name: checkout
       - name: checkout
@@ -256,8 +256,8 @@ jobs:
         run: |
         run: |
           cd /opt
           cd /opt
           sudo wget ${{ matrix.wasi_sdk_release }}
           sudo wget ${{ matrix.wasi_sdk_release }}
-          sudo tar -xzf wasi-sdk-12.0-*.tar.gz
-          sudo mv wasi-sdk-12.0 wasi-sdk
+          sudo tar -xzf wasi-sdk-16.0-*.tar.gz
+          sudo mv wasi-sdk-16.0 wasi-sdk
 
 
       - name: download and install wabt
       - name: download and install wabt
         run: |
         run: |
@@ -266,6 +266,17 @@ jobs:
           sudo tar -xzf wabt-1.0.24-*.tar.gz
           sudo tar -xzf wabt-1.0.24-*.tar.gz
           sudo mv wabt-1.0.24 wabt
           sudo mv wabt-1.0.24 wabt
 
 
+      - name: build wasi-libc (needed for wasi-threads)
+        run: |
+          git clone --branch wasi-sdk-17 https://github.com/WebAssembly/wasi-libc
+          cd wasi-libc
+          make \
+            AR=/opt/wasi-sdk/bin/llvm-ar \
+            NM=/opt/wasi-sdk/bin/llvm-nm \
+            CC=/opt/wasi-sdk/bin/clang \
+            THREAD_MODEL=posix
+        working-directory: core/deps
+
       - name: Build Sample [basic]
       - name: Build Sample [basic]
         run: |
         run: |
           cd samples/basic
           cd samples/basic
@@ -311,3 +322,11 @@ jobs:
           cmake ..
           cmake ..
           cmake --build . --config Release --parallel 4
           cmake --build . --config Release --parallel 4
           ./hello
           ./hello
+
+      - name: Build Sample [wasi-threads]
+        run: |
+          cd samples/wasi-threads
+          mkdir build && cd build
+          cmake -DWASI_SYSROOT=`pwd`/../../../core/deps/wasi-libc/sysroot ..
+          cmake --build . --config Release --parallel 4
+          ./iwasm wasm-apps/no_pthread.wasm

+ 22 - 3
.github/workflows/compilation_on_sgx.yml

@@ -244,7 +244,7 @@ jobs:
         os: [ubuntu-20.04]
         os: [ubuntu-20.04]
         wasi_sdk_release:
         wasi_sdk_release:
           [
           [
-            "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-12/wasi-sdk-12.0-linux.tar.gz",
+            "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-16/wasi-sdk-16.0-linux.tar.gz",
           ]
           ]
         wabt_release:
         wabt_release:
           [
           [
@@ -258,8 +258,8 @@ jobs:
         run: |
         run: |
           cd /opt
           cd /opt
           sudo wget ${{ matrix.wasi_sdk_release }}
           sudo wget ${{ matrix.wasi_sdk_release }}
-          sudo tar -xzf wasi-sdk-12.0-*.tar.gz
-          sudo mv wasi-sdk-12.0 wasi-sdk
+          sudo tar -xzf wasi-sdk-16.0-*.tar.gz
+          sudo mv wasi-sdk-16.0 wasi-sdk
 
 
       - name: download and install wabt
       - name: download and install wabt
         run: |
         run: |
@@ -268,6 +268,17 @@ jobs:
           sudo tar -xzf wabt-1.0.24-*.tar.gz
           sudo tar -xzf wabt-1.0.24-*.tar.gz
           sudo mv wabt-1.0.24 wabt
           sudo mv wabt-1.0.24 wabt
 
 
+      - name: build wasi-libc (needed for wasi-threads)
+        run: |
+          git clone --branch wasi-sdk-17 https://github.com/WebAssembly/wasi-libc
+          cd wasi-libc
+          make \
+            AR=/opt/wasi-sdk/bin/llvm-ar \
+            NM=/opt/wasi-sdk/bin/llvm-nm \
+            CC=/opt/wasi-sdk/bin/clang \
+            THREAD_MODEL=posix
+        working-directory: core/deps
+
       - name: install SGX SDK and necessary libraries
       - name: install SGX SDK and necessary libraries
         run: |
         run: |
           mkdir -p /opt/intel
           mkdir -p /opt/intel
@@ -327,6 +338,14 @@ jobs:
           cmake --build . --config Release --parallel 4
           cmake --build . --config Release --parallel 4
           ./hello
           ./hello
 
 
+      - name: Build Sample [wasi-threads]
+        run: |
+          cd samples/wasi-threads
+          mkdir build && cd build
+          cmake -DWASI_SYSROOT=`pwd`/../../../core/deps/wasi-libc/sysroot ..
+          cmake --build . --config Release --parallel 4
+          ./iwasm wasm-apps/no_pthread.wasm
+
   spec_test_default:
   spec_test_default:
     needs: [build_iwasm, build_llvm_libraries, build_wamrc]
     needs: [build_iwasm, build_llvm_libraries, build_wamrc]
     runs-on: ubuntu-20.04
     runs-on: ubuntu-20.04

+ 2 - 0
samples/wasi-threads/wasm-apps/CMakeLists.txt

@@ -29,6 +29,8 @@ function (compile_sample SOURCE_FILE)
     LINKER:--export=__data_end
     LINKER:--export=__data_end
     LINKER:--shared-memory,--max-memory=1966080
     LINKER:--shared-memory,--max-memory=1966080
     LINKER:--export=wasi_thread_start
     LINKER:--export=wasi_thread_start
+    LINKER:--export=malloc
+    LINKER:--export=free
   )
   )
 endfunction ()
 endfunction ()