summaryrefslogtreecommitdiffstats
path: root/.github/workflows/main.yml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/main.yml')
-rw-r--r--.github/workflows/main.yml141
1 files changed, 141 insertions, 0 deletions
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
new file mode 100644
index 0000000..83c2751
--- /dev/null
+++ b/.github/workflows/main.yml
@@ -0,0 +1,141 @@
+name: CI
+on: [push, pull_request]
+
+jobs:
+ buildlibc:
+ name: Build libc
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [ubuntu-latest, macos-latest, windows-latest]
+ # oldest and newest supported LLVM version
+ clang_version: [10.0.0, 14.0.0]
+ steps:
+ - uses: actions/checkout@v1
+ with:
+ submodules: true
+
+ - name: Install libtinfo5
+ run: |
+ set -ex
+ sudo apt-get update
+ sudo apt-get install -y libtinfo5
+ if: matrix.os == 'ubuntu-latest'
+
+ - name: Install LLVM tools (Windows)
+ shell: bash
+ run: |
+ curl -fsSLO https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ matrix.clang_version }}/LLVM-${{ matrix.clang_version }}-win64.exe
+ 7z x LLVM-${{ matrix.clang_version }}-win64.exe -y -o"llvm"
+ echo "$(pwd)/llvm/bin" >> $GITHUB_PATH
+ echo "CC=$(pwd)/llvm/bin/clang.exe" >> $GITHUB_ENV
+ echo "AR=$(pwd)/llvm/bin/llvm-ar.exe" >> $GITHUB_ENV
+ echo "NM=$(pwd)/llvm/bin/llvm-nm.exe" >> $GITHUB_ENV
+ if: matrix.os == 'windows-latest'
+
+ - name: Override llvm-nm with one from rustup (Windows)
+ run: |
+ rustup update stable
+ rustup default stable
+ rustup component add llvm-tools-preview
+ echo "NM=$(rustc --print sysroot|sed 's|C:|/c|'|sed 's|\\|/|g')/lib/rustlib/x86_64-pc-windows-msvc/bin/llvm-nm.exe" >> $GITHUB_ENV
+ if: matrix.os == 'windows-latest'
+
+ - name: Install LLVM tools (MacOS)
+ shell: bash
+ run: |
+ curl -sSfL https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ matrix.clang_version }}/clang+llvm-${{ matrix.clang_version }}-x86_64-apple-darwin.tar.xz | tar xJf -
+ export CLANG_DIR=`pwd`/clang+llvm-${{ matrix.clang_version }}-x86_64-apple-darwin/bin
+ echo "$CLANG_DIR" >> $GITHUB_PATH
+ echo "CC=$CLANG_DIR/clang" >> $GITHUB_ENV
+ echo "AR=$CLANG_DIR/llvm-ar" >> $GITHUB_ENV
+ echo "NM=$CLANG_DIR/llvm-nm" >> $GITHUB_ENV
+ if: matrix.os == 'macos-latest'
+
+ - name: Install LLVM tools (Linux)
+ shell: bash
+ run: |
+ curl -sSfL https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ matrix.clang_version }}/clang+llvm-${{ matrix.clang_version }}-x86_64-linux-gnu-ubuntu-18.04.tar.xz | tar xJf -
+ export CLANG_DIR=`pwd`/clang+llvm-${{ matrix.clang_version }}-x86_64-linux-gnu-ubuntu-18.04/bin
+ echo "$CLANG_DIR" >> $GITHUB_PATH
+ echo "CLANG_DIR=$CLANG_DIR" >> $GITHUB_ENV
+ echo "CC=$CLANG_DIR/clang" >> $GITHUB_ENV
+ echo "AR=$CLANG_DIR/llvm-ar" >> $GITHUB_ENV
+ echo "NM=$CLANG_DIR/llvm-nm" >> $GITHUB_ENV
+ if: matrix.os == 'ubuntu-latest'
+
+ - name: Build libc
+ shell: bash
+ run: make -j4
+
+ - name: Test
+ shell: bash
+ # For Clang linking to work correctly, we need to place Clang's runtime
+ # library for `wasm32-wasi` in the right location (i.e., the `mkdir` and
+ # `cp` below).
+ run: |
+ cd test
+ make download
+ export WASI_DIR=$(realpath $CLANG_DIR/../lib/clang/${{ matrix.clang_version }}/lib/wasi/)
+ mkdir -p $WASI_DIR
+ cp download/lib/wasi/libclang_rt.builtins-wasm32.a $WASI_DIR
+ make test
+ # The older version of Clang does not provide the expected symbol for the
+ # test entrypoints: `undefined symbol: __main_argc_argv`.
+ if: matrix.os == 'ubuntu-latest' && matrix.clang_version != '10.0.0'
+
+ - uses: actions/upload-artifact@v1
+ with:
+ # Upload the sysroot folder. Give it a name according to the OS it was built for.
+ name: ${{ format( 'sysroot-{0}.tgz', matrix.os) }}
+ path: sysroot
+
+ - name: Build libc + threads
+ # Only build the thread-capable wasi-libc in the latest supported Clang
+ # version; the earliest version does not have all necessary builtins
+ # (e.g., `__builtin_wasm_memory_atomic_notify`).
+ if: matrix.clang_version != '10.0.0'
+ shell: bash
+ run: make -j4 THREAD_MODEL=posix
+
+ # Disable the headerstest job for now, while WASI transitions from the
+ # witx snapshots to wit proposals, and we have a few manual edits to the
+ # generated header to make life easier for folks.
+ headerstest:
+ if: ${{ false }} # Disable the headers test for now.
+ name: wasi-headers test
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [ubuntu-latest, macos-latest, windows-latest]
+ steps:
+ - uses: actions/checkout@v1
+ with:
+ submodules: true
+ - name: Install Rust (rustup)
+ shell: bash
+ run: rustup update stable --no-self-update && rustup default stable
+ if: matrix.os != 'macos-latest'
+ - name: Install Rust (macos)
+ run: |
+ curl https://sh.rustup.rs | sh -s -- -y
+ echo "$HOME/.cargo/bin" >> $GITHUB_PATH
+ if: matrix.os == 'macos-latest'
+ - run: cargo fetch
+ working-directory: tools/wasi-headers
+ - run: cargo build
+ working-directory: tools/wasi-headers
+ - run: cargo test
+ working-directory: tools/wasi-headers
+
+ rustfmt:
+ name: Rustfmt
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+ with:
+ submodules: true
+ - name: Install Rust
+ run: rustup update stable && rustup default stable && rustup component add rustfmt
+ - run: cargo fmt -- --check
+ working-directory: tools/wasi-headers