Skip to content

Commit a11b99d

Browse files
committed
Revert "Refactor how CI works in this repository (WebAssembly#588)"
This reverts commit 48eb92c.
1 parent 205dd23 commit a11b99d

File tree

3 files changed

+132
-195
lines changed

3 files changed

+132
-195
lines changed

.github/actions/setup/action.yml

Lines changed: 0 additions & 60 deletions
This file was deleted.

.github/workflows/main.yml

Lines changed: 125 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -2,163 +2,165 @@ name: CI
22
on: [push, pull_request]
33

44
concurrency:
5-
group: ${{ github.workflow }}-${{ github.ref }}
5+
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
66
cancel-in-progress: true
77

8-
defaults:
9-
run:
10-
shell: bash
11-
128
jobs:
139
buildlibc:
14-
name: ${{ matrix.name }}
10+
name: Build libc
1511
runs-on: ${{ matrix.os }}
16-
env: ${{ matrix.env || fromJSON('{}') }}
1712
strategy:
18-
fail-fast: false
1913
matrix:
14+
os: [ubuntu-22.04, macos-15, windows-2025]
15+
clang_version: [10.0.0]
16+
# use different LLVM versions among oses because of the lack of
17+
# official assets on github.
2018
include:
21-
# Test a number of operating systems and architectures to make sure
22-
# wasi-libc builds on these platforms by default.
23-
- name: Build on Linux x86_64
24-
os: ubuntu-24.04
25-
clang_version: 16
26-
upload: linux-x86_64-clang-16
27-
- name: Build on Linux aarch64
28-
os: ubuntu-24.04-arm
29-
clang_version: 16
30-
upload: linux-aarch64-clang-16
31-
- name: Build on macOS aarch64
32-
os: macos-15
19+
- os: ubuntu-22.04
20+
clang_version: 10.0.0
21+
llvm_asset_suffix: x86_64-linux-gnu-ubuntu-18.04
22+
- os: macos-15
23+
clang_version: 10.0.0
24+
llvm_asset_suffix: x86_64-apple-darwin
25+
- os: windows-2025
26+
clang_version: 10.0.0
27+
- os: ubuntu-22.04
28+
clang_version: 16.0.0
29+
llvm_asset_suffix: x86_64-linux-gnu-ubuntu-18.04
30+
enable_pic: true
31+
- os: macos-15
3332
clang_version: 15.0.7
34-
llvm_asset_suffix: arm64-apple-darwin22.0
35-
upload: macos-clang-15
36-
- name: Build on Windows x86_64
37-
os: windows-2025
33+
llvm_asset_suffix: x86_64-apple-darwin21.0
34+
- os: windows-2025
3835
clang_version: 16.0.0
39-
upload: windows-clang-16
40-
41-
# Historical versions of LLVM (11.0.0 currently)
42-
- name: Build with LLVM 11
43-
os: ubuntu-22.04
44-
clang_version: 11
45-
upload: linux-x86_64-clang-11
46-
env:
47-
BUILD_LIBSETJMP: no
48-
49-
# Test various combinations of targets triples.
50-
#
51-
# Configuration here can happen through `env` which is inherited to
52-
# jobs below. For now this only runs tests on Linux with Clang 16,
53-
# but that can be expanded as necessary in the future too. Note that
54-
# some targets run the build for the `libc_so` makefile target to
55-
# ensure the PIC build works.
56-
- name: Test wasm32-wasi
57-
os: ubuntu-24.04
58-
clang_version: 16
59-
test: true
60-
upload: wasm32-wasi
61-
env:
62-
TARGET_TRIPLE: wasm32-wasi
63-
MAKE_TARGETS: "default libc_so"
64-
- name: Test wasm32-wasip1
65-
os: ubuntu-24.04
66-
clang_version: 16
67-
test: true
68-
upload: wasm32-wasip1
69-
env:
70-
TARGET_TRIPLE: wasm32-wasip1
71-
MAKE_TARGETS: "default libc_so"
72-
- name: Test wasm32-wasip2
73-
os: ubuntu-24.04
74-
clang_version: 16
75-
test: true
76-
upload: wasm32-wasip2
77-
env:
78-
TARGET_TRIPLE: wasm32-wasip2
79-
WASI_SNAPSHOT: p2
80-
MAKE_TARGETS: "default libc_so"
81-
- name: Test wasm32-wasi-threads
82-
os: ubuntu-24.04
83-
clang_version: 16
84-
test: true
85-
upload: wasm32-wasi-threads
86-
env:
87-
TARGET_TRIPLE: wasm32-wasi-threads
88-
THREAD_MODEL: posix
89-
- name: Test wasm32-wasip1-threads
90-
os: ubuntu-24.04
91-
clang_version: 16
92-
test: true
93-
upload: wasm32-wasip1-threads
94-
env:
95-
TARGET_TRIPLE: wasm32-wasip1-threads
96-
THREAD_MODEL: posix
97-
- name: Test wasm32-wasip1 in V8
98-
os: ubuntu-24.04
99-
clang_version: 16
100-
test: true
101-
test_with_v8: true
102-
env:
103-
TARGET_TRIPLE: wasm32-wasip1
104-
- name: Test wasm32-wasip1-threads in V8
105-
os: ubuntu-24.04
106-
clang_version: 16
107-
test: true
108-
test_with_v8: true
109-
env:
110-
TARGET_TRIPLE: wasm32-wasip1-threads
111-
THREAD_MODEL: posix
112-
36+
enable_pic: true
37+
- os: ubuntu-24.04-arm
38+
clang_version: 16.0.0
39+
llvm_asset_suffix: aarch64-linux-gnu
40+
enable_pic: true
41+
11342
steps:
11443
- uses: actions/checkout@v4.1.7
11544
with:
11645
submodules: true
11746

118-
- uses: ./.github/actions/setup
119-
with:
120-
clang_version: ${{ matrix.clang_version }}
121-
llvm_asset_suffix: ${{ matrix.llvm_asset_suffix }}
47+
- name: Install libtinfo5
48+
run: |
49+
set -ex
50+
sudo apt-get update
51+
sudo apt-get install -y libtinfo5
52+
if: startsWith(matrix.os, 'ubuntu-22')
12253

123-
- name: Build libc
124-
run: make -j4 $MAKE_TARGETS
54+
- name: Install LLVM tools (Windows)
55+
shell: bash
56+
run: |
57+
curl -fsSLO https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ matrix.clang_version }}/LLVM-${{ matrix.clang_version }}-win64.exe
58+
7z x LLVM-${{ matrix.clang_version }}-win64.exe -y -o"llvm"
59+
echo "$(pwd)/llvm/bin" >> $GITHUB_PATH
60+
echo "CC=$(pwd)/llvm/bin/clang.exe" >> $GITHUB_ENV
61+
echo "AR=$(pwd)/llvm/bin/llvm-ar.exe" >> $GITHUB_ENV
62+
echo "NM=$(pwd)/llvm/bin/llvm-nm.exe" >> $GITHUB_ENV
63+
if: matrix.os == 'windows-2025'
64+
65+
- name: Override llvm-nm with one from rustup (Windows)
66+
run: |
67+
rustup update stable
68+
rustup default stable
69+
rustup component add llvm-tools-preview
70+
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
71+
if: matrix.os == 'windows-2025'
12572

126-
- name: Download Test dependencies
127-
if: matrix.test
128-
run: cd test && make download
73+
- name: Install LLVM tools (MacOS)
74+
shell: bash
75+
run: |
76+
curl -sSfL https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ matrix.clang_version }}/clang+llvm-${{ matrix.clang_version }}-${{ matrix.llvm_asset_suffix }}.tar.xz | tar xJf -
77+
export CLANG_DIR=`pwd`/clang+llvm-${{ matrix.clang_version }}-${{ matrix.llvm_asset_suffix }}/bin
78+
echo "$CLANG_DIR" >> $GITHUB_PATH
79+
echo "CC=$CLANG_DIR/clang" >> $GITHUB_ENV
80+
echo "AR=$CLANG_DIR/llvm-ar" >> $GITHUB_ENV
81+
echo "NM=$CLANG_DIR/llvm-nm" >> $GITHUB_ENV
82+
if: matrix.os == 'macos-15'
12983

130-
- name: Install V8 dependencies
131-
if: matrix.test_with_v8
84+
- name: Install LLVM tools (Linux)
85+
shell: bash
13286
run: |
133-
npm -C test/scripts/browser-test install
134-
npx -C test/scripts/browser-test playwright install chromium-headless-shell
135-
echo ENGINE="$PWD/test/scripts/browser-test/harness.mjs" >> $GITHUB_ENV
87+
curl -sSfL https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ matrix.clang_version }}/clang+llvm-${{ matrix.clang_version }}-${{ matrix.llvm_asset_suffix }}.tar.xz | tar xJf -
88+
export CLANG_DIR=`pwd`/clang+llvm-${{ matrix.clang_version }}-${{ matrix.llvm_asset_suffix }}/bin
89+
echo "$CLANG_DIR" >> $GITHUB_PATH
90+
echo "CLANG_DIR=$CLANG_DIR" >> $GITHUB_ENV
91+
echo "CC=$CLANG_DIR/clang" >> $GITHUB_ENV
92+
echo "AR=$CLANG_DIR/llvm-ar" >> $GITHUB_ENV
93+
echo "NM=$CLANG_DIR/llvm-nm" >> $GITHUB_ENV
94+
if: startsWith(matrix.os, 'ubuntu-')
95+
96+
- name: Disable libsetjmp for old LLVM
97+
shell: bash
98+
run: |
99+
echo "BUILD_LIBSETJMP=no" >> $GITHUB_ENV
100+
if: matrix.clang_version == '10.0.0'
101+
102+
- name: Enable PIC build for new LLVM
103+
shell: bash
104+
run: |
105+
echo "MAKE_TARGETS=default libc_so" >> $GITHUB_ENV
106+
if: matrix.enable_pic
107+
108+
- name: Build libc
109+
shell: bash
110+
run: |
111+
make -j4 TARGET_TRIPLE=wasm32-wasi $MAKE_TARGETS
112+
make -j4 TARGET_TRIPLE=wasm32-wasip1 $MAKE_TARGETS
113+
make -j4 TARGET_TRIPLE=wasm32-wasip2 WASI_SNAPSHOT=p2 $MAKE_TARGETS
114+
115+
- name: Build libc + threads
116+
# Only build the thread-capable wasi-libc in the latest supported Clang
117+
# version; the earliest version does not have all necessary builtins
118+
# (e.g., `__builtin_wasm_memory_atomic_notify`).
119+
if: matrix.clang_version != '10.0.0'
120+
shell: bash
121+
run: |
122+
make -j4 THREAD_MODEL=posix TARGET_TRIPLE=wasm32-wasi-threads
123+
make -j4 THREAD_MODEL=posix TARGET_TRIPLE=wasm32-wasip1-threads
136124
137125
- name: Test
138-
if: matrix.test
126+
shell: bash
139127
# For Clang linking to work correctly, we need to place Clang's runtime
140128
# library for `wasm32-wasi` in the right location (i.e., the `mkdir` and
141129
# `cp` below).
142130
run: |
143131
cd test
144-
mkdir resource-dir
145-
export WASI_DIR=./resource-dir/lib/wasi/
146-
export WASIP1_DIR=./resource-dir/lib/wasip1/
147-
export WASIP2_DIR=./resource-dir/lib/wasip2/
132+
make download
133+
export WASI_DIR=$(realpath $($CLANG_DIR/clang -print-resource-dir)/lib/wasi/)
134+
export WASIP1_DIR=$(realpath $($CLANG_DIR/clang -print-resource-dir)/lib/wasip1/)
135+
export WASIP2_DIR=$(realpath $($CLANG_DIR/clang -print-resource-dir)/lib/wasip2/)
148136
mkdir -p $WASI_DIR $WASIP1_DIR $WASIP2_DIR
149137
cp build/download/libclang_rt.builtins-wasm32.a $WASI_DIR
150138
cp build/download/libclang_rt.builtins-wasm32.a $WASIP1_DIR
151139
cp build/download/libclang_rt.builtins-wasm32.a $WASIP2_DIR
152-
export LDFLAGS="-resource-dir $(pwd)/resource-dir"
153-
make test
140+
TARGET_TRIPLE=wasm32-wasi make test
141+
TARGET_TRIPLE=wasm32-wasip1 make test
142+
TARGET_TRIPLE=wasm32-wasip2 make test
143+
TARGET_TRIPLE=wasm32-wasi-threads make test
144+
TARGET_TRIPLE=wasm32-wasip1-threads make test
145+
146+
npm -C scripts/browser-test install
147+
npx -C scripts/browser-test playwright install chromium-headless-shell
148+
ENGINE="$PWD/scripts/browser-test/harness.mjs" TARGET_TRIPLE=wasm32-wasip1 make test
149+
ENGINE="$PWD/scripts/browser-test/harness.mjs" TARGET_TRIPLE=wasm32-wasip1-threads make test
150+
# The older version of Clang does not provide the expected symbol for the
151+
# test entrypoints: `undefined symbol: __main_argc_argv`.
152+
# The older (<15.0.7) version of wasm-ld does not provide `__heap_end`,
153+
# which is required by our malloc implementation.
154+
if: startsWith(matrix.os, 'ubuntu-') && matrix.clang_version != '10.0.0'
154155

155156
- uses: actions/upload-artifact@v4.4.0
156-
if: matrix.upload
157157
with:
158-
name: ${{ format( 'sysroot-{0}.tgz', matrix.upload) }}
158+
# Upload the sysroot folder. To avoid action erros, we give it a unique
159+
# name using the OS it was built for and the Clang version it was built
160+
# with.
161+
name: ${{ format( 'sysroot-{0}-clang-{1}.tgz', matrix.os, matrix.clang_version) }}
159162
path: sysroot
160163

161-
162164
# Disable the headerstest job for now, while WASI transitions from the
163165
# witx snapshots to wit proposals, and we have a few manual edits to the
164166
# generated header to make life easier for folks.
@@ -174,6 +176,7 @@ jobs:
174176
with:
175177
submodules: true
176178
- name: Install Rust (rustup)
179+
shell: bash
177180
run: rustup update stable --no-self-update && rustup default stable
178181
if: matrix.os != 'macos-15'
179182
- name: Install Rust (macos)

0 commit comments

Comments
 (0)