diff options
author | msglm <msglm@techchud.xyz> | 2025-06-19 19:25:22 -0500 |
---|---|---|
committer | msglm <msglm@techchud.xyz> | 2025-06-19 19:25:22 -0500 |
commit | d6119d8f49be6149c176f3de34a9e65cd7a20064 (patch) | |
tree | fb397b181178a713009c27dede3783cb7b56b779 /amd/packages/patches/llvm-rocm-6.1.1.patch | |
parent | edb38a355aebe1786447bacdfd5b3550aee5f91e (diff) | |
download | guix-msglm-d6119d8f49be6149c176f3de34a9e65cd7a20064.tar.gz guix-msglm-d6119d8f49be6149c176f3de34a9e65cd7a20064.tar.bz2 guix-msglm-d6119d8f49be6149c176f3de34a9e65cd7a20064.zip |
Diffstat (limited to 'amd/packages/patches/llvm-rocm-6.1.1.patch')
-rw-r--r-- | amd/packages/patches/llvm-rocm-6.1.1.patch | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/amd/packages/patches/llvm-rocm-6.1.1.patch b/amd/packages/patches/llvm-rocm-6.1.1.patch new file mode 100644 index 0000000..3201e4f --- /dev/null +++ b/amd/packages/patches/llvm-rocm-6.1.1.patch @@ -0,0 +1,156 @@ +Set perl script activation and necessary GUIX variables for HIPCC. +Fix libpath to ensure standard path is not modified or overwritten. +NOTE: upstream clang-*-libc-search-path.patch does NOT apply cleanly +for ROCm versions based on LLVM 17. Therefore it is duplicated here. +diff --git a/amd/hipcc/bin/hipcc.pl b/amd/hipcc/bin/hipcc.pl +index 513a4278482c..65ecd6f9c6e1 100755 +--- a/amd/hipcc/bin/hipcc.pl ++++ b/amd/hipcc/bin/hipcc.pl +@@ -129,8 +129,10 @@ $HIP_CLANG_PATH = $hipvars::HIP_CLANG_PATH; + $CUDA_PATH = $hipvars::CUDA_PATH; + $HIP_PATH = $hipvars::HIP_PATH; + $ROCM_PATH = $hipvars::ROCM_PATH; ++$ROCMINFO_PATH = $hipvars::ROCMINFO_PATH; + $HIP_VERSION = $hipvars::HIP_VERSION; +-$HIP_ROCCLR_HOME = $hipvars::HIP_ROCCLR_HOME; ++$HIP_ROCCLR_HOME = $hipvars::HIP_ROCCLR_HOME; ++$DEVICE_LIB_PATH = $hipvars::DEVICE_LIB_PATH; + + sub get_normalized_path { + return $doubleQuote . $_[0] . $doubleQuote; +@@ -484,7 +486,7 @@ if($HIP_PLATFORM eq "amd"){ + $targetsStr = $ENV{HCC_AMDGPU_TARGET}; + } elsif (not $isWindows) { + # Else try using rocm_agent_enumerator +- $ROCM_AGENT_ENUM = "${ROCM_PATH}/bin/rocm_agent_enumerator"; ++ $ROCM_AGENT_ENUM = "${ROCMINFO_PATH}/bin/rocm_agent_enumerator"; + $targetsStr = `${ROCM_AGENT_ENUM} -t GPU`; + $targetsStr =~ s/\n/,/g; + } +@@ -610,6 +612,7 @@ if ($needLDFLAGS and not $compileOnly) { + $CMD .= " $HIPLDFLAGS"; + } + $CMD .= " $toolArgs"; ++$CMD .= " --hip-path=${HIP_PATH}"; + + if ($verbose & 0x1) { + print "hipcc-cmd: ", $CMD, "\n"; +diff --git a/clang/lib/Driver/Distro.cpp b/clang/lib/Driver/Distro.cpp +index e86b589a1cfb..ca702717b482 100644 +--- a/clang/lib/Driver/Distro.cpp ++++ b/clang/lib/Driver/Distro.cpp +@@ -99,6 +99,10 @@ static Distro::DistroType DetectLsbRelease(llvm::vfs::FileSystem &VFS) { + } + + static Distro::DistroType DetectDistro(llvm::vfs::FileSystem &VFS) { ++ // The compiler should always behave the same, even when used via Guix on a ++ // foreign distro. ++ return Distro::UnknownDistro; ++ + Distro::DistroType Version = Distro::UnknownDistro; + + // Newer freedesktop.org's compilant systemd-based systems +diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp +index 8eb0ee0ef3c9..70271113c126 100644 +--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp ++++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp +@@ -271,6 +271,7 @@ RocmInstallationDetector::getInstallationPathCandidates() { + ROCmSearchDirs.emplace_back(D.ResourceDir, + /*StrictChecking=*/true); + ++ #if 0 + ROCmSearchDirs.emplace_back(D.SysRoot + "/opt/rocm", + /*StrictChecking=*/true); + +@@ -315,6 +316,7 @@ RocmInstallationDetector::getInstallationPathCandidates() { + ROCmSearchDirs.emplace_back(D.SysRoot + "/usr", + /*StrictChecking=*/true); + ++ #endif + DoPrintROCmSearchDirs(); + return ROCmSearchDirs; + } +diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +index 2511a4e73afc..351b805681bb 100644 +--- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp ++++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +@@ -244,9 +244,9 @@ const char *amdgpu::dlr::getLinkCommandArgs( + } + + // If device debugging turned on, add specially built bc files +- StringRef libpath = Args.MakeArgString(C.getDriver().Dir + "/../" + LibSuffix); ++ StringRef libpath = Args.MakeArgString(C.getDriver().InstalledDir + "/../" + LibSuffix); + std::string lib_debug_perf_path = FindDebugPerfInLibraryPath(LibSuffix); +- if (!lib_debug_perf_path.empty()) ++ if (!lib_debug_perf_path.empty() && LibSuffix != "lib") + libpath = lib_debug_perf_path; + + llvm::SmallVector<std::string, 12> BCLibs; +diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp +index e4691d006848..1a6b8b4b571c 100644 +--- a/clang/lib/Driver/ToolChains/Cuda.cpp ++++ b/clang/lib/Driver/ToolChains/Cuda.cpp +@@ -129,6 +129,9 @@ CudaInstallationDetector::CudaInstallationDetector( + const Driver &D, const llvm::Triple &HostTriple, + const llvm::opt::ArgList &Args) + : D(D) { ++ // Don't look for CUDA in /usr ++ return; ++ + struct Candidate { + std::string Path; + bool StrictChecking; +diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp +index 957ff0f83271..e1f782d1d1e8 100644 +--- a/clang/lib/Driver/ToolChains/Linux.cpp ++++ b/clang/lib/Driver/ToolChains/Linux.cpp +@@ -220,6 +220,10 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) + + Generic_GCC::PushPPaths(PPaths); + ++ // Comment out the distro-specific tweaks so that they don't bite when ++ // using Guix on a foreign distro ++#if 0 ++ + Distro Distro(D.getVFS(), Triple); + + if (Distro.IsAlpineLinux() || Triple.isAndroid()) { +@@ -280,6 +284,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) + + #ifdef ENABLE_LINKER_BUILD_ID + ExtraOpts.push_back("--build-id"); ++#endif + #endif + + // The selection of paths to try here is designed to match the patterns which +@@ -300,7 +305,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) + addPathIfExists(D, concat(SysRoot, "/usr/libo32"), Paths); + } + Generic_GCC::AddMultilibPaths(D, SysRoot, OSLibDir, MultiarchTriple, Paths); +- ++#if 0 + addPathIfExists(D, concat(SysRoot, "/lib", MultiarchTriple), Paths); + addPathIfExists(D, concat(SysRoot, "/lib/..", OSLibDir), Paths); + +@@ -329,11 +334,21 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) + addPathIfExists(D, concat(SysRoot, "/", OSLibDir, ABIName), Paths); + addPathIfExists(D, concat(SysRoot, "/usr", OSLibDir, ABIName), Paths); + } ++#endif + + Generic_GCC::AddMultiarchPaths(D, SysRoot, OSLibDir, Paths); + ++#if 0 + addPathIfExists(D, concat(SysRoot, "/lib"), Paths); + addPathIfExists(D, concat(SysRoot, "/usr/lib"), Paths); ++#endif ++ ++ // Add libc's lib/ directory to the search path, so that crt1.o, crti.o, ++ // and friends can be found ++ addPathIfExists(D, "@GLIBC_LIBDIR@", Paths); ++ ++ // Add GCC's lib/ directory so libstdc++.so can be found ++ addPathIfExists(D, GCCInstallation.getParentLibPath(), Paths); + } + + ToolChain::RuntimeLibType Linux::GetDefaultRuntimeLibType() const { |