[IRBuilder] Refactor FMF interface (#121657)
[llvm-project.git] / .github / workflows / libc-overlay-tests.yml
blob8b59d76aed4a88a65d8a66e8c467977b22731adc
1 # This workflow is for pre-commit testing of the LLVM-libc project.
2 name: LLVM-libc Pre-commit Overlay Tests
3 permissions:
4   contents: read
5 on:
6   pull_request:
7     branches: [ "main" ]
8     paths:
9       - 'libc/**'
10       - '.github/workflows/libc-overlay-tests.yml'
12 jobs:
13   build:
14     runs-on: ${{ matrix.os }}
15     strategy:
16       # Set fail-fast to false to ensure that feedback is delivered for all matrix combinations.
17       fail-fast: false
18       matrix:
19         include:
20           # TODO: add linux gcc when it is fixed
21           - os: ubuntu-24.04
22             compiler:
23               c_compiler: clang
24               cpp_compiler: clang++
25           - os: windows-2022
26             compiler:
27               c_compiler: clang-cl
28               cpp_compiler: clang-cl
29           - os: macos-14
30             compiler:
31               c_compiler: clang
32               cpp_compiler: clang++
33     
34     steps:
35     - uses: actions/checkout@v4
36     
37     # Libc's build is relatively small comparing with other components of LLVM.
38     # A fresh linux overlay takes about 180MiB of uncompressed disk space, which can
39     # be compressed into ~40MiB. MacOS and Windows overlay builds are less than 10MiB
40     # after compression. Limiting the cache size to 1G should be enough.
41     # Prefer sccache as it is modern and it has a guarantee to work with MSVC.
42     # Do not use direct GHAC access even though it is supported by sccache. GHAC rejects
43     # frequent small object writes.
44     - name: Setup ccache
45       uses: hendrikmuhs/ccache-action@v1
46       with:
47         max-size: 1G
48         key: libc_overlay_build_${{ matrix.os }}_${{ matrix.compiler.c_compiler }}
49         variant: sccache
50     
51     # MPFR is required by some of the mathlib tests.
52     - name: Prepare dependencies (Ubuntu)
53       if: runner.os == 'Linux'
54       run: |
55         sudo apt-get update
56         sudo apt-get install -y libmpfr-dev libgmp-dev libmpc-dev ninja-build
57     
58     # Chocolatey is shipped with Windows runners. Windows Server 2025 recommends WinGet.
59     # Consider migrating to WinGet when Windows Server 2025 is available.
60     - name: Prepare dependencies (Windows)
61       if: runner.os == 'Windows'
62       run: |
63         choco install ninja
64     
65     - name: Prepare dependencies (macOS)
66       if: runner.os == 'macOS'
67       run: |
68         brew install ninja
70     - name: Set reusable strings
71       id: strings
72       shell: bash
73       run: |
74         echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT"
76     # Use MinSizeRel to reduce the size of the build.
77     # Notice that CMP0141=NEW and MSVC_DEBUG_INFORMATION_FORMAT=Embedded are required
78     # by the sccache tool.
79     - name: Configure CMake
80       run: >
81         cmake -B ${{ steps.strings.outputs.build-output-dir }}
82         -DCMAKE_CXX_COMPILER=${{ matrix.compiler.cpp_compiler }}
83         -DCMAKE_C_COMPILER=${{ matrix.compiler.c_compiler }}
84         -DCMAKE_BUILD_TYPE=MinSizeRel
85         -DCMAKE_C_COMPILER_LAUNCHER=sccache
86         -DCMAKE_CXX_COMPILER_LAUNCHER=sccache
87         -DCMAKE_POLICY_DEFAULT_CMP0141=NEW
88         -DCMAKE_MSVC_DEBUG_INFORMATION_FORMAT=Embedded
89         -DLLVM_ENABLE_RUNTIMES=libc
90         -G Ninja
91         -S ${{ github.workspace }}/runtimes
93     - name: Build
94       run: >
95         cmake 
96         --build ${{ steps.strings.outputs.build-output-dir }} 
97         --parallel 
98         --config MinSizeRel 
99         --target libc
101     - name: Test
102       run: >
103         cmake 
104         --build ${{ steps.strings.outputs.build-output-dir }} 
105         --parallel 
106         --target check-libc