From ba9cfbe8e1d034d823dabf1c76d270fce8085f1b Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Thu, 9 Mar 2023 21:52:41 -0800 Subject: [PATCH] Restore -fopenmp-implicit-rpath, disabled by default Used by redhat-rpm-config on older Fedora versions. --- clang/include/clang/Driver/Options.td | 6 ++++++ clang/lib/Driver/ToolChains/CommonArgs.cpp | 19 +++++++++++++++++++ clang/lib/Driver/ToolChains/CommonArgs.h | 3 +++ clang/test/OpenMP/Inputs/libomp.a | 1 + 4 files changed, 29 insertions(+) create mode 100644 clang/test/OpenMP/Inputs/libomp.a diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 31ecf98b806b..46aa49e1d0d1 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -5194,6 +5194,12 @@ def offload_add_rpath: Flag<["--"], "offload-add-rpath">, def no_offload_add_rpath: Flag<["--"], "no-offload-add-rpath">, Flags<[NoArgumentUnused]>, Alias; +defm openmp_implicit_rpath: BoolFOption<"openmp-implicit-rpath", + LangOpts<"OpenMP">, + DefaultFalse, + PosFlag, + NegFlag, + BothFlags<[NoArgumentUnused]>>; def r : Flag<["-"], "r">, Flags<[LinkerInput, NoArgumentUnused]>, Group; def regcall4 : Flag<["-"], "regcall4">, Group, diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index 483ecd0ae592..55c673460a2f 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -889,6 +889,22 @@ static void addOpenMPDeviceLibC(const ToolChain &TC, const ArgList &Args, } } +void tools::addOpenMPRuntimeSpecificRPath(const ToolChain &TC, + const ArgList &Args, + ArgStringList &CmdArgs) { + + if (Args.hasFlag(options::OPT_fopenmp_implicit_rpath, + options::OPT_fno_openmp_implicit_rpath, false)) { + // Default to clang lib / lib64 folder, i.e. the same location as device + // runtime + SmallString<256> DefaultLibPath = + llvm::sys::path::parent_path(TC.getDriver().Dir); + llvm::sys::path::append(DefaultLibPath, CLANG_INSTALL_LIBDIR_BASENAME); + CmdArgs.push_back("-rpath"); + CmdArgs.push_back(Args.MakeArgString(DefaultLibPath)); + } +} + void tools::addOpenMPRuntimeLibraryPath(const ToolChain &TC, const ArgList &Args, ArgStringList &CmdArgs) { @@ -963,6 +979,9 @@ bool tools::addOpenMPRuntime(ArgStringList &CmdArgs, const ToolChain &TC, addOpenMPDeviceLibC(TC, Args, CmdArgs); addArchSpecificRPath(TC, Args, CmdArgs); + + if (RTKind == Driver::OMPRT_OMP) + addOpenMPRuntimeSpecificRPath(TC, Args, CmdArgs); addOpenMPRuntimeLibraryPath(TC, Args, CmdArgs); return true; diff --git a/clang/lib/Driver/ToolChains/CommonArgs.h b/clang/lib/Driver/ToolChains/CommonArgs.h index 096152bfbdcf..7e8bf6b8830c 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.h +++ b/clang/lib/Driver/ToolChains/CommonArgs.h @@ -117,6 +117,9 @@ void AddAssemblerKPIC(const ToolChain &ToolChain, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs); +void addOpenMPRuntimeSpecificRPath(const ToolChain &TC, + const llvm::opt::ArgList &Args, + llvm::opt::ArgStringList &CmdArgs); void addArchSpecificRPath(const ToolChain &TC, const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs); void addOpenMPRuntimeLibraryPath(const ToolChain &TC, diff --git a/clang/test/OpenMP/Inputs/libomp.a b/clang/test/OpenMP/Inputs/libomp.a new file mode 100644 index 000000000000..8b277f0dd5dc --- /dev/null +++ b/clang/test/OpenMP/Inputs/libomp.a @@ -0,0 +1 @@ +! -- 2.41.0