From 4cdc231898bf2ffcf76bf5d7f7810993f0c74eb0 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Wed, 17 Sep 2025 20:58:56 -0700 Subject: [PATCH 1/2] rocmPackages.llvm: use same LLVM version for bootstrap and override mixing and matching these doesn't work because LLVM bitcode isn't backwards compatible When default llvmPackages moved to llvmPackages_21 rocm-device-libraries started to fail with errors like Not a constant range list attribute (Producer: 'LLVM21.1.1' Reader: 'LLVM 19.0.0') --- .../development/rocm-modules/6/llvm/default.nix | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/pkgs/development/rocm-modules/6/llvm/default.nix b/pkgs/development/rocm-modules/6/llvm/default.nix index 8dc0456bf366..75e26c8518ea 100644 --- a/pkgs/development/rocm-modules/6/llvm/default.nix +++ b/pkgs/development/rocm-modules/6/llvm/default.nix @@ -1,10 +1,8 @@ { lib, stdenv, - # default LLVM version is used as stdenv to build our toolchain - llvmPackages, # LLVM version closest to ROCm fork to override - llvmPackages_20, + llvmPackages_19, overrideCC, rocm-device-libs, fetchFromGitHub, @@ -39,11 +37,10 @@ let version = "6.4.3"; # major version of this should be the clang version ROCm forked from rocmLlvmVersion = "19.0.0-rocm"; - # llvmPackages_base version should be close to rocmLlvmVersion, - # may be one off because AMD backports a lot and the +1 patches - # may be easier to get to build - llvmPackages_base = llvmPackages_20; - llvmPackagesNoBintools = llvmPackages.override { + # llvmPackages_base version should match rocmLlvmVersion + # so libllvm's bitcode is compatible with the built toolchain + llvmPackages_base = llvmPackages_19; + llvmPackagesNoBintools = llvmPackages_base.override { bootBintools = null; bootBintoolsNoLibc = null; }; @@ -55,7 +52,7 @@ let # oddly fuse-ld=lld fails without this override overrideCC llvmPackagesNoBintools.stdenv ( llvmPackagesNoBintools.libstdcxxClang.override { - inherit (llvmPackages) bintools; + inherit (llvmPackages_base) bintools; } ); @@ -131,7 +128,6 @@ let }; llvmMajorVersion = lib.versions.major rocmLlvmVersion; # An llvmPackages (pkgs/development/compilers/llvm/) built from ROCm LLVM's source tree - # optionally using LLVM libcxx llvmPackagesRocm = llvmPackages_base.override (_old: { stdenv = stdenvToBuildRocmLlvm; @@ -139,6 +135,7 @@ let # ROCm LLVM is closer to 20 official # gitRelease = {}; officialRelease = null; officialRelease = { }; # Set but empty because we're overriding everything from it. + # this version determines which patches are applied version = rocmLlvmVersion; src = llvmSrc; monorepoSrc = llvmSrc; From 1a954472e6b8705633953b2bd139c9b2747c3f08 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Wed, 17 Sep 2025 20:58:56 -0700 Subject: [PATCH 2/2] rocmPackages.llvm: drop unnecessary libunwind A tiny step towards removing rocm-merged-llvm --- pkgs/development/rocm-modules/6/llvm/default.nix | 3 --- 1 file changed, 3 deletions(-) diff --git a/pkgs/development/rocm-modules/6/llvm/default.nix b/pkgs/development/rocm-modules/6/llvm/default.nix index 75e26c8518ea..086e934bea5f 100644 --- a/pkgs/development/rocm-modules/6/llvm/default.nix +++ b/pkgs/development/rocm-modules/6/llvm/default.nix @@ -244,7 +244,6 @@ let ); in rec { - inherit (llvmPackagesRocm) libunwind; inherit (llvmPackagesRocm) libcxx; inherit args; # Pass through original attrs for debugging where non-overridden llvm/clang is getting used @@ -473,8 +472,6 @@ rec { lld lld.lib lld.dev - libunwind - libunwind.dev compiler-rt compiler-rt.dev rocmcxx