summaryrefslogtreecommitdiffstats
path: root/amd/packages/patches/llvm-rocm-6.1.1.patch
blob: 3201e4f68afc5442af0f4d37415e4a1b7bd724d3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
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 {