Skip to content

Commit 9d1979b

Browse files
arichardsonchrehrhardt
authored andcommitted
ci: add Morello build configuration
Add a new matrix entry to build for Morello using the Morello SDK docker container from Cambridge. Signed-off-by: Alex Richardson <[email protected]>
1 parent c25b9a1 commit 9d1979b

File tree

1 file changed

+36
-8
lines changed

1 file changed

+36
-8
lines changed

.github/workflows/build.yml

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,21 @@ jobs:
3131
if: always() && (needs.init-comment.result == 'success' || needs.init-comment.result == 'skipped')
3232
name: Build ${{ matrix.arch }} ${{ matrix.compiler }} ${{ matrix.config }}
3333
runs-on: ubuntu-latest
34+
container:
35+
image: ${{ matrix.container }}
36+
# Work around https://github.com/actions/checkout/issues/1014
37+
options: --user root
3438
strategy:
3539
fail-fast: false
3640
matrix:
37-
arch: [riscv64, aarch64]
38-
compiler: [llvm-18, gcc]
39-
config: [defconfig]
41+
arch: [ riscv64, aarch64 ]
42+
compiler: [ llvm-18, gcc ]
43+
config: [ defconfig ]
44+
include:
45+
- arch: morello
46+
compiler: llvm-morello
47+
config: morello_pcuabi_defconfig
48+
container: docker.io/ctsrd/morello-sdk:latest
4049

4150
steps:
4251
- name: Checkout code
@@ -46,20 +55,24 @@ jobs:
4655
uses: ammaraskar/gcc-problem-matcher@master
4756

4857
- name: Install Dependencies
58+
shell: bash
4959
run: |
5060
sudo apt-get update
51-
sudo apt-get install -y build-essential bc bison flex libelf-dev libssl-dev
61+
packages=(build-essential bc bison flex libelf-dev libssl-dev)
5262
if [[ "${{ matrix.compiler }}" == llvm* ]]; then
5363
VER=${{ matrix.compiler }}
5464
VER=${VER#llvm-}
55-
sudo apt-get install -y clang-$VER lld-$VER llvm-$VER
65+
if [[ "${{ matrix.compiler }}" != llvm-morello ]]; then
66+
packages+=(clang-$VER lld-$VER llvm-$VER)
67+
fi
5668
elif [ "${{ matrix.compiler }}" == "gcc" ]; then
5769
if [ "${{ matrix.arch }}" == "aarch64" ]; then
58-
sudo apt-get install -y gcc-aarch64-linux-gnu
70+
packages+=(build-essential gcc-aarch64-linux-gnu)
5971
elif [ "${{ matrix.arch }}" == "riscv64" ]; then
60-
sudo apt-get install -y gcc-riscv64-linux-gnu
72+
packages+=(build-essential gcc-riscv64-linux-gnu)
6173
fi
6274
fi
75+
sudo apt-get install -y --no-install-recommends "${packages[@]}"
6376
6477
- name: Get Job Link
6578
id: job-link
@@ -68,6 +81,14 @@ jobs:
6881
ARCH: ${{ matrix.arch }}
6982
COMP: ${{ matrix.compiler }}
7083
run: |
84+
# If gh is not available (e.g. in container), skip dynamic link generation
85+
if ! command -v gh &> /dev/null; then
86+
JOB_URL="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
87+
echo "JOB_URL=$JOB_URL BUILD_STEP_NUM=1"
88+
echo "url=$JOB_URL" >> "$GITHUB_OUTPUT"
89+
echo "build_step_num=1" >> "$GITHUB_OUTPUT"
90+
exit 0
91+
fi
7192
JOBS_JSON=$(gh run view ${{ github.run_id }} --repo ${{ github.repository }} --json jobs)
7293
JOB_URL=$(echo "$JOBS_JSON" | jq -r --arg a "$ARCH" --arg c "$COMP" '.jobs[] | select(.name | contains($a) and contains($c)) | .url' | head -n 1)
7394
BUILD_STEP_NUM=$(echo "$JOBS_JSON" | jq -r --arg a "$ARCH" --arg c "$COMP" '.jobs[] | select(.name | contains($a) and contains($c)) | .steps[] | select(.name == "Process Logs (Errors & Warnings)") | .number' | head -n 1)
@@ -92,6 +113,7 @@ jobs:
92113
key: kbuild-${{ matrix.arch }}-${{ matrix.compiler }}
93114

94115
- name: Build Kernel
116+
shell: bash
95117
id: kbuild
96118
env:
97119
KCONFIG_NOSILENTUPDATE: 1
@@ -105,8 +127,14 @@ jobs:
105127
elif [ "${{ matrix.arch }}" = "riscv64" ]; then
106128
ARGS="$ARGS ARCH=riscv"
107129
CROSS="riscv64-linux-gnu-"
130+
elif [ "${{ matrix.arch }}" = "morello" ]; then
131+
ARGS="$ARGS ARCH=arm64"
108132
fi
109-
if [[ "${{ matrix.compiler }}" == llvm* ]]; then
133+
134+
if [[ "${{ matrix.compiler }}" == "llvm-morello" ]]; then
135+
# The docker image does not have gcc installed, use Morello clang as the host compiler.
136+
ARGS="$ARGS LLVM=$(dirname $(which clang))/ HOSTCC=clang HOSTCXX=clang++"
137+
elif [[ "${{ matrix.compiler }}" == llvm* ]]; then
110138
ARGS="$ARGS LLVM=/usr/lib/${{ matrix.compiler }}/bin/ CROSS_COMPILE=$CROSS"
111139
else
112140
ARGS="$ARGS CROSS_COMPILE=$CROSS"

0 commit comments

Comments
 (0)