Repository navigation
191 lines (175 loc) · 6.69 KB
/
Copy pathlibc-overlay-tests.yml
File metadata and controls
191 lines (175 loc) · 6.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
# This workflow is for pre-commit testing of the LLVM-libc project.
name: LLVM-libc Pre-commit Overlay Tests
permissions:
contents: read
on:
pull_request:
paths:
- 'libc/**'
- '.github/workflows/libc-overlay-tests.yml'
jobs:
native:
if: github.repository_owner == 'llvm'
name: ${{ matrix.os }} - ${{ matrix.compiler.c_compiler }}
timeout-minutes: 60
runs-on: ${{ matrix.os }}
container: ${{ matrix.container || null }}
strategy:
# Set fail-fast to false to ensure that feedback is delivered for all matrix combinations.
fail-fast: false
matrix:
include:
# TODO: add linux gcc when it is fixed
- os: ubuntu-24.04
container: 'ghcr.io/llvm/libc-ubuntu-24.04:latest@sha256:c6e2ee2a9bf5cebd51fd27dd8e85381c2f73d90e091c764082f8ad528ee18918'
compiler:
c_compiler: clang-23
cpp_compiler: clang++-23
linker: lld-23
- os: ubuntu-24.04-arm
container: 'ghcr.io/llvm/arm64v8/libc-ubuntu-24.04:latest@sha256:138636a45bb70f7b51a858b282e66291cb3c5c85371afee09032a5e09b263395'
compiler:
c_compiler: clang-23
cpp_compiler: clang++-23
linker: lld-23
- os: windows-2022
compiler:
c_compiler: clang-cl
cpp_compiler: clang-cl
- os: windows-2025
compiler:
c_compiler: clang-cl
cpp_compiler: clang-cl
- os: macos-15
compiler:
c_compiler: clang
cpp_compiler: clang++
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
# Libc's build is relatively small comparing with other components of LLVM.
# A fresh linux overlay takes about 180MiB of uncompressed disk space, which can
# be compressed into ~40MiB. MacOS and Windows overlay builds are less than 10MiB
# after compression. Limiting the cache size to 1G should be enough.
# Prefer sccache as it is modern and it has a guarantee to work with MSVC.
# Do not use direct GHAC access even though it is supported by sccache. GHAC rejects
# frequent small object writes.
- name: Setup ccache
uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03 # v1.2.23
with:
max-size: 1G
key: libc_overlay_build_v2_${{ matrix.os }}_${{ matrix.compiler.c_compiler }}
variant: sccache
# Chocolatey is shipped with Windows runners. Windows Server 2025 recommends WinGet.
# Consider migrating to WinGet when Windows Server 2025 is available.
- name: Prepare dependencies (Windows)
if: runner.os == 'Windows'
run: |
choco install ninja
- name: Prepare dependencies (macOS)
if: runner.os == 'macOS'
run: |
brew install ninja
# Use MinSizeRel to reduce the size of the build.
# Notice that CMP0141=NEW and MSVC_DEBUG_INFORMATION_FORMAT=Embedded are required
# by the sccache tool.
- name: Configure CMake
run: >
cmake -B build
-DCMAKE_CXX_COMPILER=${{ matrix.compiler.cpp_compiler }}
-DCMAKE_C_COMPILER=${{ matrix.compiler.c_compiler }}
-DCMAKE_BUILD_TYPE=RelWithDebInfo
-DCMAKE_C_COMPILER_LAUNCHER=sccache
-DCMAKE_CXX_COMPILER_LAUNCHER=sccache
-DCMAKE_POLICY_DEFAULT_CMP0141=NEW
-DCMAKE_MSVC_DEBUG_INFORMATION_FORMAT=Embedded
-DLIBC_COMPILE_OPTIONS_NATIVE=""
-DLLVM_ENABLE_RUNTIMES=libc
-DLLVM_USE_LINKER="${{ matrix.linker }}"
-G Ninja
-S runtimes
- name: Build
run: >
cmake
--build build
--parallel
--target libc
- name: Build Test
run: >
cmake
--build build
--parallel
--target check-libc-build
- name: Test
run: >
cmake
--build build
--parallel
--target check-libc
qemu:
if: github.repository_owner == 'llvm'
name: qemu - ${{ matrix.arch }} - ${{ matrix.c_compiler }}
runs-on: ubuntu-24.04
timeout-minutes: 60
container:
image: 'ghcr.io/llvm/libc-ubuntu-24.04:latest@sha256:b9c8ea74685ea46c86594428c41a1ba95bc6d33b28183c0ddac64414344950fd'
# We need to enable privileged containers so that certain libc tests
# have the necessary permissions (like SYS_TIME). There are no security
# implications as we are already running in an isolated VM.
options: --privileged
strategy:
# Set fail-fast to false to ensure that feedback is delivered for all matrix combinations.
fail-fast: false
matrix:
include:
- arch: armhf
target_triple: arm-linux-gnueabihf
c_compiler: clang-23
cxx_compiler: clang++-23
- arch: riscv64
target_triple: riscv64-linux-gnu
c_compiler: clang-23
cxx_compiler: clang++-23
mpfr_path: /usr/riscv64-linux-gnu
mpc_path: riscv64-linux-gnu
steps:
- name: Checkout LLVM
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- name: Setup ccache
uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03 # v1.2.23
with:
max-size: 1G
key: libc_qemu_overlay_${{ matrix.arch }}_${{ matrix.c_compiler }}
variant: sccache
- name: Create QEMU wrapper
run: |
mkdir build
cat << 'EOF' > /__w/llvm-project/llvm-project/build/qemu-wrapper.sh
#!/bin/bash
qemu-${{ matrix.arch }}-static -L /usr/${{ matrix.target_triple }} "$@"
EOF
chmod +x /__w/llvm-project/llvm-project/build/qemu-wrapper.sh
- name: Configure CMake
run: |
cmake -B build -S runtimes -G Ninja \
-DLLVM_ENABLE_RUNTIMES=libc \
-DCMAKE_C_COMPILER=${{ matrix.c_compiler }} \
-DCMAKE_CXX_COMPILER=${{ matrix.cxx_compiler }} \
-DCMAKE_BUILD_TYPE=Release \
-DLLVM_USE_LINKER=lld-23 \
-DLIBC_TARGET_TRIPLE=${{ matrix.target_triple}} \
-DLLVM_LIBC_MPFR_INSTALL_PATH="${{ matrix.mpfr_path }}" \
-DLIBC_MPC_INSTALL_PATH="${{ matrix.mpc_path }}" \
-DCMAKE_CROSSCOMPILING_EMULATOR=/__w/llvm-project/llvm-project/build/qemu-wrapper.sh
- name: Build
run: |
cmake --build build --parallel --target libc
- name: Build Test
run: |
cmake --build build --parallel --target check-libc-build
- name: Run Test
run: |
cmake --build build --parallel --target check-libc