From 48ed59bf15482ad39e014ef7ea43df8d37716a44 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Sat, 20 Sep 2025 22:10:29 -0700 Subject: [PATCH 01/27] rocmPackages.hipfft: remove unneeded git dependency --- pkgs/development/rocm-modules/6/hipfft/default.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkgs/development/rocm-modules/6/hipfft/default.nix b/pkgs/development/rocm-modules/6/hipfft/default.nix index 1002b0b3d16f..bd4c2505eb6c 100644 --- a/pkgs/development/rocm-modules/6/hipfft/default.nix +++ b/pkgs/development/rocm-modules/6/hipfft/default.nix @@ -6,7 +6,6 @@ cmake, rocm-cmake, clr, - git, rocfft, gtest, boost, @@ -47,7 +46,6 @@ stdenv.mkDerivation (finalAttrs: { nativeBuildInputs = [ clr - git cmake rocm-cmake ]; From 61e4694381c60133585abc0f77c623c1133c2137 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Sat, 20 Sep 2025 22:11:01 -0700 Subject: [PATCH 02/27] rocmPackages.rocdbgapi: remove unneeded git dependency --- pkgs/development/rocm-modules/6/rocdbgapi/default.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkgs/development/rocm-modules/6/rocdbgapi/default.nix b/pkgs/development/rocm-modules/6/rocdbgapi/default.nix index 0140218222a7..b3203f03d4c3 100644 --- a/pkgs/development/rocm-modules/6/rocdbgapi/default.nix +++ b/pkgs/development/rocm-modules/6/rocdbgapi/default.nix @@ -5,7 +5,6 @@ rocmUpdateScript, cmake, rocm-cmake, - git, rocm-comgr, rocm-runtime, hwdata, @@ -82,7 +81,6 @@ stdenv.mkDerivation (finalAttrs: { nativeBuildInputs = [ cmake rocm-cmake - git ] ++ lib.optionals buildDocs [ writableTmpDirAsHomeHook From 584aa424a39fffda122279e495014c0e386e95af Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Sat, 20 Sep 2025 22:11:53 -0700 Subject: [PATCH 03/27] rocmPackages.rocsparse: remove unneeded git dependency --- pkgs/development/rocm-modules/6/rocsparse/default.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkgs/development/rocm-modules/6/rocsparse/default.nix b/pkgs/development/rocm-modules/6/rocsparse/default.nix index 5b17880b2ea0..c16b67408fd3 100644 --- a/pkgs/development/rocm-modules/6/rocsparse/default.nix +++ b/pkgs/development/rocm-modules/6/rocsparse/default.nix @@ -9,7 +9,6 @@ rocprim, clr, gfortran, - git, gtest, boost, python3Packages, @@ -49,7 +48,6 @@ stdenv.mkDerivation (finalAttrs: { buildInputs = [ rocprim - git ] ++ lib.optionals (buildTests || buildBenchmarks) [ gtest From 51082408812d7f56091e958ccbf6e4c546f6c008 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Sat, 20 Sep 2025 22:15:05 -0700 Subject: [PATCH 04/27] rocmPackages.rocprofiler: remove unneeded git, systemd deps --- pkgs/development/rocm-modules/6/rocprofiler/default.nix | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pkgs/development/rocm-modules/6/rocprofiler/default.nix b/pkgs/development/rocm-modules/6/rocprofiler/default.nix index 341aae4d1e95..9564dbd3675f 100644 --- a/pkgs/development/rocm-modules/6/rocprofiler/default.nix +++ b/pkgs/development/rocm-modules/6/rocprofiler/default.nix @@ -18,9 +18,7 @@ libxml2, elfutils, mpi, - systemd, gtest, - git, python3Packages, gpuTargets ? clr.gpuTargets, }: @@ -59,7 +57,6 @@ stdenv.mkDerivation (finalAttrs: { cmake clang clr - git python3Packages.lxml python3Packages.cppheaderparser python3Packages.pyyaml @@ -73,7 +70,6 @@ stdenv.mkDerivation (finalAttrs: { libxml2 elfutils mpi - systemd gtest aqlprofile ]; From 5aad54041274aea281ff8e745cb1a2ee040118a6 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Sat, 20 Sep 2025 22:15:46 -0700 Subject: [PATCH 05/27] rocmPackages.rocmlir: remove unneeded git dependency --- pkgs/development/rocm-modules/6/rocmlir/default.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkgs/development/rocm-modules/6/rocmlir/default.nix b/pkgs/development/rocm-modules/6/rocmlir/default.nix index 281b75f76814..cc2b298f6ce1 100644 --- a/pkgs/development/rocm-modules/6/rocmlir/default.nix +++ b/pkgs/development/rocm-modules/6/rocmlir/default.nix @@ -6,7 +6,6 @@ cmake, rocm-cmake, clr, - git, libxml2, libedit, zstd, @@ -64,7 +63,6 @@ stdenv.mkDerivation (finalAttrs: { ]; buildInputs = [ - git libxml2 libedit ]; From 64d0f051ada160a9d0b84e6667d6ae34b4b8920e Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Sat, 20 Sep 2025 22:16:48 -0700 Subject: [PATCH 06/27] rocmPackages.rocblas: swap git for gitMinimal --- pkgs/development/rocm-modules/6/rocblas/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/rocm-modules/6/rocblas/default.nix b/pkgs/development/rocm-modules/6/rocblas/default.nix index 768ab094b38f..0cfcce2370d6 100644 --- a/pkgs/development/rocm-modules/6/rocblas/default.nix +++ b/pkgs/development/rocm-modules/6/rocblas/default.nix @@ -16,7 +16,7 @@ gtest, gfortran, openmp, - git, + gitMinimal, amd-blis, zstd, roctracer, @@ -53,7 +53,7 @@ stdenv.mkDerivation (finalAttrs: { # no ninja, it buffers console output and nix times out long periods of no output rocm-cmake clr - git + gitMinimal pkg-config ] ++ lib.optionals buildTensile [ From e5514682abe715fc14daacea9494b2904c9a8930 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Sat, 20 Sep 2025 22:17:34 -0700 Subject: [PATCH 07/27] rocmPackages.rocr-debug-agent: remove unneeded git dependency --- pkgs/development/rocm-modules/6/rocr-debug-agent/default.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkgs/development/rocm-modules/6/rocr-debug-agent/default.nix b/pkgs/development/rocm-modules/6/rocr-debug-agent/default.nix index 2b1501dca51a..54af3dd967e4 100644 --- a/pkgs/development/rocm-modules/6/rocr-debug-agent/default.nix +++ b/pkgs/development/rocm-modules/6/rocr-debug-agent/default.nix @@ -5,7 +5,6 @@ rocmUpdateScript, cmake, clr, - git, rocdbgapi, elfutils, }: @@ -24,7 +23,6 @@ stdenv.mkDerivation (finalAttrs: { nativeBuildInputs = [ cmake clr - git ]; buildInputs = [ From e4020e3e6c7b7467d213cbc382ac2a2c80e288bf Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Sat, 20 Sep 2025 22:18:05 -0700 Subject: [PATCH 08/27] rocmPackages.hipsparse: remove unneeded git dependency --- pkgs/development/rocm-modules/6/hipsparse/default.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkgs/development/rocm-modules/6/hipsparse/default.nix b/pkgs/development/rocm-modules/6/hipsparse/default.nix index f10280335ba0..6d91497c67d5 100644 --- a/pkgs/development/rocm-modules/6/hipsparse/default.nix +++ b/pkgs/development/rocm-modules/6/hipsparse/default.nix @@ -8,7 +8,6 @@ rocsparse, clr, gfortran, - git, gtest, openmp, buildTests ? false, @@ -48,7 +47,6 @@ stdenv.mkDerivation (finalAttrs: { buildInputs = [ rocsparse - git ] ++ lib.optionals (buildTests || buildBenchmarks) [ gtest From f633166ca7d59bd726893a8ac652a426bfcf324c Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Tue, 30 Sep 2025 07:40:19 -0700 Subject: [PATCH 09/27] rocmPackages.llvm: rename rocmcxx to rocm-toolchain Previous name was inaccurate. --- pkgs/development/rocm-modules/6/clr/default.nix | 1 + pkgs/development/rocm-modules/6/llvm/default.nix | 12 ++++++------ pkgs/development/rocm-modules/6/rocm-smi/default.nix | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/pkgs/development/rocm-modules/6/clr/default.nix b/pkgs/development/rocm-modules/6/clr/default.nix index 15c742fc4b70..90af58ad1203 100644 --- a/pkgs/development/rocm-modules/6/clr/default.nix +++ b/pkgs/development/rocm-modules/6/clr/default.nix @@ -13,6 +13,7 @@ rocm-device-libs, rocm-comgr, rocm-runtime, + rocm-toolchain, rocm-core, roctracer, rocminfo, diff --git a/pkgs/development/rocm-modules/6/llvm/default.nix b/pkgs/development/rocm-modules/6/llvm/default.nix index 086e934bea5f..8b54aeade9a8 100644 --- a/pkgs/development/rocm-modules/6/llvm/default.nix +++ b/pkgs/development/rocm-modules/6/llvm/default.nix @@ -71,7 +71,7 @@ let stdenvToBuildRocmLlvm.cc stdenvToBuildRocmLlvm.cc.cc ]; - # A prefix for use as the GCC prefix when building rocmcxx + # A prefix for use as the GCC prefix when building rocm-toolchain gcc-prefix-headers = symlinkJoin { name = "gcc-prefix-headers"; paths = [ @@ -149,7 +149,7 @@ let runCommand name { # If this is erroring, try why-depends --precise on the symlinkJoin of inputs to look for the problem - # nix why-depends --precise .#rocmPackages.llvm.rocmcxx.linked /store/path/its/not/allowed + # nix why-depends --precise .#rocmPackages.llvm.rocm-toolchain.linked /store/path/its/not/allowed disallowedRequisites = disallowedRefsForToolchain; passthru.linked = linked; } @@ -384,7 +384,7 @@ rec { (builtins.filter tablegenUsage old.cmakeFlags) ++ commonCmakeFlags ++ lib.optionals (!withLibcxx) [ - # FIXME: Config file in rocmcxx instead of GCC_INSTALL_PREFIX? + # FIXME: Config file in rocm-toolchain instead of GCC_INSTALL_PREFIX? # Expected to be fully removed eventually "-DUSE_DEPRECATED_GCC_INSTALL_PREFIX=ON" "-DGCC_INSTALL_PREFIX=${gcc-prefix}" @@ -407,7 +407,7 @@ rec { # A clang that understands standard include searching in a GNU sysroot and will put GPU libs in include path # in the right order # and expects its libc to be in the sysroot - rocmcxx = + rocm-toolchain = (sysrootCompiler clang-unwrapped "rocmcxx" ( listUsefulOutputs ( [ @@ -428,7 +428,7 @@ rec { )) // { version = llvmMajorVersion; - cc = rocmcxx; + cc = rocm-toolchain; libllvm = llvm; isClang = true; isGNU = false; @@ -460,7 +460,7 @@ rec { }; }; - clang = rocmcxx; + clang = rocm-toolchain; # Emulate a monolithic ROCm LLVM build to support building ROCm's in-tree LLVM projects # TODO(@LunNova): destroy this diff --git a/pkgs/development/rocm-modules/6/rocm-smi/default.nix b/pkgs/development/rocm-modules/6/rocm-smi/default.nix index f146d6f9fb43..15477b7e9d9e 100644 --- a/pkgs/development/rocm-modules/6/rocm-smi/default.nix +++ b/pkgs/development/rocm-modules/6/rocm-smi/default.nix @@ -50,7 +50,7 @@ stdenv.mkDerivation (finalAttrs: { mv $out/libexec/rocm_smi/.rsmiBindings.py-wrapped $out/libexec/rocm_smi/rsmiBindings.py '' # workaround: propagate libdrm/ manually - # rocmcxx doesn't automatically add buildInputs to isystem include path like + # rocm-toolchain doesn't automatically add buildInputs to isystem include path like # wrapper based toolchains, cmake files often don't find_package(rocm-smi) so # can't rely on cmake propagated interface # upstream have been shipping libdrm copied into /opt/rocm From d481667c842d5fb0a5a7b5ac776e5d0924deb000 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Sat, 20 Sep 2025 22:19:25 -0700 Subject: [PATCH 10/27] rocmPackages.rocalution: remove unneeded git dependency --- pkgs/development/rocm-modules/6/rocalution/default.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkgs/development/rocm-modules/6/rocalution/default.nix b/pkgs/development/rocm-modules/6/rocalution/default.nix index 0fbf4025bf3f..807f53187730 100644 --- a/pkgs/development/rocm-modules/6/rocalution/default.nix +++ b/pkgs/development/rocm-modules/6/rocalution/default.nix @@ -10,7 +10,6 @@ rocprim, rocrand, clr, - git, pkg-config, openmp, openmpi, @@ -49,7 +48,6 @@ stdenv.mkDerivation (finalAttrs: { cmake rocm-cmake clr - git pkg-config ]; From 645a298fb34fb8b882540da4285733afb3e8bcdb Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Wed, 24 Sep 2025 07:03:33 -0700 Subject: [PATCH 11/27] rocmPackages.hipcc: don't depend on rocm-merged-llvm --- pkgs/development/rocm-modules/6/default.nix | 5 +---- .../development/rocm-modules/6/hipcc/default.nix | 16 +++++++++++----- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/pkgs/development/rocm-modules/6/default.nix b/pkgs/development/rocm-modules/6/default.nix index 7c259148e23d..4bacc45b30ee 100644 --- a/pkgs/development/rocm-modules/6/default.nix +++ b/pkgs/development/rocm-modules/6/default.nix @@ -80,10 +80,7 @@ let hip-common = self.callPackage ./hip-common { }; - hipcc = self.callPackage ./hipcc { - stdenv = origStdenv; - inherit (llvm) rocm-merged-llvm; - }; + hipcc = self.callPackage ./hipcc { stdenv = origStdenv; }; # Replaces hip, opencl-runtime, and rocclr clr = self.callPackage ./clr { }; diff --git a/pkgs/development/rocm-modules/6/hipcc/default.nix b/pkgs/development/rocm-modules/6/hipcc/default.nix index 4dc1c609036e..1525cb49b223 100644 --- a/pkgs/development/rocm-modules/6/hipcc/default.nix +++ b/pkgs/development/rocm-modules/6/hipcc/default.nix @@ -1,7 +1,7 @@ { lib, stdenv, - rocm-merged-llvm, + llvm, cmake, lsb-release, }: @@ -9,13 +9,19 @@ stdenv.mkDerivation (finalAttrs: { pname = "hipcc"; # In-tree with ROCm LLVM - inherit (rocm-merged-llvm) version; - src = rocm-merged-llvm.llvm-src; + inherit (llvm.llvm) version; + src = llvm.llvm.monorepoSrc; sourceRoot = "${finalAttrs.src.name}/amd/hipcc"; + strictDeps = true; - nativeBuildInputs = [ cmake ]; + nativeBuildInputs = [ + llvm.rocm-toolchain + cmake + ]; - buildInputs = [ rocm-merged-llvm ]; + buildInputs = [ + llvm.clang-unwrapped + ]; patches = [ # https://github.com/ROCm/llvm-project/pull/183 From 766dabeb38450d1c01c1f0b3035f384638c84883 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Wed, 24 Sep 2025 07:13:25 -0700 Subject: [PATCH 12/27] rocmPackages.ck4inductor: don't depend on rocm-merged-llvm --- .../rocm-modules/6/composable_kernel/ck4inductor.nix | 4 ++-- pkgs/development/rocm-modules/6/default.nix | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/development/rocm-modules/6/composable_kernel/ck4inductor.nix b/pkgs/development/rocm-modules/6/composable_kernel/ck4inductor.nix index c60552c490a2..5f839677bca0 100644 --- a/pkgs/development/rocm-modules/6/composable_kernel/ck4inductor.nix +++ b/pkgs/development/rocm-modules/6/composable_kernel/ck4inductor.nix @@ -3,9 +3,9 @@ python, composable_kernel, lib, + rocm-toolchain, setuptools, setuptools-scm, - rocm-merged-llvm, }: buildPythonPackage { pyproject = true; @@ -25,7 +25,7 @@ buildPythonPackage { propagatedBuildInputs = [ # At runtime will fail to compile anything with ck4inductor without this # can't easily use in checks phase because most of the compiler machinery is in torch - rocm-merged-llvm + rocm-toolchain ]; checkPhase = '' if [ ! -d "$out/${python.sitePackages}/ck4inductor" ]; then diff --git a/pkgs/development/rocm-modules/6/default.nix b/pkgs/development/rocm-modules/6/default.nix index 4bacc45b30ee..418f608b5707 100644 --- a/pkgs/development/rocm-modules/6/default.nix +++ b/pkgs/development/rocm-modules/6/default.nix @@ -177,7 +177,7 @@ let ck4inductor = pyPackages.callPackage ./composable_kernel/ck4inductor.nix { inherit (self) composable_kernel; - inherit (llvm) rocm-merged-llvm; + inherit (llvm) rocmcxx; }; half = self.callPackage ./half { }; From ded510a1114526d5c2afd4f0837cf91b51ba1b89 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Wed, 24 Sep 2025 07:25:44 -0700 Subject: [PATCH 13/27] rocmPackages.hipify: don't depend on rocm-merged-llvm --- pkgs/development/rocm-modules/6/default.nix | 4 ---- .../rocm-modules/6/hipify/default.nix | 18 +++++++++++------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/pkgs/development/rocm-modules/6/default.nix b/pkgs/development/rocm-modules/6/default.nix index 418f608b5707..7a7450f9f633 100644 --- a/pkgs/development/rocm-modules/6/default.nix +++ b/pkgs/development/rocm-modules/6/default.nix @@ -89,10 +89,6 @@ let hipify = self.callPackage ./hipify { stdenv = origStdenv; - inherit (llvm) - clang - rocm-merged-llvm - ; }; # hsakmt was merged into rocm-runtime diff --git a/pkgs/development/rocm-modules/6/hipify/default.nix b/pkgs/development/rocm-modules/6/hipify/default.nix index 1fe6e969a776..8d77fed0cf2e 100644 --- a/pkgs/development/rocm-modules/6/hipify/default.nix +++ b/pkgs/development/rocm-modules/6/hipify/default.nix @@ -4,9 +4,7 @@ fetchFromGitHub, rocmUpdateScript, cmake, - clang, - libxml2, - rocm-merged-llvm, + llvm, zlib, zstd, perl, @@ -23,21 +21,27 @@ stdenv.mkDerivation (finalAttrs: { hash = "sha256-uj25WmGCpwouS1yzW9Oil5Vyrbyj5yRITvWF9WaGozM="; }; + strictDeps = true; + nativeBuildInputs = [ cmake + perl + llvm.rocm-toolchain ]; buildInputs = [ - libxml2 - rocm-merged-llvm + llvm.llvm + llvm.clang-unwrapped + perl zlib zstd - perl ]; + env.CXXFLAGS = "-I${lib.getInclude llvm.llvm}/include -I${lib.getInclude llvm.clang-unwrapped}/include"; + postPatch = '' substituteInPlace CMakeLists.txt \ - --replace "\''${LLVM_TOOLS_BINARY_DIR}/clang" "${clang}/bin/clang" + --replace-fail "\''${LLVM_TOOLS_BINARY_DIR}/clang" "${llvm.rocm-toolchain}/bin/clang" chmod +x bin/* ''; From 71f53a3c6a2b4eedf4f0a7545e43e6e447e04b61 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Wed, 24 Sep 2025 07:42:09 -0700 Subject: [PATCH 14/27] rocmPackages.rocm-device-libs: don't use rocm-merged-llvm, cleanup correctly setting sourceRoot instead of cding in postPatch --- pkgs/development/rocm-modules/6/default.nix | 5 +-- .../6/rocm-device-libs/cmake.patch | 4 +-- .../6/rocm-device-libs/default.nix | 34 +++++++++++-------- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/pkgs/development/rocm-modules/6/default.nix b/pkgs/development/rocm-modules/6/default.nix index 7a7450f9f633..cb37089dd73c 100644 --- a/pkgs/development/rocm-modules/6/default.nix +++ b/pkgs/development/rocm-modules/6/default.nix @@ -47,10 +47,7 @@ let rocm-cmake = self.callPackage ./rocm-cmake { stdenv = origStdenv; }; - rocm-device-libs = self.callPackage ./rocm-device-libs { - stdenv = origStdenv; - inherit (llvm) rocm-merged-llvm; - }; + rocm-device-libs = self.callPackage ./rocm-device-libs { }; rocm-runtime = self.callPackage ./rocm-runtime { stdenv = origStdenv; diff --git a/pkgs/development/rocm-modules/6/rocm-device-libs/cmake.patch b/pkgs/development/rocm-modules/6/rocm-device-libs/cmake.patch index de46bdb87258..500ff37a9905 100644 --- a/pkgs/development/rocm-modules/6/rocm-device-libs/cmake.patch +++ b/pkgs/development/rocm-modules/6/rocm-device-libs/cmake.patch @@ -1,7 +1,7 @@ diff --git a/cmake/Packages.cmake b/cmake/Packages.cmake index 07c60eb..c736b3e 100644 ---- a/amd/device-libs/cmake/Packages.cmake -+++ b/amd/device-libs/cmake/Packages.cmake +--- a/cmake/Packages.cmake ++++ b/cmake/Packages.cmake @@ -12,24 +12,29 @@ set_target_properties(${target} PROPERTIES IMPORTED_LOCATION \"${target_path}\")") endforeach() diff --git a/pkgs/development/rocm-modules/6/rocm-device-libs/default.nix b/pkgs/development/rocm-modules/6/rocm-device-libs/default.nix index 9bdc8d186533..910a95ac9ff9 100644 --- a/pkgs/development/rocm-modules/6/rocm-device-libs/default.nix +++ b/pkgs/development/rocm-modules/6/rocm-device-libs/default.nix @@ -4,11 +4,9 @@ fetchpatch, cmake, ninja, - libxml2, zlib, zstd, - ncurses, - rocm-merged-llvm, + llvm, python3, }: @@ -21,22 +19,29 @@ let else throw "Unsupported ROCm LLVM platform"; in -stdenv.mkDerivation { +stdenv.mkDerivation (finalAttrs: { pname = "rocm-device-libs"; # In-tree with ROCm LLVM - inherit (rocm-merged-llvm) version; - src = rocm-merged-llvm.llvm-src; + inherit (llvm.llvm) version; + src = llvm.llvm.monorepoSrc; + sourceRoot = "${finalAttrs.src.name}/amd/device-libs"; + strictDeps = true; + __structuredAttrs = true; - postPatch = '' - cd amd/device-libs - ''; + postPatch = + # Use our sysrooted toolchain instead of direct clang target + '' + substituteInPlace cmake/OCL.cmake \ + --replace-fail '$' "${llvm.rocm-toolchain}/bin/clang" + ''; patches = [ ./cmake.patch (fetchpatch { name = "cmake-4-compat-dont-set-cmp0053.patch"; url = "https://github.com/ROCm/llvm-project/commit/a18cc4c7cb51f94182b6018c7c73acde1b8ebddb.patch"; - hash = "sha256-LNT7srxd4gXDAJ6lSsJXKnRQKSepkAbHeRNH+eZYIFk="; + hash = "sha256-kp/Ld0IhjWgRbRR9R/CKdkI9ELvPkQSAMqPsAPFxzhM="; + relative = "amd/device-libs"; }) ]; @@ -44,18 +49,17 @@ stdenv.mkDerivation { cmake ninja python3 + llvm.rocm-toolchain ]; buildInputs = [ - libxml2 + llvm.llvm + llvm.clang-unwrapped zlib zstd - ncurses - rocm-merged-llvm ]; cmakeFlags = [ - "-DCMAKE_RELEASE_TYPE=Release" "-DLLVM_TARGETS_TO_BUILD=AMDGPU;${llvmNativeTarget}" ]; @@ -67,4 +71,4 @@ stdenv.mkDerivation { teams = [ teams.rocm ]; platforms = platforms.linux; }; -} +}) From d0194e29e9d73c796b8cb315b1cc4470e8662234 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Wed, 24 Sep 2025 07:45:35 -0700 Subject: [PATCH 15/27] rocmPackages.miopen: don't depend on rocm-merged-llvm --- pkgs/development/rocm-modules/6/miopen/default.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkgs/development/rocm-modules/6/miopen/default.nix b/pkgs/development/rocm-modules/6/miopen/default.nix index 47d79a9bf19c..01770ce8c16b 100644 --- a/pkgs/development/rocm-modules/6/miopen/default.nix +++ b/pkgs/development/rocm-modules/6/miopen/default.nix @@ -13,7 +13,6 @@ rocmlir, rocrand, rocm-runtime, - rocm-merged-llvm, hipblas-common, hipblas, hipblaslt, @@ -172,7 +171,6 @@ stdenv.mkDerivation (finalAttrs: { enableParallelBuilding = true; env.ROCM_PATH = clr; env.LD_LIBRARY_PATH = lib.makeLibraryPath [ rocm-runtime ]; - env.HIP_CLANG_PATH = "${rocm-merged-llvm}/bin"; nativeBuildInputs = [ pkg-config From f08fc581c354ad4ced5535c19ff5d425a7567998 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Wed, 24 Sep 2025 07:58:06 -0700 Subject: [PATCH 16/27] rocmPackages.clr: don't use rocm-merged-llvm --- .../rocm-modules/6/clr/default.nix | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/pkgs/development/rocm-modules/6/clr/default.nix b/pkgs/development/rocm-modules/6/clr/default.nix index 90af58ad1203..d5f3e42f1193 100644 --- a/pkgs/development/rocm-modules/6/clr/default.nix +++ b/pkgs/development/rocm-modules/6/clr/default.nix @@ -18,6 +18,7 @@ roctracer, rocminfo, rocm-smi, + symlinkJoin, numactl, libffi, zstd, @@ -26,7 +27,7 @@ libxml2, libX11, python3Packages, - rocm-merged-llvm, + llvm, khronos-ocl-icd-loader, gcc-unwrapped, writeShellScriptBin, @@ -35,7 +36,20 @@ let inherit (rocm-core) ROCM_LIBPATCH_VERSION; - hipClang = rocm-merged-llvm; + # HIP_CLANG_PATH or ROCM_PATH/llvm + # Note: relying on ROCM_PATH/llvm is bad for cross + hipClang = symlinkJoin { + name = "hipClang"; + paths = [ + # FIXME: if we don't put this first aotriton build fails with ld.lld: -flavor gnu + # Probably wrapper jank + llvm.bintools.bintools + llvm.rocm-toolchain + ]; + postBuild = '' + rm -rf $out/{include,lib,share,etc,nix-support,usr} + ''; + }; hipClangPath = "${hipClang}/bin"; wrapperArgs = [ "--prefix PATH : $out/bin" @@ -84,6 +98,7 @@ stdenv.mkDerivation (finalAttrs: { ]; buildInputs = [ + llvm.llvm numactl libGL libxml2 @@ -101,6 +116,7 @@ stdenv.mkDerivation (finalAttrs: { rocm-comgr rocm-runtime rocminfo + hipClangPath ]; cmakeBuildType = "RelWithDebInfo"; @@ -163,7 +179,8 @@ stdenv.mkDerivation (finalAttrs: { --replace-fail "install(PROGRAMS \''${HIPCC_BIN_DIR}/hipconfig.bat DESTINATION bin)" "" substituteInPlace hipamd/src/hip_embed_pch.sh \ - --replace-fail "\''$LLVM_DIR/bin/clang" "${hipClangPath}/clang" + --replace-fail "\''$LLVM_DIR/bin/clang" "${hipClangPath}/clang" \ + --replace-fail "\''$LLVM_DIR/bin/llvm-mc" "${lib.getExe' llvm.bintools.bintools "llvm-mc"}" substituteInPlace opencl/khronos/icd/loader/icd_platform.h \ --replace-fail '#define ICD_VENDOR_PATH "/etc/OpenCL/vendors/";' \ @@ -207,7 +224,6 @@ stdenv.mkDerivation (finalAttrs: { ln -s ${rocm-core}/.info/ $out/.info ln -s ${hipClang} $out/llvm - ln -s ${hipClang}/bin/{ld.lld,lld,clang-offload-bundler,llvm-objcopy,clang,clang++} $out/bin/ ''; disallowedRequisites = [ From 899fe31f443f57759f0b387ac22247f535f04593 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Wed, 24 Sep 2025 08:12:16 -0700 Subject: [PATCH 17/27] rocmPackages.rocm-comgr: don't use rocm-merged-llvm --- pkgs/development/rocm-modules/6/default.nix | 5 +---- .../rocm-modules/6/rocm-comgr/default.nix | 21 +++++++++++-------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/pkgs/development/rocm-modules/6/default.nix b/pkgs/development/rocm-modules/6/default.nix index cb37089dd73c..37524f7ba832 100644 --- a/pkgs/development/rocm-modules/6/default.nix +++ b/pkgs/development/rocm-modules/6/default.nix @@ -54,10 +54,7 @@ let inherit (llvm) rocm-merged-llvm; }; - rocm-comgr = self.callPackage ./rocm-comgr { - stdenv = origStdenv; - inherit (llvm) rocm-merged-llvm; - }; + rocm-comgr = self.callPackage ./rocm-comgr { }; rocminfo = self.callPackage ./rocminfo { stdenv = origStdenv; }; diff --git a/pkgs/development/rocm-modules/6/rocm-comgr/default.nix b/pkgs/development/rocm-modules/6/rocm-comgr/default.nix index de0b2434cfac..69b4d953c35d 100644 --- a/pkgs/development/rocm-modules/6/rocm-comgr/default.nix +++ b/pkgs/development/rocm-modules/6/rocm-comgr/default.nix @@ -3,12 +3,11 @@ stdenv, fetchpatch, cmake, + llvm, python3, - rocm-merged-llvm, rocm-device-libs, zlib, zstd, - libxml2, }: let @@ -23,10 +22,10 @@ in stdenv.mkDerivation (finalAttrs: { pname = "rocm-comgr"; # In-tree with ROCm LLVM - inherit (rocm-merged-llvm) version; - src = rocm-merged-llvm.llvm-src; - + inherit (llvm.llvm) version; + src = llvm.llvm.monorepoSrc; sourceRoot = "${finalAttrs.src.name}/amd/comgr"; + strictDeps = true; patches = [ # [Comgr] Extend ISA compatibility @@ -43,22 +42,26 @@ stdenv.mkDerivation (finalAttrs: { }) ]; + postPatch = '' + substituteInPlace cmake/opencl_pch.cmake \ + --replace-fail "\''${CLANG_CMAKE_DIR}/../../../" "${llvm.clang-unwrapped.lib}" + ''; + nativeBuildInputs = [ cmake python3 ]; buildInputs = [ + llvm.llvm + llvm.clang-unwrapped + llvm.lld rocm-device-libs - libxml2 zlib zstd - rocm-merged-llvm ]; cmakeFlags = [ - "-DCMAKE_VERBOSE_MAKEFILE=ON" - "-DCMAKE_BUILD_TYPE=Release" "-DLLVM_TARGETS_TO_BUILD=AMDGPU;${llvmNativeTarget}" ]; From ed53bb6c6775047467fcfbd1675986c100807cbd Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Wed, 24 Sep 2025 08:13:10 -0700 Subject: [PATCH 18/27] rocmPackages.hipblaslt,rocblas: remove unused writableTmpDirAsHomeHook --- pkgs/development/rocm-modules/6/hipblaslt/default.nix | 1 - pkgs/development/rocm-modules/6/rocblas/default.nix | 1 - 2 files changed, 2 deletions(-) diff --git a/pkgs/development/rocm-modules/6/hipblaslt/default.nix b/pkgs/development/rocm-modules/6/hipblaslt/default.nix index 47bfd00909fc..58d8a549d747 100644 --- a/pkgs/development/rocm-modules/6/hipblaslt/default.nix +++ b/pkgs/development/rocm-modules/6/hipblaslt/default.nix @@ -2,7 +2,6 @@ lib, stdenv, fetchFromGitHub, - writableTmpDirAsHomeHook, cmake, rocm-cmake, rocm-smi, diff --git a/pkgs/development/rocm-modules/6/rocblas/default.nix b/pkgs/development/rocm-modules/6/rocblas/default.nix index 0cfcce2370d6..33d707747056 100644 --- a/pkgs/development/rocm-modules/6/rocblas/default.nix +++ b/pkgs/development/rocm-modules/6/rocblas/default.nix @@ -4,7 +4,6 @@ fetchFromGitHub, fetchpatch, rocmUpdateScript, - writableTmpDirAsHomeHook, cmake, rocm-cmake, clr, From 92cd9fcf460b28715785dffae71b22e80129e885 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Wed, 24 Sep 2025 07:07:09 -0700 Subject: [PATCH 19/27] rocmPackages.composable_kernel: don't depend on rocm-merged-llvm --- pkgs/development/rocm-modules/6/composable_kernel/base.nix | 3 +-- pkgs/development/rocm-modules/6/default.nix | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/pkgs/development/rocm-modules/6/composable_kernel/base.nix b/pkgs/development/rocm-modules/6/composable_kernel/base.nix index a4f59c2e1d5f..ba5131c67408 100644 --- a/pkgs/development/rocm-modules/6/composable_kernel/base.nix +++ b/pkgs/development/rocm-modules/6/composable_kernel/base.nix @@ -5,7 +5,7 @@ rocmUpdateScript, cmake, rocm-cmake, - rocm-merged-llvm, + llvm, clr, rocminfo, python3, @@ -85,7 +85,6 @@ stdenv.mkDerivation (finalAttrs: { strictDeps = true; enableParallelBuilding = true; env.ROCM_PATH = clr; - env.HIP_CLANG_PATH = "${rocm-merged-llvm}/bin"; cmakeFlags = [ "-DCMAKE_MODULE_PATH=${clr}/hip/cmake" diff --git a/pkgs/development/rocm-modules/6/default.nix b/pkgs/development/rocm-modules/6/default.nix index 37524f7ba832..a1fbf9b42bf2 100644 --- a/pkgs/development/rocm-modules/6/default.nix +++ b/pkgs/development/rocm-modules/6/default.nix @@ -166,8 +166,7 @@ let composable_kernel = self.callPackage ./composable_kernel { }; ck4inductor = pyPackages.callPackage ./composable_kernel/ck4inductor.nix { - inherit (self) composable_kernel; - inherit (llvm) rocmcxx; + inherit (self) composable_kernel rocm-toolchain; }; half = self.callPackage ./half { }; From 4e0bc1c8dcd3570b3703b1c456647747307e3c8a Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Thu, 25 Sep 2025 18:09:03 -0700 Subject: [PATCH 20/27] rocmPackages.rocm-runtime: prefer sysrooted clang over clang target --- pkgs/development/rocm-modules/6/rocm-runtime/default.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkgs/development/rocm-modules/6/rocm-runtime/default.nix b/pkgs/development/rocm-modules/6/rocm-runtime/default.nix index 2bc797759af3..292ee9a07241 100644 --- a/pkgs/development/rocm-modules/6/rocm-runtime/default.nix +++ b/pkgs/development/rocm-modules/6/rocm-runtime/default.nix @@ -99,6 +99,9 @@ stdenv.mkDerivation (finalAttrs: { substituteInPlace CMakeLists.txt \ --replace 'hsa/include/hsa' 'include/hsa' + substituteInPlace runtime/hsa-runtime/image/blit_src/CMakeLists.txt \ + --replace-fail 'COMMAND clang' "COMMAND ${llvm.rocm-toolchain}/bin/clang" + export HIP_DEVICE_LIB_PATH="${rocm-device-libs}/amdgcn/bitcode" ''; From 1d070587958e71a55906f94ccc3b6a5e0ed2e0fa Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Wed, 24 Sep 2025 06:55:38 -0700 Subject: [PATCH 21/27] rocmPackages.rocm-runtime: remove unneeded dependencies --- pkgs/development/rocm-modules/6/default.nix | 1 - .../rocm-modules/6/rocm-runtime/default.nix | 16 ++++++---------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/pkgs/development/rocm-modules/6/default.nix b/pkgs/development/rocm-modules/6/default.nix index a1fbf9b42bf2..939c236c56dc 100644 --- a/pkgs/development/rocm-modules/6/default.nix +++ b/pkgs/development/rocm-modules/6/default.nix @@ -51,7 +51,6 @@ let rocm-runtime = self.callPackage ./rocm-runtime { stdenv = origStdenv; - inherit (llvm) rocm-merged-llvm; }; rocm-comgr = self.callPackage ./rocm-comgr { }; diff --git a/pkgs/development/rocm-modules/6/rocm-runtime/default.nix b/pkgs/development/rocm-modules/6/rocm-runtime/default.nix index 292ee9a07241..56d4fb253490 100644 --- a/pkgs/development/rocm-modules/6/rocm-runtime/default.nix +++ b/pkgs/development/rocm-modules/6/rocm-runtime/default.nix @@ -6,15 +6,12 @@ rocmUpdateScript, pkg-config, cmake, - ninja, xxd, rocm-device-libs, elfutils, libdrm, numactl, - valgrind, - libxml2, - rocm-merged-llvm, + llvm, }: stdenv.mkDerivation (finalAttrs: { @@ -31,22 +28,21 @@ stdenv.mkDerivation (finalAttrs: { cmakeBuildType = "RelWithDebInfo"; separateDebugInfo = true; __structuredAttrs = true; + strictDeps = true; nativeBuildInputs = [ pkg-config cmake - ninja - xxd - rocm-merged-llvm + xxd # used by create_hsaco_ascii_file.sh + llvm.rocm-toolchain ]; buildInputs = [ + llvm.clang-unwrapped + llvm.llvm elfutils libdrm numactl - # without valgrind, additional work for "kCodeCopyAligned11" is done in the installPhase - valgrind - libxml2 ]; cmakeFlags = [ From 00ec55834ae92b81a377d4a7330ab6a5cd5fa1a9 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Wed, 24 Sep 2025 08:14:36 -0700 Subject: [PATCH 22/27] rocmPackages.rocm-merged-llvm: obliterate --- pkgs/development/rocm-modules/6/default.nix | 2 +- .../rocm-modules/6/llvm/default.nix | 38 ------------------- 2 files changed, 1 insertion(+), 39 deletions(-) diff --git a/pkgs/development/rocm-modules/6/default.nix b/pkgs/development/rocm-modules/6/default.nix index 939c236c56dc..fc71bed2bf39 100644 --- a/pkgs/development/rocm-modules/6/default.nix +++ b/pkgs/development/rocm-modules/6/default.nix @@ -41,7 +41,7 @@ let inherit (self) rocm-device-libs; } ); - inherit (self.llvm) rocm-merged-llvm clang openmp; + inherit (self.llvm) rocm-toolchain clang openmp; rocm-core = self.callPackage ./rocm-core { stdenv = origStdenv; }; diff --git a/pkgs/development/rocm-modules/6/llvm/default.nix b/pkgs/development/rocm-modules/6/llvm/default.nix index 8b54aeade9a8..e35b4f353270 100644 --- a/pkgs/development/rocm-modules/6/llvm/default.nix +++ b/pkgs/development/rocm-modules/6/llvm/default.nix @@ -462,44 +462,6 @@ rec { clang = rocm-toolchain; - # Emulate a monolithic ROCm LLVM build to support building ROCm's in-tree LLVM projects - # TODO(@LunNova): destroy this - rocm-merged-llvm = symlinkJoin { - name = "rocm-llvm-merge"; - paths = [ - llvm - llvm.dev - lld - lld.lib - lld.dev - compiler-rt - compiler-rt.dev - rocmcxx - ] - ++ lib.optionals withLibcxx [ - libcxx - libcxx.out - libcxx.dev - ]; - postBuild = builtins.unsafeDiscardStringContext '' - found_files=$(find $out -name '*.cmake') - if [ -z "$found_files" ]; then - >&2 echo "Error: No CMake files found in $out" - exit 1 - fi - - for target in ${clang-unwrapped.out} ${clang-unwrapped.lib} ${clang-unwrapped.dev}; do - if grep "$target" $found_files; then - >&2 echo "Unexpected ref to $target (clang-unwrapped) found" - # exit 1 - # # FIXME: enable this to reduce closure size - fi - done - ''; - inherit version; - llvm-src = llvmSrc; - }; - rocmClangStdenv = overrideCC ( if withLibcxx then llvmPackagesRocm.libcxxStdenv else llvmPackagesRocm.stdenv ) clang; From 209e382798825de49a5d067c078b5b6c1979e5a6 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Wed, 24 Sep 2025 09:03:08 -0700 Subject: [PATCH 23/27] rocmPackages.hipblaslt: provide llvm for find_package(LLVM) --- pkgs/development/rocm-modules/6/hipblaslt/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/development/rocm-modules/6/hipblaslt/default.nix b/pkgs/development/rocm-modules/6/hipblaslt/default.nix index 58d8a549d747..8b777daee6f3 100644 --- a/pkgs/development/rocm-modules/6/hipblaslt/default.nix +++ b/pkgs/development/rocm-modules/6/hipblaslt/default.nix @@ -10,6 +10,7 @@ gfortran, gtest, boost, + llvm, msgpack-cxx, amd-blis, libxml2, @@ -135,6 +136,7 @@ stdenv.mkDerivation (finalAttrs: { ]; buildInputs = [ + llvm.llvm clr rocm-cmake hipblas-common From a1fb89f126606aacaa8e84c563249b713c146307 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Wed, 24 Sep 2025 10:47:16 -0700 Subject: [PATCH 24/27] rocmPackages.rocprofiler: add llvm build input will become necessary when we drop rocm-merged-llvm in clr --- pkgs/development/rocm-modules/6/rocprofiler/default.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkgs/development/rocm-modules/6/rocprofiler/default.nix b/pkgs/development/rocm-modules/6/rocprofiler/default.nix index 9564dbd3675f..c9a181ce01b4 100644 --- a/pkgs/development/rocm-modules/6/rocprofiler/default.nix +++ b/pkgs/development/rocm-modules/6/rocprofiler/default.nix @@ -16,6 +16,7 @@ numactl, libpciaccess, libxml2, + llvm, elfutils, mpi, gtest, @@ -65,6 +66,8 @@ stdenv.mkDerivation (finalAttrs: { ]; buildInputs = [ + llvm.clang-unwrapped + llvm.llvm numactl libpciaccess libxml2 From bd0292cf6bbbc900f641d3efd363e17f323fa556 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Wed, 24 Sep 2025 18:52:37 -0700 Subject: [PATCH 25/27] magma: don't assume clr has a compiler linked --- pkgs/by-name/ma/magma/package.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/by-name/ma/magma/package.nix b/pkgs/by-name/ma/magma/package.nix index 29a0104c66e1..4eb6bfa4bcdf 100644 --- a/pkgs/by-name/ma/magma/package.nix +++ b/pkgs/by-name/ma/magma/package.nix @@ -203,8 +203,8 @@ stdenv.mkDerivation (finalAttrs: { # Can't easily apply the PR as a patch because we rely on the tarball with pregenerated # hipified files ∴ fetchpatch of the PR will apply cleanly but fail to build (strings.cmakeFeature "ROCM_CORE" "${rocmPackages.clr}") - (strings.cmakeFeature "CMAKE_C_COMPILER" "${rocmPackages.clr}/bin/clang") - (strings.cmakeFeature "CMAKE_CXX_COMPILER" "${rocmPackages.clr}/bin/clang++") + (strings.cmakeFeature "CMAKE_C_COMPILER" "${rocmPackages.clang}/bin/clang") + (strings.cmakeFeature "CMAKE_CXX_COMPILER" "${rocmPackages.clang}/bin/clang++") ]; # Magma doesn't have a test suite we can easily run, just loose executables, all of which require a GPU. From 6fb5f7ac2e1dd573d0a693d5c844b71591b6ffe3 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Thu, 25 Sep 2025 18:05:50 -0700 Subject: [PATCH 26/27] rocmPackages.llvm: reduce closure size by moving clang static libs to dev and then dealing with the consequences --- pkgs/development/rocm-modules/6/default.nix | 10 + .../rocm-modules/6/llvm/default.nix | 180 ++++++++++-------- 2 files changed, 113 insertions(+), 77 deletions(-) diff --git a/pkgs/development/rocm-modules/6/default.nix b/pkgs/development/rocm-modules/6/default.nix index fc71bed2bf39..f43d0852a7ad 100644 --- a/pkgs/development/rocm-modules/6/default.nix +++ b/pkgs/development/rocm-modules/6/default.nix @@ -417,6 +417,16 @@ let }; } // lib.optionalAttrs config.allowAliases { + rocm-merged-llvm = throw '' + 'rocm-merged-llvm' has been removed. + For 'libllvm' or 'libclang' use 'rocmPackages.llvm.libllvm/clang'. + For a ROCm compiler toolchain use 'rocmPackages.rocm-toolchain'. + If a package uses '$' in CMake from 'libclang' + it may be necessary to convince it to use 'rocm-toolchain' instead. + 'rocm-merged-llvm' avoided this at the cost of significantly bloating closure + size. + ''; # Added 2025-09-30 + hsa-amd-aqlprofile-bin = lib.warn '' 'hsa-amd-aqlprofile-bin' has been replaced by 'aqlprofile'. '' self.aqlprofile; # Added 2025-08-27 diff --git a/pkgs/development/rocm-modules/6/llvm/default.nix b/pkgs/development/rocm-modules/6/llvm/default.nix index e35b4f353270..c4a7181c0e9a 100644 --- a/pkgs/development/rocm-modules/6/llvm/default.nix +++ b/pkgs/development/rocm-modules/6/llvm/default.nix @@ -4,6 +4,7 @@ # LLVM version closest to ROCm fork to override llvmPackages_19, overrideCC, + lndir, rocm-device-libs, fetchFromGitHub, runCommand, @@ -112,14 +113,6 @@ let ln -s $out $out/x86_64-unknown-linux-gnu ''; }; - usefulOutputs = - drv: - builtins.filter (x: x != null) [ - drv - (drv.lib or null) - (drv.dev or null) - ]; - listUsefulOutputs = builtins.concatMap usefulOutputs; llvmSrc = fetchFromGitHub { owner = "ROCm"; repo = "llvm-project"; @@ -141,8 +134,21 @@ let monorepoSrc = llvmSrc; doCheck = false; }); + refsToRemove = builtins.concatStringsSep " -t " [ + stdenvToBuildRocmLlvm + stdenvToBuildRocmLlvm.cc + stdenvToBuildRocmLlvm.cc.cc + stdenv.cc + stdenv.cc.cc + stdenv.cc.bintools + ]; sysrootCompiler = - cc: name: paths: + { + cc, + name, + paths, + linkPaths, + }: let linked = symlinkJoin { inherit name paths; }; in @@ -152,29 +158,38 @@ let # nix why-depends --precise .#rocmPackages.llvm.rocm-toolchain.linked /store/path/its/not/allowed disallowedRequisites = disallowedRefsForToolchain; passthru.linked = linked; + linkPaths = linkPaths; + passAsFile = [ "linkPaths" ]; + # TODO(@LunNova): Try to use --sysroot with clang in its original location instead of + # relying on copying the binary? + # $clang/bin/clang++ --sysroot=$rocm-toolchain is not equivalent + # to a clang copied to $rocm-toolchain/bin here, have not yet figured out why } '' - set -x mkdir -p $out/ cp --reflink=auto -rL ${linked}/* $out/ chmod -R +rw $out mkdir -p $out/usr ln -s $out/ $out/usr/local - mkdir -p $out/nix-support/ # we don't need mixed 32 bit, the presence of lib64 is used by LLVM to decide it's a multilib sysroot rm -rf $out/lib64 - echo 'export CC=clang' >> $out/nix-support/setup-hook - echo 'export CXX=clang++' >> $out/nix-support/setup-hook + rm -rf $out/lib/cmake $out/lib/lib*.a mkdir -p $out/lib/clang/${llvmMajorVersion}/lib/linux/ ln -s $out/lib/linux/libclang_rt.* $out/lib/clang/${llvmMajorVersion}/lib/linux/ find $out -type f -exec sed -i "s|${cc.out}|$out|g" {} + find $out -type f -exec sed -i "s|${cc.dev}|$out|g" {} + - # our /include now has more than clang expects, so this specific dir still needs to point to cc.dev - # FIXME: could copy into a different subdir? - sed -i 's|set(CLANG_INCLUDE_DIRS.*$|set(CLANG_INCLUDE_DIRS "${cc.dev}/include")|g' $out/lib/cmake/clang/ClangConfig.cmake - ${lib.getExe rdfind} -makesymlinks true $out/ # create links *within* the sysroot to save space + ${lib.getExe rdfind} -makesymlinks true ${ + builtins.concatStringsSep " " (map (x: "${x}/lib") paths) + } $out/ # create links *within* the sysroot to save space + + for i in $(cat $linkPathsPath); do + ${lib.getExe lndir} -silent $i $out + done + + echo 'export CC=clang' >> $out/nix-support/setup-hook + echo 'export CXX=clang++' >> $out/nix-support/setup-hook ''; # Removes patches which either aren't desired, or don't apply against ROCm LLVM removeInapplicablePatches = @@ -277,6 +292,11 @@ rec { zstd zlib ]; + preFixup = '' + moveToOutput "lib/lib*.a" "$dev" + moveToOutput "lib/cmake" "$dev" + sed -Ei "s|$lib/lib/(lib[^/]*)\.a|$dev/lib/\1.a|g" $dev/lib/cmake/llvm/*.cmake + ''; env = (old.env or { }) // { NIX_CFLAGS_COMPILE = "${(old.env or { }).NIX_CFLAGS_COMPILE or ""} ${llvmExtraCflags}"; }; @@ -285,10 +305,7 @@ rec { disallowedReferences = (old.disallowedReferences or [ ]) ++ disallowedRefsForToolchain; postFixup = '' ${old.postFixup or ""} - remove-references-to -t "${stdenv.cc}" "$lib/lib/libLLVMSupport.a" - find $lib -type f -exec remove-references-to -t ${stdenv.cc.cc} {} + - find $lib -type f -exec remove-references-to -t ${stdenvToBuildRocmLlvm.cc} {} + - find $lib -type f -exec remove-references-to -t ${stdenv.cc.bintools} {} + + find $lib -type f -exec remove-references-to -t ${refsToRemove} {} + ''; meta = old.meta // llvmMeta; }); @@ -314,16 +331,15 @@ rec { disallowedReferences = (old.disallowedReferences or [ ]) ++ disallowedRefsForToolchain; postFixup = '' ${old.postFixup or ""} - find $lib -type f -exec remove-references-to -t ${stdenv.cc.cc} {} + - find $lib -type f -exec remove-references-to -t ${stdenv.cc.bintools} {} + + find $lib -type f -exec remove-references-to -t ${refsToRemove} {} + ''; meta = old.meta // llvmMeta; }); - clang-unwrapped = - ( - (llvmPackagesRocm.clang-unwrapped.override { - libllvm = llvm; - }).overrideAttrs + clang-unwrapped = ( + (llvmPackagesRocm.clang-unwrapped.override { + libllvm = llvm; + enableClangToolsExtra = false; + }).overrideAttrs ( old: let @@ -389,43 +405,52 @@ rec { "-DUSE_DEPRECATED_GCC_INSTALL_PREFIX=ON" "-DGCC_INSTALL_PREFIX=${gcc-prefix}" ]; - postFixup = (old.postFixup or "") + '' - find $lib -type f -exec remove-references-to -t ${stdenvToBuildRocmLlvm} {} + - find $lib -type f -exec remove-references-to -t ${stdenvToBuildRocmLlvm.cc} {} + - find $lib -type f -exec remove-references-to -t ${stdenvToBuildRocmLlvm.cc.cc} {} + - find $lib -type f -exec remove-references-to -t ${stdenv.cc} {} + - find $lib -type f -exec remove-references-to -t ${stdenv.cc.cc} {} + - find $lib -type f -exec remove-references-to -t ${stdenv.cc.bintools} {} + + preFixup = '' + ${toString old.preFixup or ""} + moveToOutput "lib/lib*.a" "$dev" + moveToOutput "lib/cmake" "$dev" + mkdir -p $dev/lib/clang/ + ln -s $lib/lib/clang/${llvmMajorVersion} $dev/lib/clang/ + sed -Ei "s|$lib/lib/(lib[^/]*)\.a|$dev/lib/\1.a|g" $dev/lib/cmake/clang/*.cmake + ''; + postFixup = '' + ${toString old.postFixup or ""} + find $lib -type f -exec remove-references-to -t ${refsToRemove} {} + + find $dev -type f -exec remove-references-to -t ${refsToRemove} {} + ''; meta = old.meta // llvmMeta; } ) - ) - // { - libllvm = llvm; - }; + ); # A clang that understands standard include searching in a GNU sysroot and will put GPU libs in include path # in the right order # and expects its libc to be in the sysroot rocm-toolchain = - (sysrootCompiler clang-unwrapped "rocmcxx" ( - listUsefulOutputs ( - [ - clang-unwrapped - bintools - compiler-rt - openmp - ] - ++ (lib.optionals withLibcxx [ - libcxx - ]) - ++ (lib.optionals (!withLibcxx) [ - gcc-include - glibc - glibc.dev - ]) - ) - )) + (sysrootCompiler { + cc = clang-unwrapped; + name = "rocm-toolchain"; + paths = [ + clang-unwrapped.out + clang-unwrapped.lib + bintools.out + compiler-rt.out + openmp.out + openmp.dev + ] + ++ lib.optionals withLibcxx [ + libcxx + ] + ++ lib.optionals (!withLibcxx) [ + glibc + glibc.dev + ]; + linkPaths = [ + bintools.bintools.out + ] + ++ lib.optionals (!withLibcxx) [ + gcc-include.out + ]; + }) // { version = llvmMajorVersion; cc = rocm-toolchain; @@ -433,26 +458,27 @@ rec { isClang = true; isGNU = false; }; - clang-tools = llvmPackagesRocm.clang-tools.override { - inherit clang-unwrapped clang; - }; - compiler-rt-libc = llvmPackagesRocm.compiler-rt-libc.overrideAttrs (old: { - patches = old.patches ++ [ - (fetchpatch { - name = "Fix-missing-main-function-in-float16-bfloat16-support-checks.patch"; - url = "https://github.com/ROCm/llvm-project/commit/68d8b3846ab1e6550910f2a9a685690eee558af2.patch"; - hash = "sha256-Db+L1HFMWVj4CrofsGbn5lnMoCzEcU+7q12KKFb17/g="; - relative = "compiler-rt"; - }) - (fetchpatch { - # Fixes fortify hardening compile error related to openat usage - hash = "sha256-pgpN1q1vIQrPXHPxNSZ6zfgV2EflHO5Amzl+2BDjXbs="; - url = "https://github.com/llvm/llvm-project/commit/155b7a12820ec45095988b6aa6e057afaf2bc892.patch"; - relative = "compiler-rt"; - }) - ]; - meta = old.meta // llvmMeta; - }); + compiler-rt-libc = + (llvmPackagesRocm.compiler-rt-libc.override { + libllvm = llvm; + }).overrideAttrs + (old: { + patches = old.patches ++ [ + (fetchpatch { + name = "Fix-missing-main-function-in-float16-bfloat16-support-checks.patch"; + url = "https://github.com/ROCm/llvm-project/commit/68d8b3846ab1e6550910f2a9a685690eee558af2.patch"; + hash = "sha256-Db+L1HFMWVj4CrofsGbn5lnMoCzEcU+7q12KKFb17/g="; + relative = "compiler-rt"; + }) + (fetchpatch { + # Fixes fortify hardening compile error related to openat usage + hash = "sha256-pgpN1q1vIQrPXHPxNSZ6zfgV2EflHO5Amzl+2BDjXbs="; + url = "https://github.com/llvm/llvm-project/commit/155b7a12820ec45095988b6aa6e057afaf2bc892.patch"; + relative = "compiler-rt"; + }) + ]; + meta = old.meta // llvmMeta; + }); compiler-rt = compiler-rt-libc; bintools = wrapBintoolsWith { bintools = llvmPackagesRocm.bintools-unwrapped.override { From c1cfcf382285459f793365a1dc56804e08f6c1a3 Mon Sep 17 00:00:00 2001 From: Luna Nova Date: Tue, 30 Sep 2025 07:13:42 -0700 Subject: [PATCH 27/27] rocmPackages.rocm-path: drop rocm-path shouldn't have been added at top-level. We have a separate non-recursed section containing symlinkJoins for this, and best practice in nixpkgs is to avoid ROCM_PATH when possible and create a minimal one in each package that needs one. --- pkgs/development/rocm-modules/6/default.nix | 8 +++++- .../rocm-modules/6/rocm-path/default.nix | 27 ------------------- 2 files changed, 7 insertions(+), 28 deletions(-) delete mode 100644 pkgs/development/rocm-modules/6/rocm-path/default.nix diff --git a/pkgs/development/rocm-modules/6/default.nix b/pkgs/development/rocm-modules/6/default.nix index f43d0852a7ad..49d44ccb9fdd 100644 --- a/pkgs/development/rocm-modules/6/default.nix +++ b/pkgs/development/rocm-modules/6/default.nix @@ -30,7 +30,6 @@ let buildTests = false; buildBenchmarks = false; - rocmPath = self.callPackage ./rocm-path { }; rocmUpdateScript = self.callPackage ./update.nix { }; ## ROCm ## @@ -417,6 +416,13 @@ let }; } // lib.optionalAttrs config.allowAliases { + rocmPath = throw '' + 'rocm-path' has been removed. If a ROCM_PATH value is required in nixpkgs please + construct one with the minimal set of required deps. + For convenience use outside of nixpkgs consider one of the entries in + 'rocmPackages.meta'. + ''; # Added 2025-09-30 + rocm-merged-llvm = throw '' 'rocm-merged-llvm' has been removed. For 'libllvm' or 'libclang' use 'rocmPackages.llvm.libllvm/clang'. diff --git a/pkgs/development/rocm-modules/6/rocm-path/default.nix b/pkgs/development/rocm-modules/6/rocm-path/default.nix deleted file mode 100644 index 57970ffa4406..000000000000 --- a/pkgs/development/rocm-modules/6/rocm-path/default.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ - symlinkJoin, - linkFarm, - clr, - hipblas, - hipblas-common, - rocblas, - rocsolver, - rocsparse, - rocm-device-libs, - rocm-smi, - llvm, -}: -symlinkJoin { - name = "rocm-path-${clr.version}"; - paths = [ - clr - hipblas-common - hipblas - rocblas - rocsolver - rocsparse - rocm-device-libs - rocm-smi - (linkFarm "rocm-llvm-subdir" { llvm = llvm.clang; }) - ]; -}