diff options
Diffstat (limited to '.github/workflows/main.yml')
-rw-r--r-- | .github/workflows/main.yml | 141 |
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 |