Skip to content

Commit 1e00423

Browse files
authored
[Clang][VE] Correct rpath handling on VE (#67671)
Add rpath for libc++ libraries in order to not specify rpath by user each time. Disable -frthlib-add-ppath by default for VE similar to other architectures. Update regression tests to check modifications.
1 parent 06f3b0e commit 1e00423

File tree

8 files changed

+19
-12
lines changed

8 files changed

+19
-12
lines changed

clang/lib/Driver/ToolChains/CommonArgs.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -902,11 +902,8 @@ void tools::addOpenMPRuntimeLibraryPath(const ToolChain &TC,
902902

903903
void tools::addArchSpecificRPath(const ToolChain &TC, const ArgList &Args,
904904
ArgStringList &CmdArgs) {
905-
// Enable -frtlib-add-rpath by default for the case of VE.
906-
const bool IsVE = TC.getTriple().isVE();
907-
bool DefaultValue = IsVE;
908905
if (!Args.hasFlag(options::OPT_frtlib_add_rpath,
909-
options::OPT_fno_rtlib_add_rpath, DefaultValue))
906+
options::OPT_fno_rtlib_add_rpath, false))
910907
return;
911908

912909
for (const auto &CandidateRPath : TC.getArchSpecificLibPaths()) {

clang/lib/Driver/ToolChains/VEToolchain.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ VEToolChain::VEToolChain(const Driver &D, const llvm::Triple &Triple,
3333
// These are OK.
3434

3535
// Default file paths are following:
36+
// ${RESOURCEDIR}/lib/ve-unknown-linux-gnu, (== getArchSpecificLibPaths)
3637
// ${RESOURCEDIR}/lib/linux/ve, (== getArchSpecificLibPaths)
3738
// /lib/../lib64,
3839
// /usr/lib/../lib64,
@@ -46,6 +47,7 @@ VEToolChain::VEToolChain(const Driver &D, const llvm::Triple &Triple,
4647

4748
// Add library directories:
4849
// ${BINPATH}/../lib/ve-unknown-linux-gnu, (== getStdlibPath)
50+
// ${RESOURCEDIR}/lib/ve-unknown-linux-gnu, (== getArchSpecificLibPaths)
4951
// ${RESOURCEDIR}/lib/linux/ve, (== getArchSpecificLibPaths)
5052
// ${SYSROOT}/opt/nec/ve/lib,
5153
if (std::optional<std::string> Path = getStdlibPath())
@@ -141,6 +143,12 @@ void VEToolChain::AddCXXStdlibLibArgs(const ArgList &Args,
141143

142144
tools::addArchSpecificRPath(*this, Args, CmdArgs);
143145

146+
// Add paths for libc++.so and other shared libraries.
147+
if (std::optional<std::string> Path = getStdlibPath()) {
148+
CmdArgs.push_back("-rpath");
149+
CmdArgs.push_back(Args.MakeArgString(*Path));
150+
}
151+
144152
CmdArgs.push_back("-lc++");
145153
if (Args.hasArg(options::OPT_fexperimental_library))
146154
CmdArgs.push_back("-lc++experimental");

clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/ve-unknown-linux-gnu/libclang_rt.builtins.a

Whitespace-only changes.

clang/test/Driver/ve-toolchain.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@
9797
// DEF-SAME: "[[SYSROOT]]/opt/nec/ve/lib/crt1.o"
9898
// DEF-SAME: "[[SYSROOT]]/opt/nec/ve/lib/crti.o"
9999
// DEF-SAME: "-z" "max-page-size=0x4000000"
100-
// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/clang_rt.crtbegin-ve.o"
101-
// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/libclang_rt.builtins-ve.a" "-lc"
102-
// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/libclang_rt.builtins-ve.a"
103-
// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/clang_rt.crtend-ve.o"
100+
// DEF-SAME: "[[RESOURCE_DIR]]/lib/ve-unknown-linux-gnu/clang_rt.crtbegin.o"
101+
// DEF-SAME: "[[RESOURCE_DIR]]/lib/ve-unknown-linux-gnu/libclang_rt.builtins.a" "-lc"
102+
// DEF-SAME: "[[RESOURCE_DIR]]/lib/ve-unknown-linux-gnu/libclang_rt.builtins.a"
103+
// DEF-SAME: "[[RESOURCE_DIR]]/lib/ve-unknown-linux-gnu/clang_rt.crtend.o"
104104
// DEF-SAME: "[[SYSROOT]]/opt/nec/ve/lib/crtn.o"

clang/test/Driver/ve-toolchain.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
// DEFINC-SAME: "-internal-isystem" "{{.*}}/bin/../include/c++/v1"
2626
// DEFINC-SAME: "-internal-isystem" "[[RESOURCE_DIR]]/include"
2727
// DEFINC-SAME: "-internal-isystem" "[[SYSROOT]]/opt/nec/ve/include"
28+
// DEFINC: nld"
29+
// DEFINC-SAME: "-rpath" "[[SYSROOT]]/bin/../lib/ve-unknown-linux-gnu"
2830

2931
// RUN: %clangxx -### --target=ve-unknown-linux-gnu \
3032
// RUN: --sysroot %S/Inputs/basic_ve_tree %s \
@@ -146,9 +148,9 @@
146148
// DEF-SAME: "[[SYSROOT]]/opt/nec/ve/lib/crt1.o"
147149
// DEF-SAME: "[[SYSROOT]]/opt/nec/ve/lib/crti.o"
148150
// DEF-SAME: "-z" "max-page-size=0x4000000"
149-
// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/clang_rt.crtbegin-ve.o"
151+
// DEF-SAME: "[[RESOURCE_DIR]]/lib/ve-unknown-linux-gnu/clang_rt.crtbegin.o"
150152
// DEF-SAME: "-lc++" "-lc++abi" "-lunwind" "-lpthread" "-ldl"
151-
// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/libclang_rt.builtins-ve.a" "-lc"
152-
// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/libclang_rt.builtins-ve.a"
153-
// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/clang_rt.crtend-ve.o"
153+
// DEF-SAME: "[[RESOURCE_DIR]]/lib/ve-unknown-linux-gnu/libclang_rt.builtins.a" "-lc"
154+
// DEF-SAME: "[[RESOURCE_DIR]]/lib/ve-unknown-linux-gnu/libclang_rt.builtins.a"
155+
// DEF-SAME: "[[RESOURCE_DIR]]/lib/ve-unknown-linux-gnu/clang_rt.crtend.o"
154156
// DEF-SAME: "[[SYSROOT]]/opt/nec/ve/lib/crtn.o"

0 commit comments

Comments
 (0)