xref: /freebsd/.github/workflows/cross-bootstrap-tools.yml (revision edc692b9052ab0594248104d002f32c657e36057)
1accf9611SUlrich Spörleinname: Cross-build Kernel
21e266857SAlex Richardson
31e266857SAlex Richardsonon:
41e266857SAlex Richardson  push:
5f8130174SAndrew Turner    branches: [ main, 'stable/14', 'stable/13' ]
61e266857SAlex Richardson  pull_request:
79c43bd64SUlrich Spörlein    branches: [ main ]
878cc4571SAndrew Turner  workflow_dispatch:
91e266857SAlex Richardson
10aca7ff47SAlexpermissions:
11aca7ff47SAlex  contents: read
12aca7ff47SAlex
131e266857SAlex Richardsonjobs:
141e266857SAlex Richardson  build:
153491ed65SJohn Baldwin    name: ${{ matrix.target_arch }} ${{ matrix.os }} (${{ matrix.compiler }})
161e266857SAlex Richardson    runs-on: ${{ matrix.os }}
171e266857SAlex Richardson    strategy:
18accf9611SUlrich Spörlein      fail-fast: false
191e266857SAlex Richardson      matrix:
203491ed65SJohn Baldwin        target_arch: [ amd64, aarch64 ]
21386e2dc4SAndrew Turner        os: [ ubuntu-22.04, ubuntu-24.04, macos-latest ]
22accf9611SUlrich Spörlein        include:
23accf9611SUlrich Spörlein          # TODO: both Ubuntu and macOS have bmake packages, we should try them instead of bootstrapping our own copy.
2474536fcaSJohn Baldwin          - os: ubuntu-22.04
2574536fcaSJohn Baldwin            compiler: clang-14
2674536fcaSJohn Baldwin            cross-bindir: /usr/lib/llvm-14/bin
2774536fcaSJohn Baldwin            pkgs: bmake libarchive-dev clang-14 lld-14
28386e2dc4SAndrew Turner          - os: ubuntu-24.04
29386e2dc4SAndrew Turner            compiler: clang-18
30386e2dc4SAndrew Turner            cross-bindir: /usr/lib/llvm-18/bin
31386e2dc4SAndrew Turner            pkgs: bmake libarchive-dev clang-18 lld-18
3249335edaSJohn Baldwin          - os: macos-latest
33*edc692b9SAndrew Turner            compiler: clang-18
34*edc692b9SAndrew Turner            cross-bindir: /opt/homebrew/opt/llvm@18/bin
35*edc692b9SAndrew Turner            pkgs: bmake libarchive llvm@18
363491ed65SJohn Baldwin          - target_arch: amd64
373491ed65SJohn Baldwin            target: amd64
383491ed65SJohn Baldwin          - target_arch: aarch64
393491ed65SJohn Baldwin            target: arm64
401e266857SAlex Richardson    steps:
41e6dccf00SJohn Baldwin      - uses: actions/checkout@v4
42accf9611SUlrich Spörlein      - name: install packages (Ubuntu)
43accf9611SUlrich Spörlein        if: runner.os == 'Linux'
441e266857SAlex Richardson        run: |
45accf9611SUlrich Spörlein          sudo apt-get update --quiet || true
46accf9611SUlrich Spörlein          sudo apt-get -yq --no-install-suggests --no-install-recommends install ${{ matrix.pkgs }}
47accf9611SUlrich Spörlein      - name: install packages (macOS)
48accf9611SUlrich Spörlein        if: runner.os == 'macOS'
49accf9611SUlrich Spörlein        run: |
50accf9611SUlrich Spörlein          brew update --quiet || true
5140903394SUlrich Spörlein          brew install ${{ matrix.pkgs }} || true
52accf9611SUlrich Spörlein      - name: create environment
53accf9611SUlrich Spörlein        run: |
54accf9611SUlrich Spörlein          echo "GITHUB_WORKSPACE = $GITHUB_WORKSPACE"
55accf9611SUlrich Spörlein          if [ -n "${{ matrix.cross-bindir }}" ]; then
56accf9611SUlrich Spörlein            echo "EXTRA_BUILD_ARGS=--cross-bindir=${{ matrix.cross-bindir }}" >> $GITHUB_ENV
57accf9611SUlrich Spörlein          fi
58accf9611SUlrich Spörlein          mkdir -p ../build
59accf9611SUlrich Spörlein          echo "MAKEOBJDIRPREFIX=${PWD%/*}/build" >> $GITHUB_ENV
60accf9611SUlrich Spörlein          # heh, works on Linux/BSD/macOS ...
61accf9611SUlrich Spörlein          echo "NPROC=`getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null || echo 1`" >> $GITHUB_ENV
62accf9611SUlrich Spörlein      - name: bootstrap bmake
633491ed65SJohn Baldwin        run: ./tools/build/make.py --debug $EXTRA_BUILD_ARGS TARGET=${{ matrix.target }} TARGET_ARCH=${{ matrix.target_arch }} -n
641e266857SAlex Richardson      - name: make kernel-toolchain
65f13b4e46SJessica Clarke        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
661e266857SAlex Richardson      - name: make buildkernel
673491ed65SJohn Baldwin        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
68