llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Tony Varghese (tonykuttai)

<details>
<summary>Changes</summary>

Add `/usr/lib` and `/lib` to `-print-search-dirs` output to match GCC behaviour 
and fix Meson/CMake build failures. Override `AddFilePathLibArgs()` to prevent 
duplicate `-L` flags in linker commands. This should allow build tools to 
construct correct `blibpath`.

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


4 Files Affected:

- (modified) clang/include/clang/Driver/ToolChain.h (+2-2) 
- (modified) clang/lib/Driver/ToolChains/AIX.cpp (+17) 
- (modified) clang/lib/Driver/ToolChains/AIX.h (+3) 
- (added) clang/test/Driver/aix-print-search-dirs.c (+19) 


``````````diff
diff --git a/clang/include/clang/Driver/ToolChain.h 
b/clang/include/clang/Driver/ToolChain.h
index 16573a6589813..7dad563ec466d 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -749,8 +749,8 @@ class ToolChain {
                                    llvm::opt::ArgStringList &CmdArgs) const;
 
   /// AddFilePathLibArgs - Add each thing in getFilePaths() as a "-L" option.
-  void AddFilePathLibArgs(const llvm::opt::ArgList &Args,
-                          llvm::opt::ArgStringList &CmdArgs) const;
+  virtual void AddFilePathLibArgs(const llvm::opt::ArgList &Args,
+                                  llvm::opt::ArgStringList &CmdArgs) const;
 
   /// AddCCKextLibArgs - Add the system specific linker arguments to use
   /// for kernel extensions (Darwin-specific).
diff --git a/clang/lib/Driver/ToolChains/AIX.cpp 
b/clang/lib/Driver/ToolChains/AIX.cpp
index 6b037bff137d6..2078ad57aee18 100644
--- a/clang/lib/Driver/ToolChains/AIX.cpp
+++ b/clang/lib/Driver/ToolChains/AIX.cpp
@@ -350,6 +350,10 @@ AIX::AIX(const Driver &D, const llvm::Triple &Triple, 
const ArgList &Args)
   ParseInlineAsmUsingAsmParser = Args.hasFlag(
       options::OPT_fintegrated_as, options::OPT_fno_integrated_as, true);
   getLibraryPaths().push_back(getDriver().SysRoot + "/usr/lib");
+
+  // FilePaths gets System Paths for -print-search-dirs
+  getFilePaths().push_back(getDriver().SysRoot + "/usr/lib");
+  getFilePaths().push_back(getDriver().SysRoot + "/lib");
 }
 
 // Returns the effective header sysroot path to use.
@@ -447,6 +451,19 @@ void AIX::AddClangCXXStdlibIncludeArgs(
   llvm_unreachable("Unexpected C++ library type; only libc++ is supported.");
 }
 
+void AIX::AddFilePathLibArgs(const llvm::opt::ArgList &Args,
+                             llvm::opt::ArgStringList &CmdArgs) const {
+  // AIX linker searches /usr/lib and /lib by default. Don't add them as -L
+  // flags to avoid duplicates. But keep them in FilePaths for
+  // -print-search-dirs
+  for (const auto &LibPath : getFilePaths()) {
+    if (LibPath.length() > 0 && LibPath != getDriver().SysRoot + "/usr/lib" &&
+        LibPath != getDriver().SysRoot + "/lib") {
+      CmdArgs.push_back(Args.MakeArgString(StringRef("-L") + LibPath));
+    }
+  }
+}
+
 void AIX::AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
                               llvm::opt::ArgStringList &CmdArgs) const {
   switch (GetCXXStdlibType(Args)) {
diff --git a/clang/lib/Driver/ToolChains/AIX.h 
b/clang/lib/Driver/ToolChains/AIX.h
index 23c93aaf86ba8..6183c9e1b1643 100644
--- a/clang/lib/Driver/ToolChains/AIX.h
+++ b/clang/lib/Driver/ToolChains/AIX.h
@@ -77,6 +77,9 @@ class LLVM_LIBRARY_VISIBILITY AIX : public ToolChain {
       const llvm::opt::ArgList &DriverArgs,
       llvm::opt::ArgStringList &CC1Args) const override;
 
+  void AddFilePathLibArgs(const llvm::opt::ArgList &Args,
+                          llvm::opt::ArgStringList &CmdArgs) const override;
+
   void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
                            llvm::opt::ArgStringList &CmdArgs) const override;
 
diff --git a/clang/test/Driver/aix-print-search-dirs.c 
b/clang/test/Driver/aix-print-search-dirs.c
new file mode 100644
index 0000000000000..4db08869ef254
--- /dev/null
+++ b/clang/test/Driver/aix-print-search-dirs.c
@@ -0,0 +1,19 @@
+// Test that -print-search-dirs includes system library paths on AIX
+
+// RUN: %clang -print-search-dirs --target=powerpc-ibm-aix7.3.0.0 \
+// RUN:        --sysroot=%S/Inputs/aix_ppc_tree 2>&1 \
+// RUN:   | FileCheck --check-prefix=CHECK-PRINT-SEARCH-DIRS-32 %s
+
+// CHECK-PRINT-SEARCH-DIRS-32: programs: =
+// CHECK-PRINT-SEARCH-DIRS-32: libraries: =
+// CHECK-PRINT-SEARCH-DIRS-32-SAME: {{.*}}/usr/lib
+// CHECK-PRINT-SEARCH-DIRS-32-SAME: {{.*}}/lib
+
+// RUN: %clang -print-search-dirs --target=powerpc64-ibm-aix7.3.0.0 \
+// RUN:        --sysroot=%S/Inputs/aix_ppc_tree 2>&1 \
+// RUN:   | FileCheck --check-prefix=CHECK-PRINT-SEARCH-DIRS-64 %s
+
+// CHECK-PRINT-SEARCH-DIRS-64: programs: =
+// CHECK-PRINT-SEARCH-DIRS-64: libraries: =
+// CHECK-PRINT-SEARCH-DIRS-64-SAME: {{.*}}/usr/lib
+// CHECK-PRINT-SEARCH-DIRS-64-SAME: {{.*}}/lib

``````````

</details>


https://github.com/llvm/llvm-project/pull/182292
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to