From d3754ed58ffd762134a76d401b6602b7273395e4 Mon Sep 17 00:00:00 2001 From: Felix Hanau Date: Wed, 26 Aug 2026 09:10:43 -0400 Subject: [PATCH] Simplify build configuration - Use ubuntu-24.04 runner so we get a more recent clang version - Use native arm64 build, getting rid of zig - Remove setup steps for dependencies that are already installed on the runner images - CLANG_ENABLE_ARCMT is deprecated, don't attempt to disable it - Fix thinLTO support --- .github/workflows/llvm.yml | 38 ++++++++----------- ...inux-amd64.cmake => clang-lld-linux.cmake} | 5 +++ build/llvm/common.args | 1 - build/llvm/zig-linux-arm64.cmake | 14 ------- build/zig-toolchain/ar | 1 - build/zig-toolchain/c++ | 1 - build/zig-toolchain/cc | 1 - build/zig-toolchain/ranlib | 1 - build/zig-toolchain/zig-tool.sh | 3 -- 9 files changed, 20 insertions(+), 45 deletions(-) rename build/llvm/{clang-lld-linux-amd64.cmake => clang-lld-linux.cmake} (60%) delete mode 100644 build/llvm/zig-linux-arm64.cmake delete mode 120000 build/zig-toolchain/ar delete mode 120000 build/zig-toolchain/c++ delete mode 120000 build/zig-toolchain/cc delete mode 120000 build/zig-toolchain/ranlib delete mode 100755 build/zig-toolchain/zig-tool.sh diff --git a/.github/workflows/llvm.yml b/.github/workflows/llvm.yml index cce9913..a4739ad 100644 --- a/.github/workflows/llvm.yml +++ b/.github/workflows/llvm.yml @@ -18,7 +18,6 @@ env: LLVM_TARGETS: ${{ inputs.target }} LLVM_BINS: ${{ inputs.target }} LLVM_LIBS: '' - ZIG_VERSION: '0.16.0' jobs: create-release: runs-on: ubuntu-latest @@ -42,15 +41,15 @@ jobs: STATIC_LIB_SUFFIX: 'a' LLVM_TARGETS_TO_BUILD: 'AArch64' - os: linux-amd64 - runner: ubuntu-22.04 - toolchain: clang-lld-linux-amd64 + runner: ubuntu-24.04 + toolchain: clang-lld-linux BIN_SUFFIX: '' SO_SUFFIX: 'so.${{ inputs.version }}' STATIC_LIB_SUFFIX: 'a' LLVM_TARGETS_TO_BUILD: 'X86' - os: linux-arm64 - runner: ubuntu-22.04 - toolchain: zig-linux-arm64 + runner: ubuntu-24.04-arm + toolchain: clang-lld-linux BIN_SUFFIX: '' SO_SUFFIX: 'so.${{ inputs.version }}' STATIC_LIB_SUFFIX: 'a' @@ -64,33 +63,23 @@ jobs: SO_SUFFIX: 'dll' STATIC_LIB_SUFFIX: 'lib' LLVM_TARGETS_TO_BUILD: 'X86' + # Disable thinLTO on Windows since MSVC does not support it + EXTRA_CMAKE_ARGS: '-DLLVM_ENABLE_LTO=OFF' runs-on: ${{ matrix.platform.runner }} name: ${{ matrix.platform.os }} steps: - uses: actions/checkout@v7 - - name: Setup for macOS - if: runner.os == 'macOS' - run: | - brew install cmake ninja - name: Setup for Linux + # The runner image already installs clang and lld, but fails to provide non-versioned + # symlinks for lld/llvm-ar/llvm-ranlib – install the generic packages so cmake can find + # them. if: runner.os == 'Linux' run: | - sudo apt-get install -y cmake ninja-build + sudo apt-get install -y lld llvm - name: Setup for Windows if: runner.os == 'Windows' run: | - choco install cmake ninja curl - - name: Get zig toolchain - if: startsWith(matrix.platform.toolchain, 'zig') - shell: bash - run: | - echo "zig is $ZIG_VERSION" - curl -L https://ziglang.org/download/${ZIG_VERSION}/zig-x86_64-linux-${ZIG_VERSION}.tar.xz -o zig.tar.xz - - mkdir zig - tar -C zig --strip-components=1 -xJf zig.tar.xz - cd zig - pwd >> $GITHUB_PATH + choco install curl - name: Get llvm shell: bash run: | @@ -99,12 +88,15 @@ jobs: tar -C llvm --strip-components=1 ${{ matrix.platform.TAR_ARGS }} -xJf llvm.tar.xz - name: Generate build files shell: bash + # The windows build uses MinGW, which needs to be first in path based on https://github.com/actions/runner-images/issues/11102 run: | + [[ "${{ runner.os }}" != 'Windows' ]] || export PATH="/c/mingw64/bin:$PATH" cd llvm - cmake -B build llvm -GNinja -DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/build/llvm/${{ matrix.platform.toolchain }}.cmake $(cat $GITHUB_WORKSPACE/build/llvm/common.args) -DLLVM_TARGETS_TO_BUILD=${{ matrix.platform.LLVM_TARGETS_TO_BUILD }} + cmake -B build llvm -GNinja -DCMAKE_TOOLCHAIN_FILE=$GITHUB_WORKSPACE/build/llvm/${{ matrix.platform.toolchain }}.cmake $(cat $GITHUB_WORKSPACE/build/llvm/common.args) -DLLVM_TARGETS_TO_BUILD=${{ matrix.platform.LLVM_TARGETS_TO_BUILD }} ${{ matrix.platform.EXTRA_CMAKE_ARGS }} - name: Build targets shell: bash run: | + [[ "${{ runner.os }}" != 'Windows' ]] || export PATH="/c/mingw64/bin:$PATH" cd llvm/build ninja $LLVM_TARGETS # Ninja automatically builds in parallel - name: Upload products diff --git a/build/llvm/clang-lld-linux-amd64.cmake b/build/llvm/clang-lld-linux.cmake similarity index 60% rename from build/llvm/clang-lld-linux-amd64.cmake rename to build/llvm/clang-lld-linux.cmake index 6164752..d5b9da0 100644 --- a/build/llvm/clang-lld-linux-amd64.cmake +++ b/build/llvm/clang-lld-linux.cmake @@ -1,6 +1,11 @@ # Toolchain file to build LLVM using clang and link using lld set(CMAKE_C_COMPILER clang) set(CMAKE_CXX_COMPILER clang++) +set(CMAKE_LINKER_TYPE LLD) # Tell LLVM's build system to link with lld instead of the default linker set(LLVM_USE_LINKER lld CACHE STRING "" FORCE) + +# Use LLVM versions of ar and ranlib to avoid warnings about thinLTO object files +set(CMAKE_AR llvm-ar) +set(CMAKE_RANLIB llvm-ranlib) diff --git a/build/llvm/common.args b/build/llvm/common.args index 91df7af..7e480ef 100644 --- a/build/llvm/common.args +++ b/build/llvm/common.args @@ -10,7 +10,6 @@ -DLLVM_INCLUDE_UTILS=OFF -DLLVM_ENABLE_IDE=ON -DLLVM_ENABLE_PLUGINS=ON --DCLANG_ENABLE_ARCMT=OFF -DCLANG_ENABLE_STATIC_ANALYZER=OFF -DCLANG_PLUGIN_SUPPORT=ON -DCMAKE_CXX_FLAGS=-g0 diff --git a/build/llvm/zig-linux-arm64.cmake b/build/llvm/zig-linux-arm64.cmake deleted file mode 100644 index 422db5b..0000000 --- a/build/llvm/zig-linux-arm64.cmake +++ /dev/null @@ -1,14 +0,0 @@ -# Tell CMake to cross compile -set(CMAKE_SYSTEM_NAME Linux) -set(CMAKE_SYSTEM_VERSION 1) -set(CMAKE_SYSTEM_PROCESSOR aarch64) - -# Set up Zig toolchain -set(CMAKE_C_COMPILER "${CMAKE_CURRENT_LIST_DIR}/../zig-toolchain/cc" -target aarch64-linux-gnu) -set(CMAKE_CXX_COMPILER "${CMAKE_CURRENT_LIST_DIR}/../zig-toolchain/c++" -target aarch64-linux-gnu) -set(CMAKE_AR "${CMAKE_CURRENT_LIST_DIR}/../zig-toolchain/ar") -set(CMAKE_RANLIB "${CMAKE_CURRENT_LIST_DIR}/../zig-toolchain/ranlib") - -# Tell llvm it is being built for another platform -set(LLVM_DEFAULT_TARGET_TRIPLE aarch64-linux-gnu CACHE INTERNAL "" FORCE) - diff --git a/build/zig-toolchain/ar b/build/zig-toolchain/ar deleted file mode 120000 index 82cf569..0000000 --- a/build/zig-toolchain/ar +++ /dev/null @@ -1 +0,0 @@ -zig-tool.sh \ No newline at end of file diff --git a/build/zig-toolchain/c++ b/build/zig-toolchain/c++ deleted file mode 120000 index 82cf569..0000000 --- a/build/zig-toolchain/c++ +++ /dev/null @@ -1 +0,0 @@ -zig-tool.sh \ No newline at end of file diff --git a/build/zig-toolchain/cc b/build/zig-toolchain/cc deleted file mode 120000 index 82cf569..0000000 --- a/build/zig-toolchain/cc +++ /dev/null @@ -1 +0,0 @@ -zig-tool.sh \ No newline at end of file diff --git a/build/zig-toolchain/ranlib b/build/zig-toolchain/ranlib deleted file mode 120000 index 82cf569..0000000 --- a/build/zig-toolchain/ranlib +++ /dev/null @@ -1 +0,0 @@ -zig-tool.sh \ No newline at end of file diff --git a/build/zig-toolchain/zig-tool.sh b/build/zig-toolchain/zig-tool.sh deleted file mode 100755 index caedca2..0000000 --- a/build/zig-toolchain/zig-tool.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -zig $(basename $0) "$@"