@@ -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
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)
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