Skip to content

[rust] Allow modules to declare themselves as Rust crates #11

[rust] Allow modules to declare themselves as Rust crates

[rust] Allow modules to declare themselves as Rust crates #11

Workflow file for this run

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