Be a bit more strict about what is accepted into mainline by building with -Werror set for gcc builds. Clang builds will get the same treatment soon. Also turn off some ubsan compiles for some of the older arches where there's very little value (and it probably doesn't work anyway).
168 lines
5.5 KiB
YAML
168 lines
5.5 KiB
YAML
name: LK CI (gcc)
|
|
|
|
# Brute force build a bunch of variants of LK in parallel jobs.
|
|
|
|
on:
|
|
pull_request:
|
|
push:
|
|
branches-ignore:
|
|
- 'wip/**'
|
|
- 'docs/**' # Skip builds for documentation branches
|
|
paths-ignore:
|
|
- '**.md' # Skip builds when only markdown files change
|
|
- 'docs/**' # Skip builds for docs directory changes
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-24.04
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
toolchain-ver: [15.2.0, 7.5.0]
|
|
debug: [2, 0]
|
|
ubsan: [1, 0]
|
|
arch:
|
|
- arm
|
|
- arm64
|
|
- m68k
|
|
- microblaze
|
|
- mips
|
|
- or1k
|
|
- riscv32
|
|
- riscv64
|
|
- x86
|
|
exclude:
|
|
# no real point building ubsan on the old compiler
|
|
- ubsan: 1
|
|
toolchain-ver: 7.5.0
|
|
# do not build ubsan for older 32bit arches where it is not well supported
|
|
- ubsan: 1
|
|
arch: m68k
|
|
- ubsan: 1
|
|
arch: microblaze
|
|
- ubsan: 1
|
|
arch: mips
|
|
- ubsan: 1
|
|
arch: or1k
|
|
# no toolchain for 7.5.0 for or1k
|
|
- arch: or1k
|
|
toolchain-ver: 7.5.0
|
|
# building newer riscv stuff on 7.5.0 is fairly difficult due to
|
|
# lack of certain extensions
|
|
- arch: riscv32
|
|
toolchain-ver: 7.5.0
|
|
- arch: riscv64
|
|
toolchain-ver: 7.5.0
|
|
|
|
env:
|
|
ARCH: ${{ matrix.arch }}
|
|
TOOLCHAIN_VER: ${{ matrix.toolchain-ver }}
|
|
# ${{ matrix.toolchain-arch }}-${{ matrix.toolchain-ver }}-Linux-x86_64
|
|
DEBUG: ${{ matrix.debug }}
|
|
UBSAN: ${{ matrix.ubsan }}
|
|
TOOLCHAIN: # compute below
|
|
TOOLCHAIN_ALT: # compute below
|
|
steps:
|
|
- name: banner
|
|
shell: bash
|
|
run: |
|
|
printf "Building with %d processors\n" "$(nproc)"
|
|
grep -oP '(?<=model name\t: ).*' /proc/cpuinfo|head -n1
|
|
echo ARCH = $ARCH
|
|
echo TOOLCHAIN_VER = $TOOLCHAIN_VER
|
|
echo DEBUG = $DEBUG
|
|
echo UBSAN = $UBSAN
|
|
|
|
# check out the source
|
|
- name: checkout
|
|
uses: actions/checkout@v4
|
|
|
|
# compute the toolchain prefix this project will need
|
|
- name: compute toolchain
|
|
shell: bash
|
|
run: |
|
|
case "${{ matrix.arch }}" in
|
|
arm) TOOLCHAIN_PREFIX="arm-eabi-" ;;
|
|
arm64) TOOLCHAIN_PREFIX="aarch64-elf-" ;;
|
|
m68k) TOOLCHAIN_PREFIX="m68k-elf-" ;;
|
|
microblaze) TOOLCHAIN_PREFIX="microblaze-elf-" ;;
|
|
mips) TOOLCHAIN_PREFIX="mips-elf-" ;;
|
|
or1k) TOOLCHAIN_PREFIX="or1k-elf-" ;;
|
|
riscv32) TOOLCHAIN_PREFIX="riscv32-elf-" ;;
|
|
riscv64) TOOLCHAIN_PREFIX="riscv64-elf-" ;;
|
|
x86) TOOLCHAIN_PREFIX="x86_64-elf-" ;;
|
|
*) echo "Unknown architecture: ${{ matrix.arch }}" && exit 1 ;;
|
|
esac
|
|
echo "TOOLCHAIN_PREFIX=${TOOLCHAIN_PREFIX}" >> $GITHUB_ENV
|
|
echo "TOOLCHAIN=${TOOLCHAIN_PREFIX}${{ matrix.toolchain-ver }}-$(uname)-$(uname -m)" >> $GITHUB_ENV
|
|
if [ "$TOOLCHAIN_PREFIX" = "x86_64-elf-" ]; then
|
|
# for some x86_64-elf projects, we need i386-elf as well
|
|
echo "TOOLCHAIN_ALT=i386-elf-${{ matrix.toolchain-ver }}-$(uname)-$(uname -m)" >> $GITHUB_ENV
|
|
fi
|
|
|
|
# maintain a directory archives/ in the repo
|
|
# it will contain tarballs of various toolchains
|
|
- name: cache
|
|
uses: actions/cache@v4
|
|
id: cache
|
|
with:
|
|
# A list of files, directories, and wildcard patterns to cache and restore
|
|
path: archives
|
|
# An explicit key for restoring and saving the cache
|
|
key: archives-${{ env.TOOLCHAIN }}-${{ env.TOOLCHAIN_ALT }}
|
|
|
|
# download a toolchain from https://newos.org/toolchains
|
|
# if not already cached
|
|
- name: fetch/extract toolchain
|
|
shell: bash
|
|
run: |
|
|
TOOLCHAIN_BASE_URL="https://newos.org/toolchains"
|
|
TOOLCHAIN_SUFFIX="tar.xz"
|
|
TOOLCHAIN_ADDRESS="$TOOLCHAIN_BASE_URL/$TOOLCHAIN.$TOOLCHAIN_SUFFIX"
|
|
mkdir -p archives
|
|
cd archives
|
|
echo "Downloading toolchain $TOOLCHAIN from $TOOLCHAIN_ADDRESS"
|
|
wget -v -N $TOOLCHAIN_ADDRESS || exit 1
|
|
cd ..
|
|
echo "Unpacking $TOOLCHAIN"
|
|
tar xf archives/$TOOLCHAIN.$TOOLCHAIN_SUFFIX || exit 1
|
|
echo "$GITHUB_WORKSPACE/$TOOLCHAIN/bin" >> $GITHUB_PATH
|
|
|
|
# if we have an alternate toolchain, download it too
|
|
- name: fetch/extract alternate toolchain
|
|
if: env.TOOLCHAIN_ALT != ''
|
|
shell: bash
|
|
run: |
|
|
TOOLCHAIN_BASE_URL="https://newos.org/toolchains"
|
|
TOOLCHAIN_SUFFIX="tar.xz"
|
|
TOOLCHAIN_ALT_ADDRESS="$TOOLCHAIN_BASE_URL/$TOOLCHAIN_ALT.$TOOLCHAIN_SUFFIX"
|
|
echo "Downloading alternate toolchain $TOOLCHAIN_ALT from $TOOLCHAIN_ALT_ADDRESS"
|
|
mkdir -p archives
|
|
cd archives
|
|
wget -v -N $TOOLCHAIN_ALT_ADDRESS || exit 1
|
|
cd ..
|
|
echo "Unpacking $TOOLCHAIN_ALT"
|
|
tar xf archives/$TOOLCHAIN_ALT.$TOOLCHAIN_SUFFIX || exit 1
|
|
echo "$GITHUB_WORKSPACE/$TOOLCHAIN_ALT/bin" >> $GITHUB_PATH
|
|
|
|
# build it
|
|
- name: build
|
|
shell: bash
|
|
run: |
|
|
export -n TOOLCHAIN_PREFIX
|
|
export -n TOOLCHAIN
|
|
export -n TOOLCHAIN_ALT
|
|
export -n TOOLCHAIN_VER
|
|
export -n ARCH
|
|
# DEBUG is passed through to the build script
|
|
# UBSAN is passed through to the build script
|
|
./scripts/buildall -e -a "${{ matrix.arch }}"
|
|
|
|
# upload artifacts
|
|
#- uses: actions/upload-artifact@v2
|
|
# with:
|
|
# name: build-dir
|
|
# path: build-${{ matrix.project }}/lk.*
|
|
|
|
# vim: ts=2 sw=2 expandtab
|