Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update action to use native bmake if possible #1452

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 49 additions & 22 deletions .github/workflows/cross-bootstrap-tools.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,13 @@ name: Cross-build Kernel

on:
push:
branches: [ main, 'stable/14', 'stable/13' ]
branches:
- main
- 'stable/14'
- 'stable/13'
pull_request:
branches: [ main ]
branches:
- main
workflow_dispatch:

permissions:
Expand All @@ -17,22 +21,27 @@ jobs:
strategy:
fail-fast: false
matrix:
target_arch: [ amd64, aarch64 ]
os: [ ubuntu-22.04, ubuntu-24.04, macos-latest ]
target_arch:
- amd64
- aarch64
os:
- ubuntu-24.04
- macos-latest
include:
# TODO: both Ubuntu and macOS have bmake packages, we should try them instead of bootstrapping our own copy.
- os: ubuntu-22.04
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This also seems to eliminate ubuntu-22 from the matrix. Is that intentional?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. ubuntu-20 will be kicked out in 4 months (actions/runner-images#11101), ubuntu-latest has started to default to ubuntu-24 (actions/runner-images#10636).
ubuntu-22 is still good for another 2 years, there is no obstacle to put it back, I have honestly not seen any added value to having it around.
Happy to change this.
If you want maximum coverage, we could also add macos-13 (Darwin/amd64).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We'll have to ask @jrtc27 to see which ones we can drop, since she added this originally.
I think that ubuntu-20 is safe to drop, but I think she (or some other CheriBSD person) had said that they still needed to support ubuntu-22.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We (the CheriBSD project) depend on being able to build on ubuntu-22. We see build regressions specific to older Ubuntu versions with some regularity so it's useful to keep them around so we catch issues before they hit CheriBSD some time later (typically weeks to months).

compiler: clang-14
cross-bindir: /usr/lib/llvm-14/bin
pkgs: bmake libarchive-dev clang-14 lld-14
- os: ubuntu-24.04
compiler: clang-18
cross-bindir: /usr/lib/llvm-18/bin
pkgs: bmake libarchive-dev clang-18 lld-18
pkgs: libarchive-dev clang-18 lld-18
llvm-bindir: /usr/lib/llvm-18/bin
llvm-ld: /usr/lib/llvm-18/bin/ld.lld
# the Ubuntu packaged bmake causes build errors
bmake: ./tools/build/make.py
- os: macos-latest
compiler: clang-18
cross-bindir: /opt/homebrew/opt/llvm@18/bin
pkgs: bmake libarchive llvm@18
# llvm@19 causes build error
pkgs: bmake libarchive llvm@18 lld
llvm-bindir: /opt/homebrew/opt/llvm@18/bin
llvm-ld: /opt/homebrew/opt/lld/bin/ld.lld
bmake: bmake
- target_arch: amd64
target: amd64
- target_arch: aarch64
Expand All @@ -51,17 +60,35 @@ jobs:
brew install ${{ matrix.pkgs }} || true
- name: create environment
run: |
echo "GITHUB_WORKSPACE = $GITHUB_WORKSPACE"
if [ -n "${{ matrix.cross-bindir }}" ]; then
echo "EXTRA_BUILD_ARGS=--cross-bindir=${{ matrix.cross-bindir }}" >> $GITHUB_ENV
fi
echo "CC=${{ matrix.llvm-bindir }}/clang" >> $GITHUB_ENV
echo "CXX=${{ matrix.llvm-bindir }}/clang++" >> $GITHUB_ENV
echo "CPP=${{ matrix.llvm-bindir }}/clang-cpp" >> $GITHUB_ENV

echo "XCC=${{ matrix.llvm-bindir }}/clang" >> $GITHUB_ENV
echo "XCXX=${{ matrix.llvm-bindir }}/clang++" >> $GITHUB_ENV
echo "XCPP=${{ matrix.llvm-bindir }}/clang-cpp" >> $GITHUB_ENV
echo "XLD=${{ matrix.llvm-ld }}" >> $GITHUB_ENV

mkdir -p ../build
echo "MAKEOBJDIRPREFIX=${PWD%/*}/build" >> $GITHUB_ENV
# heh, works on Linux/BSD/macOS ...
echo "NPROC=`getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null || echo 1`" >> $GITHUB_ENV
- name: bootstrap bmake
run: ./tools/build/make.py --debug $EXTRA_BUILD_ARGS TARGET=${{ matrix.target }} TARGET_ARCH=${{ matrix.target_arch }} -n

- name: show environment
run: |
echo Running on $(uname -a)
echo "CWD = $PWD"
echo "GITHUB_WORKSPACE = $GITHUB_WORKSPACE"
echo "Using bmake as ${{ matrix.bmake }}"
echo Using CC=${CC}
echo Using LD=${LD}
echo Using XCC=${XCC}
echo Using XLD=${XLD}
echo Using MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}
echo Using NPROC=${NPROC}
echo Using EXTRA_MAKE_ARGS=${EXTRA_MAKE_ARGS}

- name: make kernel-toolchain
run: ./tools/build/make.py --debug $EXTRA_BUILD_ARGS TARGET=${{ matrix.target }} TARGET_ARCH=${{ matrix.target_arch }} kernel-toolchain -s -j$NPROC -DWITH_DISK_IMAGE_TOOLS_BOOTSTRAP
run: ${{ matrix.bmake }} TARGET=${{ matrix.target }} TARGET_ARCH=${{ matrix.target_arch }} -s -j$NPROC kernel-toolchain -DWITH_DISK_IMAGE_TOOLS_BOOTSTRAP

- name: make buildkernel
run: ./tools/build/make.py --debug $EXTRA_BUILD_ARGS TARGET=${{ matrix.target }} TARGET_ARCH=${{ matrix.target_arch }} KERNCONF=GENERIC NO_MODULES=yes buildkernel -s -j$NPROC $EXTRA_MAKE_ARGS
run: ${{ matrix.bmake }} TARGET=${{ matrix.target }} TARGET_ARCH=${{ matrix.target_arch }} -s -j$NPROC buildkernel KERNCONF=GENERIC NO_MODULES=yes
Copy link
Member

@bsdimp bsdimp Dec 17, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why eliminate EXTRA_MAKE_ARGS here?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

EXTRA_MAKE_ARGS was referenced in the original script, it was never set to any value, it could not be set in the call environment. I have left the echo and would remove that in a subsequent change, could be done right away.
I found it confusing to have to find what EXTRA_MAKE_ARGS in this context is actually used for, hence I removed the reference.