Skip to content

[Clang][VE] Correct rpath handling on VE #67671

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 29, 2023
Merged

[Clang][VE] Correct rpath handling on VE #67671

merged 1 commit into from
Sep 29, 2023

Conversation

kaz7
Copy link
Contributor

@kaz7 kaz7 commented Sep 28, 2023

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.

@kaz7 kaz7 added clang:driver 'clang' and 'clang++' user-facing binaries. Not 'clang-cl' backend:VE labels Sep 28, 2023
@kaz7 kaz7 requested a review from a team September 28, 2023 13:10
@llvmbot llvmbot added the clang Clang issues not falling into any other category label Sep 28, 2023
@llvmbot
Copy link
Member

llvmbot commented Sep 28, 2023

@llvm/pr-subscribers-clang

@llvm/pr-subscribers-clang-driver

Changes

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.


Full diff: https://github.com/llvm/llvm-project/pull/67671.diff

8 Files Affected:

  • (modified) clang/lib/Driver/ToolChains/CommonArgs.cpp (+1-4)
  • (modified) clang/lib/Driver/ToolChains/VEToolchain.cpp (+8)
  • (renamed) clang/test/Driver/Inputs/basic_ve_tree/lib/ve-unknown-linux-gnu/libc++.so ()
  • (renamed) clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/ve-unknown-linux-gnu/clang_rt.crtbegin.o ()
  • (renamed) clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/ve-unknown-linux-gnu/clang_rt.crtend.o ()
  • (added) clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/ve-unknown-linux-gnu/libclang_rt.builtins.a ()
  • (modified) clang/test/Driver/ve-toolchain.c (+4-4)
  • (modified) clang/test/Driver/ve-toolchain.cpp (+6-4)
diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp
index 6041ef4aeb673ef..e07744e42968596 100644
--- a/clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -882,11 +882,8 @@ void tools::addOpenMPRuntimeLibraryPath(const ToolChain &TC,
 
 void tools::addArchSpecificRPath(const ToolChain &TC, const ArgList &Args,
                                  ArgStringList &CmdArgs) {
-  // Enable -frtlib-add-rpath by default for the case of VE.
-  const bool IsVE = TC.getTriple().isVE();
-  bool DefaultValue = IsVE;
   if (!Args.hasFlag(options::OPT_frtlib_add_rpath,
-                    options::OPT_fno_rtlib_add_rpath, DefaultValue))
+                    options::OPT_fno_rtlib_add_rpath, false))
     return;
 
   for (const auto &CandidateRPath : TC.getArchSpecificLibPaths()) {
diff --git a/clang/lib/Driver/ToolChains/VEToolchain.cpp b/clang/lib/Driver/ToolChains/VEToolchain.cpp
index 71b6fe2ea3619c1..39529e0b6b35915 100644
--- a/clang/lib/Driver/ToolChains/VEToolchain.cpp
+++ b/clang/lib/Driver/ToolChains/VEToolchain.cpp
@@ -33,6 +33,7 @@ VEToolChain::VEToolChain(const Driver &D, const llvm::Triple &Triple,
   // These are OK.
 
   // Default file paths are following:
+  //   ${RESOURCEDIR}/lib/ve-unknown-linux-gnu, (== getArchSpecificLibPaths)
   //   ${RESOURCEDIR}/lib/linux/ve, (== getArchSpecificLibPaths)
   //   /lib/../lib64,
   //   /usr/lib/../lib64,
@@ -46,6 +47,7 @@ VEToolChain::VEToolChain(const Driver &D, const llvm::Triple &Triple,
 
   // Add library directories:
   //   ${BINPATH}/../lib/ve-unknown-linux-gnu, (== getStdlibPath)
+  //   ${RESOURCEDIR}/lib/ve-unknown-linux-gnu, (== getArchSpecificLibPaths)
   //   ${RESOURCEDIR}/lib/linux/ve, (== getArchSpecificLibPaths)
   //   ${SYSROOT}/opt/nec/ve/lib,
   if (std::optional<std::string> Path = getStdlibPath())
@@ -141,6 +143,12 @@ void VEToolChain::AddCXXStdlibLibArgs(const ArgList &Args,
 
   tools::addArchSpecificRPath(*this, Args, CmdArgs);
 
+  // Add paths for libc++.so and other shared libraries.
+  if (std::optional<std::string> Path = getStdlibPath()) {
+    CmdArgs.push_back("-rpath");
+    CmdArgs.push_back(Args.MakeArgString(*Path));
+  }
+
   CmdArgs.push_back("-lc++");
   if (Args.hasArg(options::OPT_fexperimental_library))
     CmdArgs.push_back("-lc++experimental");
diff --git a/clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/linux/clang_rt.crtbegin-ve.o b/clang/test/Driver/Inputs/basic_ve_tree/lib/ve-unknown-linux-gnu/libc++.so
similarity index 100%
rename from clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/linux/clang_rt.crtbegin-ve.o
rename to clang/test/Driver/Inputs/basic_ve_tree/lib/ve-unknown-linux-gnu/libc++.so
diff --git a/clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/linux/clang_rt.crtend-ve.o b/clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/ve-unknown-linux-gnu/clang_rt.crtbegin.o
similarity index 100%
rename from clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/linux/clang_rt.crtend-ve.o
rename to clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/ve-unknown-linux-gnu/clang_rt.crtbegin.o
diff --git a/clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/linux/libclang_rt.builtins-ve.a b/clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/ve-unknown-linux-gnu/clang_rt.crtend.o
similarity index 100%
rename from clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/linux/libclang_rt.builtins-ve.a
rename to clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/ve-unknown-linux-gnu/clang_rt.crtend.o
diff --git a/clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/ve-unknown-linux-gnu/libclang_rt.builtins.a b/clang/test/Driver/Inputs/basic_ve_tree/resource_dir/lib/ve-unknown-linux-gnu/libclang_rt.builtins.a
new file mode 100644
index 000000000000000..e69de29bb2d1d64
diff --git a/clang/test/Driver/ve-toolchain.c b/clang/test/Driver/ve-toolchain.c
index 32e25769b6da7a9..078341eb1202d6d 100644
--- a/clang/test/Driver/ve-toolchain.c
+++ b/clang/test/Driver/ve-toolchain.c
@@ -97,8 +97,8 @@
 // DEF-SAME: "[[SYSROOT]]/opt/nec/ve/lib/crt1.o"
 // DEF-SAME: "[[SYSROOT]]/opt/nec/ve/lib/crti.o"
 // DEF-SAME: "-z" "max-page-size=0x4000000"
-// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/clang_rt.crtbegin-ve.o"
-// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/libclang_rt.builtins-ve.a" "-lc"
-// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/libclang_rt.builtins-ve.a"
-// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/clang_rt.crtend-ve.o"
+// DEF-SAME: "[[RESOURCE_DIR]]/lib/ve-unknown-linux-gnu/clang_rt.crtbegin.o"
+// DEF-SAME: "[[RESOURCE_DIR]]/lib/ve-unknown-linux-gnu/libclang_rt.builtins.a" "-lc"
+// DEF-SAME: "[[RESOURCE_DIR]]/lib/ve-unknown-linux-gnu/libclang_rt.builtins.a"
+// DEF-SAME: "[[RESOURCE_DIR]]/lib/ve-unknown-linux-gnu/clang_rt.crtend.o"
 // DEF-SAME: "[[SYSROOT]]/opt/nec/ve/lib/crtn.o"
diff --git a/clang/test/Driver/ve-toolchain.cpp b/clang/test/Driver/ve-toolchain.cpp
index 5a33d5eceb61474..15a556517182e87 100644
--- a/clang/test/Driver/ve-toolchain.cpp
+++ b/clang/test/Driver/ve-toolchain.cpp
@@ -25,6 +25,8 @@
 // DEFINC-SAME: "-internal-isystem" "{{.*}}/bin/../include/c++/v1"
 // DEFINC-SAME: "-internal-isystem" "[[RESOURCE_DIR]]/include"
 // DEFINC-SAME: "-internal-isystem" "[[SYSROOT]]/opt/nec/ve/include"
+// DEFINC: nld"
+// DEFINC-SAME: "-rpath" "[[SYSROOT]]/bin/../lib/ve-unknown-linux-gnu"
 
 // RUN: %clangxx -### --target=ve-unknown-linux-gnu \
 // RUN:     --sysroot %S/Inputs/basic_ve_tree %s \
@@ -146,9 +148,9 @@
 // DEF-SAME: "[[SYSROOT]]/opt/nec/ve/lib/crt1.o"
 // DEF-SAME: "[[SYSROOT]]/opt/nec/ve/lib/crti.o"
 // DEF-SAME: "-z" "max-page-size=0x4000000"
-// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/clang_rt.crtbegin-ve.o"
+// DEF-SAME: "[[RESOURCE_DIR]]/lib/ve-unknown-linux-gnu/clang_rt.crtbegin.o"
 // DEF-SAME: "-lc++" "-lc++abi" "-lunwind" "-lpthread" "-ldl"
-// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/libclang_rt.builtins-ve.a" "-lc"
-// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/libclang_rt.builtins-ve.a"
-// DEF-SAME: "[[RESOURCE_DIR]]/lib/linux/clang_rt.crtend-ve.o"
+// DEF-SAME: "[[RESOURCE_DIR]]/lib/ve-unknown-linux-gnu/libclang_rt.builtins.a" "-lc"
+// DEF-SAME: "[[RESOURCE_DIR]]/lib/ve-unknown-linux-gnu/libclang_rt.builtins.a"
+// DEF-SAME: "[[RESOURCE_DIR]]/lib/ve-unknown-linux-gnu/clang_rt.crtend.o"
 // DEF-SAME: "[[SYSROOT]]/opt/nec/ve/lib/crtn.o"

@github-actions
Copy link

github-actions bot commented Sep 28, 2023

✅ With the latest revision this PR passed the C/C++ code formatter.

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.
@kaz7 kaz7 merged commit 1e00423 into llvm:main Sep 29, 2023
@kaz7 kaz7 deleted the main-clang-correct-ve-rpath branch September 29, 2023 08:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backend:VE clang:driver 'clang' and 'clang++' user-facing binaries. Not 'clang-cl' clang Clang issues not falling into any other category
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants