llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-driver Author: Joseph Huber (jhuber6) <details> <summary>Changes</summary> Summary: We always want to use the detected path. The clang driver's detection is far more sophisticated so we should use that whenever possible. Also update the usage so we properly fall back to path instead of incorrectly using the `/bin` if not provided. --- Full diff: https://github.com/llvm/llvm-project/pull/152789.diff 2 Files Affected: - (modified) clang/lib/Driver/ToolChains/Cuda.cpp (+7-3) - (modified) clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp (+15-7) ``````````diff diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp index fdfcea852b4f2..847d7235441c9 100644 --- a/clang/lib/Driver/ToolChains/Cuda.cpp +++ b/clang/lib/Driver/ToolChains/Cuda.cpp @@ -611,9 +611,13 @@ void NVPTX::Linker::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back(Args.MakeArgString( "--pxtas-path=" + Args.getLastArgValue(options::OPT_ptxas_path_EQ))); - if (Args.hasArg(options::OPT_cuda_path_EQ)) - CmdArgs.push_back(Args.MakeArgString( - "--cuda-path=" + Args.getLastArgValue(options::OPT_cuda_path_EQ))); + if (Args.hasArg(options::OPT_ptxas_path_EQ) || + TC.CudaInstallation.isValid()) { + StringRef CudaPath = Args.getLastArgValue( + options::OPT_cuda_path_EQ, + llvm::sys::path::parent_path(TC.CudaInstallation.getBinPath())); + CmdArgs.push_back(Args.MakeArgString("--cuda-path=" + CudaPath)); + } // Add paths specified in LIBRARY_PATH environment variable as -L options. addDirectoryList(Args, CmdArgs, "-L", "LIBRARY_PATH"); diff --git a/clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp b/clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp index 4b63971214f81..c78e37a1ffe89 100644 --- a/clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp +++ b/clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp @@ -286,12 +286,17 @@ struct Symbol { }; Expected<StringRef> runPTXAs(StringRef File, const ArgList &Args) { - std::string CudaPath = Args.getLastArgValue(OPT_cuda_path_EQ).str(); - std::string GivenPath = Args.getLastArgValue(OPT_ptxas_path_EQ).str(); - Expected<std::string> PTXAsPath = - findProgram(Args, "ptxas", {CudaPath + "/bin", GivenPath}); + SmallVector<StringRef, 1> SearchPaths; + if (Arg *A = Args.getLastArg(OPT_cuda_path_EQ)) + SearchPaths.push_back( + Args.MakeArgString(StringRef(A->getValue()) + "/bin")); + if (Arg *A = Args.getLastArg(OPT_ptxas_path_EQ)) + SearchPaths.push_back(Args.MakeArgString(A->getValue())); + + Expected<std::string> PTXAsPath = findProgram(Args, "ptxas", SearchPaths); if (!PTXAsPath) return PTXAsPath.takeError(); + if (!Args.hasArg(OPT_arch)) return createStringError( "must pass in an explicit nvptx64 gpu architecture to 'ptxas'"); @@ -691,9 +696,12 @@ Error runNVLink(ArrayRef<StringRef> Files, const ArgList &Args) { if (Args.hasArg(OPT_lto_emit_asm) || Args.hasArg(OPT_lto_emit_llvm)) return Error::success(); - std::string CudaPath = Args.getLastArgValue(OPT_cuda_path_EQ).str(); - Expected<std::string> NVLinkPath = - findProgram(Args, "nvlink", {CudaPath + "/bin"}); + SmallVector<StringRef, 1> SearchPaths; + if (Arg *A = Args.getLastArg(OPT_cuda_path_EQ)) + SearchPaths.push_back( + Args.MakeArgString(StringRef(A->getValue()) + "/bin")); + + Expected<std::string> NVLinkPath = findProgram(Args, "nvlink", SearchPaths); if (!NVLinkPath) return NVLinkPath.takeError(); `````````` </details> https://github.com/llvm/llvm-project/pull/152789 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits