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