From 558677841a69759f7a33e219bec950288bfd4fbb Mon Sep 17 00:00:00 2001 From: Martin Kinkelin Date: Mon, 23 Feb 2026 20:06:29 +0100 Subject: [PATCH 01/10] CI: Switch to zstd-compressed LDC-LLVM tarballs --- .github/actions/1-setup/action.yml | 10 +++++----- .github/actions/3-build-cross/action.yml | 10 +++++----- .github/workflows/main.yml | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/actions/1-setup/action.yml b/.github/actions/1-setup/action.yml index de1155d760..e92d699a4f 100644 --- a/.github/actions/1-setup/action.yml +++ b/.github/actions/1-setup/action.yml @@ -24,7 +24,7 @@ runs: packages=( \ git-core cmake g++ \ libcurl4 libzstd-dev \ - curl gdb p7zip-full tzdata unzip zip python3-pip \ + curl gdb p7zip-full zstd tzdata unzip zip python3-pip \ ) if [[ $arch == x86_64 ]]; then packages+=(g++-multilib libcurl4:i386) @@ -111,11 +111,11 @@ runs: elif [[ '${{ runner.os }}' == macOS ]]; then os=osx fi - curl -fL --retry 3 --max-time 300 -o llvm.tar.xz \ - https://github.com/ldc-developers/llvm-project/releases/download/$tag/llvm-$version-$os-$arch$assertsSuffix.tar.xz + curl -fL --retry 3 --max-time 300 -o llvm.tar.zst \ + https://github.com/ldc-developers/llvm-project/releases/download/$tag/llvm-$version-$os-$arch$assertsSuffix.tar.zst mkdir llvm - tar -xf llvm.tar.xz --strip 1 -C llvm - rm llvm.tar.xz + tar -xf llvm.tar.zst --zstd --strip 1 -C llvm + rm llvm.tar.zst fi llvm/bin/llvm-config --version diff --git a/.github/actions/3-build-cross/action.yml b/.github/actions/3-build-cross/action.yml index 4f126cb9ec..6d3d1d4416 100644 --- a/.github/actions/3-build-cross/action.yml +++ b/.github/actions/3-build-cross/action.yml @@ -14,7 +14,7 @@ inputs: default: false android_ndk_version: required: false - default: r27c + default: r29 android_api_level: required: false default: 29 @@ -45,11 +45,11 @@ runs: fi fi - curl -fL --retry 3 --max-time 300 -o llvm-cross.tar.xz \ - https://github.com/ldc-developers/llvm-project/releases/download/$tag/llvm-$version-${{ inputs.os }}-${{ inputs.arch }}$assertsSuffix.tar.xz + curl -fL --retry 3 --max-time 300 -o llvm-cross.tar.zst \ + https://github.com/ldc-developers/llvm-project/releases/download/$tag/llvm-$version-${{ inputs.os }}-${{ inputs.arch }}$assertsSuffix.tar.zst mkdir llvm-cross - tar -xf llvm-cross.tar.xz --strip 1 -C llvm-cross - rm llvm-cross.tar.xz + tar -xf llvm-cross.tar.zst --zstd --strip 1 -C llvm-cross + rm llvm-cross.tar.zst - name: Make non-native llvm-config runnable on host shell: bash diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 44f2c704d7..3b5ab76f97 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,7 +14,7 @@ concurrency: cancel-in-progress: true env: - LLVM_VERSION: 21.1.8 + LLVM_VERSION: d1f9056b jobs: build-native: From 3f252c1d4bd99aaa9d74b274e619c345527ae297 Mon Sep 17 00:00:00 2001 From: Martin Kinkelin Date: Thu, 26 Feb 2026 02:19:43 +0100 Subject: [PATCH 02/10] [LLVM built with API level 30; no plugins] --- .github/workflows/main.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3b5ab76f97..57a35e0a91 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,7 +14,7 @@ concurrency: cancel-in-progress: true env: - LLVM_VERSION: d1f9056b + LLVM_VERSION: adcb3508 jobs: build-native: @@ -288,6 +288,7 @@ jobs: android_x86_arch: i686 extra_cmake_flags: >- -DLDC_INSTALL_LLVM_RUNTIME_LIBS_ARCH=arm-android + -DLDC_ENABLE_PLUGINS=OFF - job_name: Android aarch64 host_os: ubuntu-22.04 @@ -296,6 +297,7 @@ jobs: android_x86_arch: x86_64 extra_cmake_flags: >- -DLDC_INSTALL_LLVM_RUNTIME_LIBS_ARCH=aarch64-android + -DLDC_ENABLE_PLUGINS=OFF name: ${{ matrix.job_name }} runs-on: ${{ matrix.host_os }} From c756f8129542d0faef107688467df93d789779ff Mon Sep 17 00:00:00 2001 From: Martin Kinkelin Date: Thu, 26 Feb 2026 13:45:36 +0100 Subject: [PATCH 03/10] [LLVM built with no-op RegisterHandlers()] --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 57a35e0a91..1a8a63f39e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,7 +14,7 @@ concurrency: cancel-in-progress: true env: - LLVM_VERSION: adcb3508 + LLVM_VERSION: 2846ebab jobs: build-native: From e4da938966b384c60105f7f16d0a4a325f4921b2 Mon Sep 17 00:00:00 2001 From: Martin Kinkelin Date: Fri, 27 Feb 2026 19:50:02 +0100 Subject: [PATCH 04/10] [remove -fstack-protector-strong and enable LLVM assertions] --- .github/actions/3-build-cross/action.yml | 5 ++++- .github/workflows/main.yml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/actions/3-build-cross/action.yml b/.github/actions/3-build-cross/action.yml index 6d3d1d4416..f878356207 100644 --- a/.github/actions/3-build-cross/action.yml +++ b/.github/actions/3-build-cross/action.yml @@ -35,7 +35,7 @@ runs: fi if [[ '${{ inputs.os }}' == android ]]; then - assertsSuffix="" + assertsSuffix="-withAsserts" else # Use assertions for untagged builds. Must be the same as for the host LLVM package, because # llvm-config of host package will be used for the cross build configuration. @@ -97,6 +97,9 @@ runs: mv "android-ndk-$version" android-ndk rm android-ndk.zip + # remove the implicit -fstack-protector-strong + sed -i 's|^ " -fstack-protector-strong"$||' android-ndk/build/cmake/flags.cmake + arch='${{ inputs.arch }}' apiLevel='${{ inputs.android_api_level }}' cmakeFlags="-DTARGET_SYSTEM='Android;Linux;UNIX'" diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1a8a63f39e..f62f04cd0e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,7 +14,7 @@ concurrency: cancel-in-progress: true env: - LLVM_VERSION: 2846ebab + LLVM_VERSION: bdd275b6 jobs: build-native: From d55a9ce170d5cab49e155947f7e550fffe698132 Mon Sep 17 00:00:00 2001 From: Martin Kinkelin Date: Fri, 27 Feb 2026 20:34:00 +0100 Subject: [PATCH 05/10] [restore plugins support] --- .github/workflows/main.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f62f04cd0e..b3157cac8a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -288,7 +288,6 @@ jobs: android_x86_arch: i686 extra_cmake_flags: >- -DLDC_INSTALL_LLVM_RUNTIME_LIBS_ARCH=arm-android - -DLDC_ENABLE_PLUGINS=OFF - job_name: Android aarch64 host_os: ubuntu-22.04 @@ -297,7 +296,6 @@ jobs: android_x86_arch: x86_64 extra_cmake_flags: >- -DLDC_INSTALL_LLVM_RUNTIME_LIBS_ARCH=aarch64-android - -DLDC_ENABLE_PLUGINS=OFF name: ${{ matrix.job_name }} runs-on: ${{ matrix.host_os }} From b68e1599aae76766fb78833d3903d0d8745ff7ea Mon Sep 17 00:00:00 2001 From: Martin Kinkelin Date: Sat, 28 Feb 2026 18:26:10 +0100 Subject: [PATCH 06/10] [LLVM without backtraces support, and disabled assertions] --- .github/actions/3-build-cross/action.yml | 2 +- .github/workflows/main.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/3-build-cross/action.yml b/.github/actions/3-build-cross/action.yml index f878356207..ba2da18bb9 100644 --- a/.github/actions/3-build-cross/action.yml +++ b/.github/actions/3-build-cross/action.yml @@ -35,7 +35,7 @@ runs: fi if [[ '${{ inputs.os }}' == android ]]; then - assertsSuffix="-withAsserts" + assertsSuffix="" else # Use assertions for untagged builds. Must be the same as for the host LLVM package, because # llvm-config of host package will be used for the cross build configuration. diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b3157cac8a..cf4517eaf4 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,7 +14,7 @@ concurrency: cancel-in-progress: true env: - LLVM_VERSION: bdd275b6 + LLVM_VERSION: f8faf15f jobs: build-native: From a28e1247deaace3c2b844a7c30f6683fd29a8460 Mon Sep 17 00:00:00 2001 From: Martin Kinkelin Date: Sat, 28 Feb 2026 19:00:43 +0100 Subject: [PATCH 07/10] [revise android-llvm-config.in] --- .github/actions/3-build-cross/android-llvm-config.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/actions/3-build-cross/android-llvm-config.in b/.github/actions/3-build-cross/android-llvm-config.in index 6555349156..5f107847f7 100644 --- a/.github/actions/3-build-cross/android-llvm-config.in +++ b/.github/actions/3-build-cross/android-llvm-config.in @@ -43,9 +43,9 @@ Typical components: version=@LLVM_VERSION@ prefix=@LLVM_INSTALL_DIR@ has_rtti=NO -CPPFLAGS="-I${prefix}/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS" +CPPFLAGS="-I${prefix}/include -DEXPERIMENTAL_KEY_INSTRUCTIONS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS" CFLAGS="${CPPFLAGS} ${CFLAGS}" -CXXFLAGS="${CFLAGS} -std=c++17 -fno-exceptions -funwind-tables" +CXXFLAGS="${CFLAGS} -std=c++17 --stdlib=libc++ -fno-exceptions -funwind-tables" if [ "$has_rtti" != "YES" ]; then CXXFLAGS="$CXXFLAGS -fno-rtti"; fi LDFLAGS="-L${prefix}/lib" LIBFILE="${prefix}/lib/libLLVM-$version.so" @@ -70,7 +70,7 @@ handle_args () { cflags) echo "$CFLAGS";; cxxflags) echo "$CXXFLAGS";; ldflags) echo "$LDFLAGS";; - system-libs) echo "-lc -ldl -lz -lm";; + system-libs) echo "-ldl -lm -lz";; libs) echo "$libs";; libnames) echo "libLLVM-$version.so";; libfiles) echo "$LIBFILE";; From 7092a84bee3c0ac2723fe8cebc97950915585063 Mon Sep 17 00:00:00 2001 From: Martin Kinkelin Date: Sat, 28 Feb 2026 19:21:45 +0100 Subject: [PATCH 08/10] [try without lld integration] --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cf4517eaf4..79ba0b9914 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -296,6 +296,7 @@ jobs: android_x86_arch: x86_64 extra_cmake_flags: >- -DLDC_INSTALL_LLVM_RUNTIME_LIBS_ARCH=aarch64-android + -DLDC_WITH_LLD=OFF name: ${{ matrix.job_name }} runs-on: ${{ matrix.host_os }} From 26fb0e2d0fc076c82d45d10a8235a7be102acf56 Mon Sep 17 00:00:00 2001 From: Martin Kinkelin Date: Sun, 1 Mar 2026 15:30:12 +0100 Subject: [PATCH 09/10] [enable debuginfos for LDC] --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 79ba0b9914..3ca783b64a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -297,6 +297,7 @@ jobs: extra_cmake_flags: >- -DLDC_INSTALL_LLVM_RUNTIME_LIBS_ARCH=aarch64-android -DLDC_WITH_LLD=OFF + -DCMAKE_BUILD_TYPE=RelWithDebInfo name: ${{ matrix.job_name }} runs-on: ${{ matrix.host_os }} From 6ba739cdd9bf808c8c51f0e0343c219f1b78883f Mon Sep 17 00:00:00 2001 From: Martin Kinkelin Date: Sun, 1 Mar 2026 15:30:50 +0100 Subject: [PATCH 10/10] [verbose ninja for LDC build] --- .github/actions/helper-build-ldc/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/helper-build-ldc/action.yml b/.github/actions/helper-build-ldc/action.yml index 292888bb7d..7c4461e57b 100644 --- a/.github/actions/helper-build-ldc/action.yml +++ b/.github/actions/helper-build-ldc/action.yml @@ -40,7 +40,7 @@ runs: ${{ inputs.specify_install_dir == 'true' && '-DINCLUDE_INSTALL_DIR="$installDir/import"' || '' }} \ ${{ inputs.cmake_flags }} - ninja obj/ldc2.o ${{ inputs.build_targets }} + ninja -v obj/ldc2.o ${{ inputs.build_targets }} # Windows: invoke CMake & ninja in MSVC env - if: runner.os == 'Windows'