@@ -1185,29 +1185,6 @@ void tools::addLTOOptions(const ToolChain &ToolChain, const ArgList &Args,
11851185 Args.MakeArgString (Twine (PluginOptPrefix) + " -implicit-mapsyms" ));
11861186}
11871187
1188- std::string tools::FindDebugPerfInLibraryPath (const std::string &RLib) {
1189- const char *DirList = ::getenv (" LIBRARY_PATH" );
1190- if (!DirList)
1191- return " " ;
1192- StringRef Dirs (DirList);
1193- if (Dirs.empty ()) // Empty string should not add '.'.
1194- return " " ;
1195-
1196- StringRef::size_type Delim;
1197- while ((Delim = Dirs.find (llvm::sys::EnvPathSeparator)) != StringRef::npos) {
1198- if (Delim != 0 ) { // Leading colon.
1199- if (Dirs.substr (0 , Delim).ends_with (RLib))
1200- return Dirs.substr (0 , Delim).str ();
1201- }
1202- Dirs = Dirs.substr (Delim + 1 );
1203- }
1204- if (!Dirs.empty ()) {
1205- if (Dirs.ends_with (RLib))
1206- return Dirs.str ();
1207- }
1208- return " " ;
1209- }
1210-
12111188void tools::addOpenMPRuntimeSpecificRPath (const ToolChain &TC,
12121189 const ArgList &Args,
12131190 ArgStringList &CmdArgs) {
@@ -1223,9 +1200,17 @@ void tools::addOpenMPRuntimeSpecificRPath(const ToolChain &TC,
12231200 if (TC.getSanitizerArgs (Args).needsAsanRt ())
12241201 LibSuffix.append (" /asan" );
12251202 }
1226- std::string CandidateRPath = FindDebugPerfInLibraryPath (LibSuffix);
1227- if (CandidateRPath.empty ())
1228- CandidateRPath = D.Dir + " /../" + LibSuffix;
1203+
1204+ // Check if the device library can be found in
1205+ // one of the LIBRARY_PATH directories.
1206+ ArgStringList EnvLibraryPaths;
1207+ addDirectoryList (Args, EnvLibraryPaths, " " , " LIBRARY_PATH" );
1208+ for (auto &EnvLibraryPath : EnvLibraryPaths) {
1209+ if (llvm::sys::fs::exists (EnvLibraryPath)) {
1210+ CmdArgs.push_back (" -rpath" );
1211+ CmdArgs.push_back (Args.MakeArgString (EnvLibraryPath));
1212+ }
1213+ }
12291214
12301215 if (Args.hasFlag (options::OPT_fopenmp_implicit_rpath,
12311216 options::OPT_fno_openmp_implicit_rpath, true )) {
@@ -1239,13 +1224,31 @@ void tools::addOpenMPRuntimeSpecificRPath(const ToolChain &TC,
12391224 CmdArgs.push_back (Args.MakeArgString (TC.getCompilerRTPath ()));
12401225 }
12411226
1227+ // In case LibSuffix was not built, try lib
1228+ std::string CandidateRPath_suf = D.Dir + " /../" + LibSuffix;
12421229 CmdArgs.push_back (" -rpath" );
1243- CmdArgs.push_back (Args.MakeArgString (CandidateRPath.c_str ()));
1244- std::string rocmPath = Args.getLastArgValue (clang::driver::options::OPT_rocm_path_EQ).str ();
1245- if (rocmPath.size () != 0 ){
1246- rocmPath = rocmPath + " /lib" ;
1230+ CmdArgs.push_back (Args.MakeArgString (CandidateRPath_suf.c_str ()));
1231+
1232+ // Add lib directory in case LibSuffix does not exist
1233+ std::string CandidateRPath_lib = D.Dir + " /../lib" ;
1234+ if ((!llvm::sys::fs::exists (CandidateRPath_suf)) &&
1235+ (llvm::sys::fs::exists (CandidateRPath_lib))) {
12471236 CmdArgs.push_back (" -rpath" );
1248- CmdArgs.push_back (Args.MakeArgString (rocmPath.c_str ()));
1237+ CmdArgs.push_back (Args.MakeArgString (CandidateRPath_lib.c_str ()));
1238+ }
1239+
1240+ std::string rocmPath =
1241+ Args.getLastArgValue (clang::driver::options::OPT_rocm_path_EQ).str ();
1242+ if (rocmPath.size () != 0 ) {
1243+ std::string rocmPath_lib = rocmPath + " /lib" ;
1244+ std::string rocmPath_suf = rocmPath + " /" + LibSuffix;
1245+ if (llvm::sys::fs::exists (rocmPath_suf)) {
1246+ CmdArgs.push_back (" -rpath" );
1247+ CmdArgs.push_back (Args.MakeArgString (rocmPath_suf.c_str ()));
1248+ } else if (llvm::sys::fs::exists (rocmPath_lib)) {
1249+ CmdArgs.push_back (" -rpath" );
1250+ CmdArgs.push_back (Args.MakeArgString (rocmPath_lib.c_str ()));
1251+ }
12491252 }
12501253 if (llvm::find_if (CmdArgs, [](StringRef str) {
12511254 return !str.compare (" --enable-new-dtags" );
0 commit comments