From 79a0c9fd2fb1bd1600c379077f38ddfea8f95907 Mon Sep 17 00:00:00 2001 From: Keve Date: Mon, 7 Oct 2024 20:24:30 +0200 Subject: [PATCH] Update action to use native bmake if possible On MacOS, native bmake works fine, refactor the environment to be able to use it. While here, update to the latests ubuntu version, clang versions. --- .github/workflows/cross-bootstrap-tools.yml | 77 ++++++++++++++------- 1 file changed, 52 insertions(+), 25 deletions(-) diff --git a/.github/workflows/cross-bootstrap-tools.yml b/.github/workflows/cross-bootstrap-tools.yml index 1f4d41cce30cf6..89dfdd627f55b1 100644 --- a/.github/workflows/cross-bootstrap-tools.yml +++ b/.github/workflows/cross-bootstrap-tools.yml @@ -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: @@ -17,22 +21,27 @@ jobs: strategy: fail-fast: false matrix: - target_arch: [ amd64, aarch64 ] - os: [ ubuntu-20.04, ubuntu-22.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-20.04 - compiler: clang-12 - cross-bindir: /usr/lib/llvm-12/bin - pkgs: bmake libarchive-dev clang-12 lld-12 - - os: ubuntu-22.04 - 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 + 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-13 - cross-bindir: /opt/homebrew/opt/llvm@13/bin - pkgs: bmake libarchive llvm@13 + compiler: clang-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 @@ -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 \ No newline at end of file