-
Notifications
You must be signed in to change notification settings - Fork 633
82 lines (75 loc) · 3 KB
/
github-ci-clang.yml
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
name: LK CI (Clang)
# Brute force build a bunch of variants of LK in parallel jobs.
on: [ push, pull_request ]
jobs:
build:
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
toolchain-ver: [14, 15, 16, 17, 18]
debug: [2, 0]
project:
# Note: Clang toolchains do not ship with a compiler-rt (libgcc) for
# all targets, so we have to restrict this build matrix to targets
# that build without requiring these functions (i.e. 64-bit targets,
# since 32-bit ones require functions such as __divdi3).
- pc-x86-64-test
- qemu-virt-arm64-test
- qemu-virt-riscv64-test
- qemu-virt-riscv64-supervisor-test
env:
PROJECT: ${{ matrix.project }}
TOOLCHAIN_VER: ${{ matrix.toolchain-ver }}
DEBUG: ${{ matrix.debug }}
UBSAN: 0 # UBSan runtimes for baremetal are not part of the toolchain
steps:
- name: banner
shell: bash
run: |
printf "Building with %d processors\n" "$(nproc)"
grep -oP '(?<=model name\t: ).*' /proc/cpuinfo|head -n1
echo PROJECT = $PROJECT
echo TOOLCHAIN_VER = $TOOLCHAIN_VER
echo DEBUG = $DEBUG
echo UBSAN = $UBSAN
- name: checkout
uses: actions/checkout@v4
# Install LLVM and set up the required environment variables
- name: compute toolchain
shell: bash
run: |
sudo apt-get install -y clang-${{ matrix.toolchain-ver }} lld-${{ matrix.toolchain-ver }}
GCC_TOOLCHAIN_PREFIX=$(make list-toolchain | grep TOOLCHAIN_PREFIX | tail -1 | cut -d ' ' -f 3)
# Map the GCC toolchain prefix to a clang --target argument:
CLANG_TRIPLE=$(echo "${GCC_TOOLCHAIN_PREFIX}" | sed 's/-elf-/-unknown-elf/g')
LLVM_BINDIR=/usr/lib/llvm-${{ matrix.toolchain-ver }}/bin
echo "CC=${LLVM_BINDIR}/clang --target=${CLANG_TRIPLE}" >> $GITHUB_ENV
echo "LD=${LLVM_BINDIR}/ld.lld" >> $GITHUB_ENV
echo "OBJDUMP=${LLVM_BINDIR}/llvm-objdump" >> $GITHUB_ENV
echo "OBJCOPY=${LLVM_BINDIR}/llvm-objcopy" >> $GITHUB_ENV
echo "CPPFILT=${LLVM_BINDIR}/llvm-cxxfilt" >> $GITHUB_ENV
echo "SIZE=${LLVM_BINDIR}/llvm-size" >> $GITHUB_ENV
echo "NM=${LLVM_BINDIR}/llvm-nm" >> $GITHUB_ENV
echo "STRIP=${LLVM_BINDIR}/llvm-strip" >> $GITHUB_ENV
echo "TOOLCHAIN_PREFIX=/invalid/prefix/should/not/be/used" >> $GITHUB_ENV
echo "LIBGCC=" >> $GITHUB_ENV
cat "$GITHUB_ENV"
# build it
- name: build
shell: bash
run: |
make -j $(nproc)
# When LK is compiled with DEBUG=0, there's no console and no way for us
# to read test output
- name: qemu
if: ${{ matrix.project == 'qemu-virt-arm64-test' }}
shell: bash
run: |
env -i DEBIAN_FRONTEND=noninteractive sudo apt-get install -y qemu-system-arm
- name: unittest
if: ${{ matrix.project == 'qemu-virt-arm64-test' }}
shell: bash
run: |
python3 scripts/unittest.py
# vim: ts=2 sw=2 expandtab