[PATCH] D111488: [Clang][clang-nvlink-wrapper] Pass nvlink path to the wrapper
Saiyedul Islam via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sat Oct 9 05:14:06 PDT 2021
saiislam created this revision.
saiislam added reviewers: Meinersbur, ye-luo, JonChesterfield.
saiislam requested review of this revision.
Herald added a reviewer: jdoerfert.
Herald added subscribers: cfe-commits, sstefan1.
Herald added a project: clang.
Added support of a "--path=" option in clang-nvlink-wrapper which
takes the path of directory containing nvlink binary.
Static Device Library support for OpenMP (D105191 <https://reviews.llvm.org/D105191>) now searches for
nvlink binary and passes its location via this option. In absence
of this option, nvlink binary is searched in locations in PATH.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D111488
Files:
clang/lib/Driver/ToolChains/Cuda.cpp
clang/tools/clang-nvlink-wrapper/ClangNvlinkWrapper.cpp
Index: clang/tools/clang-nvlink-wrapper/ClangNvlinkWrapper.cpp
===================================================================
--- clang/tools/clang-nvlink-wrapper/ClangNvlinkWrapper.cpp
+++ clang/tools/clang-nvlink-wrapper/ClangNvlinkWrapper.cpp
@@ -41,6 +41,15 @@
static cl::opt<bool> Help("h", cl::desc("Alias for -help"), cl::Hidden);
+// Mark all our options with this category, everything else (except for -help)
+// will be hidden.
+static cl::OptionCategory
+ ClangNvlinkWrapperCategory("clang-nvlink-wrapper options");
+
+static cl::opt<std::string>
+ NvlinkUserPath("path", cl::desc("path of directory containing nvlink"),
+ cl::cat(ClangNvlinkWrapperCategory));
+
static Error runNVLink(std::string NVLinkPath,
SmallVectorImpl<std::string> &Args) {
std::vector<StringRef> NVLArgs;
@@ -121,7 +130,6 @@
int main(int argc, const char **argv) {
sys::PrintStackTraceOnErrorSignal(argv[0]);
-
if (Help) {
cl::PrintHelpMessage();
return 0;
@@ -132,12 +140,7 @@
exit(1);
};
- ErrorOr<std::string> NvlinkPath = sys::findProgramByName("nvlink");
- if (!NvlinkPath) {
- reportError(createStringError(NvlinkPath.getError(),
- "unable to find 'nvlink' in path"));
- }
-
+ std::string NvlinkPath;
SmallVector<const char *, 0> Argv(argv, argv + argc);
SmallVector<std::string, 0> ArgvSubst;
SmallVector<std::string, 0> TmpFiles;
@@ -147,15 +150,28 @@
for (size_t i = 1; i < Argv.size(); ++i) {
std::string Arg = Argv[i];
+ StringRef ArgRef(Arg);
+ auto NvlPath = ArgRef.startswith_insensitive("--path=");
if (sys::path::extension(Arg) == ".a") {
if (Error Err = extractArchiveFiles(Arg, ArgvSubst, TmpFiles))
reportError(std::move(Err));
+ } else if (NvlPath) {
+ NvlinkPath = ArgRef.substr(7).str().append("/nvlink");
} else {
ArgvSubst.push_back(Arg);
}
}
- if (Error Err = runNVLink(NvlinkPath.get(), ArgvSubst))
+ if (NvlinkPath.empty()) {
+ ErrorOr<std::string> NvlinkPathErr = sys::findProgramByName("nvlink");
+ if (!NvlinkPathErr) {
+ reportError(createStringError(NvlinkPathErr.getError(),
+ "unable to find 'nvlink' in path"));
+ }
+ NvlinkPath = NvlinkPathErr.get();
+ }
+
+ if (Error Err = runNVLink(NvlinkPath, ArgvSubst))
reportError(std::move(Err));
if (Error Err = cleanupTmpFiles(TmpFiles))
reportError(std::move(Err));
Index: clang/lib/Driver/ToolChains/Cuda.cpp
===================================================================
--- clang/lib/Driver/ToolChains/Cuda.cpp
+++ clang/lib/Driver/ToolChains/Cuda.cpp
@@ -613,6 +613,13 @@
AddStaticDeviceLibsLinking(C, *this, JA, Inputs, Args, CmdArgs, "nvptx", GPUArch,
false, false);
+ // Find nvlink and pass it as "--path=" argument of clang-nvlink-wrapper.
+ auto NvlinkDir =
+ llvm::sys::path::parent_path(getToolChain().GetProgramPath("nvlink"))
+ .str();
+ const char *NvlinkPath = Args.MakeArgString(Twine("--path=" + NvlinkDir));
+ CmdArgs.push_back(NvlinkPath);
+
const char *Exec =
Args.MakeArgString(getToolChain().GetProgramPath("clang-nvlink-wrapper"));
C.addCommand(std::make_unique<Command>(
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D111488.378437.patch
Type: text/x-patch
Size: 3302 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20211009/7a3bf2de/attachment-0001.bin>
More information about the cfe-commits
mailing list