Skip to content

Commit 5c66ffe

Browse files
committed
Pass nanos6 location to the linker when using -fompss-2
Closes llvm#28
1 parent 82c8681 commit 5c66ffe

File tree

5 files changed

+36
-0
lines changed

5 files changed

+36
-0
lines changed

clang/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,9 @@ set(CLANG_DEFAULT_OBJCOPY "objcopy" CACHE STRING
291291
set(CLANG_DEFAULT_OPENMP_RUNTIME "libomp" CACHE STRING
292292
"Default OpenMP runtime used by -fopenmp.")
293293

294+
set(CLANG_DEFAULT_NANOS6_HOME "" CACHE STRING
295+
"Nanos6 home directory.")
296+
294297
# OpenMP offloading requires at least sm_35 because we use shuffle instructions
295298
# to generate efficient code for reductions and the atomicMax instruction on
296299
# 64-bit integers in the implementation of conditional lastprivate.

clang/include/clang/Config/config.h.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@
3232
/* Default OpenMP runtime used by -fopenmp. */
3333
#define CLANG_DEFAULT_OPENMP_RUNTIME "${CLANG_DEFAULT_OPENMP_RUNTIME}"
3434

35+
/* Nanos6 home directory. */
36+
#define CLANG_DEFAULT_NANOS6_HOME "${CLANG_DEFAULT_NANOS6_HOME}"
37+
3538
/* Default architecture for OpenMP offloading to Nvidia GPUs. */
3639
#define CLANG_OPENMP_NVPTX_DEFAULT_ARCH "${CLANG_OPENMP_NVPTX_DEFAULT_ARCH}"
3740

clang/lib/Driver/ToolChains/CommonArgs.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,29 @@ bool tools::addOpenMPRuntime(ArgStringList &CmdArgs, const ToolChain &TC,
533533
return true;
534534
}
535535

536+
void tools::addOmpSsRuntime(ArgStringList &CmdArgs, const ToolChain &TC,
537+
const ArgList &Args) {
538+
std::string RuntimeDefaultHome(CLANG_DEFAULT_NANOS6_HOME);
539+
Optional<std::string> RuntimeHome =
540+
llvm::sys::Process::GetEnv("NANOS6_HOME");
541+
// First look at environment NANOS6_HOME,
542+
// then CMAKE defined variable.
543+
//
544+
// Default to compiler lib dir. in case both are not defined.
545+
if (RuntimeHome && !RuntimeHome->empty()) {
546+
CmdArgs.push_back("-L");
547+
CmdArgs.push_back(Args.MakeArgString(RuntimeHome.getValue() + "/lib"));
548+
CmdArgs.push_back("-rpath");
549+
CmdArgs.push_back(Args.MakeArgString(RuntimeHome.getValue() + "/lib"));
550+
} else if (!RuntimeDefaultHome.empty()) {
551+
CmdArgs.push_back("-L");
552+
CmdArgs.push_back(Args.MakeArgString(RuntimeDefaultHome + "/lib"));
553+
CmdArgs.push_back("-rpath");
554+
CmdArgs.push_back(Args.MakeArgString(RuntimeDefaultHome + "/lib"));
555+
}
556+
CmdArgs.push_back("-lnanos6");
557+
}
558+
536559
static void addSanitizerRuntime(const ToolChain &TC, const ArgList &Args,
537560
ArgStringList &CmdArgs, StringRef Sanitizer,
538561
bool IsShared, bool IsWhole) {

clang/lib/Driver/ToolChains/CommonArgs.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,10 @@ bool addOpenMPRuntime(llvm::opt::ArgStringList &CmdArgs, const ToolChain &TC,
8686
const llvm::opt::ArgList &Args,
8787
bool IsOffloadingHost = false, bool GompNeedsRT = false);
8888

89+
/// OmpSs Nanos6 linker flags
90+
void addOmpSsRuntime(llvm::opt::ArgStringList &CmdArgs, const ToolChain &TC,
91+
const llvm::opt::ArgList &Args);
92+
8993
llvm::opt::Arg *getLastProfileUseArg(const llvm::opt::ArgList &Args);
9094
llvm::opt::Arg *getLastProfileSampleUseArg(const llvm::opt::ArgList &Args);
9195

clang/lib/Driver/ToolChains/Gnu.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -564,6 +564,9 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
564564
// FIXME: Does this really make sense for all GNU toolchains?
565565
WantPthread = true;
566566

567+
if (Args.getLastArg(options::OPT_fompss))
568+
addOmpSsRuntime(CmdArgs, ToolChain, Args);
569+
567570
AddRunTimeLibs(ToolChain, D, CmdArgs, Args);
568571

569572
if (WantPthread && !isAndroid)

0 commit comments

Comments
 (0)