[clang] a921d2d - [Driver] Add -print-multiarch

Petr Hosek via cfe-commits cfe-commits at lists.llvm.org
Tue Apr 27 16:05:03 PDT 2021


Author: Petr Hosek
Date: 2021-04-27T16:04:54-07:00
New Revision: a921d2d2fb46b898794091e7410426c518a4f0cc

URL: https://github.com/llvm/llvm-project/commit/a921d2d2fb46b898794091e7410426c518a4f0cc
DIFF: https://github.com/llvm/llvm-project/commit/a921d2d2fb46b898794091e7410426c518a4f0cc.diff

LOG: [Driver] Add -print-multiarch

This is useful in runtimes build for example which currently try to
guess the correct triple where to place libraries in the multiarch
layout.  Using this flag, the build system can get the correct triple
directly by querying Clang.

Differential Revision: https://reviews.llvm.org/D101400

Added: 
    clang/test/Driver/print-multiarch.c

Modified: 
    clang/include/clang/Driver/Options.td
    clang/include/clang/Driver/ToolChain.h
    clang/lib/Driver/Driver.cpp
    clang/lib/Driver/ToolChains/Fuchsia.h
    clang/lib/Driver/ToolChains/Linux.h

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td
index 4c171b94193e..e70b793079ac 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -3584,6 +3584,8 @@ def print_target_triple : Flag<["-", "--"], "print-target-triple">,
   HelpText<"Print the normalized target triple">;
 def print_effective_triple : Flag<["-", "--"], "print-effective-triple">,
   HelpText<"Print the effective target triple">;
+def print_multiarch : Flag<["-", "--"], "print-multiarch">,
+  HelpText<"Print the multiarch target triple">;
 def print_prog_name_EQ : Joined<["-", "--"], "print-prog-name=">,
   HelpText<"Print the full program path of <name>">, MetaVarName<"<name>">;
 def print_resource_dir : Flag<["-", "--"], "print-resource-dir">,

diff  --git a/clang/include/clang/Driver/ToolChain.h b/clang/include/clang/Driver/ToolChain.h
index f96dcfc98e1a..8ec4cf853fed 100644
--- a/clang/include/clang/Driver/ToolChain.h
+++ b/clang/include/clang/Driver/ToolChain.h
@@ -184,12 +184,6 @@ class ToolChain {
   virtual Tool *buildStaticLibTool() const;
   virtual Tool *getTool(Action::ActionClass AC) const;
 
-  virtual std::string getMultiarchTriple(const Driver &D,
-                                         const llvm::Triple &TargetTriple,
-                                         StringRef SysRoot) const {
-    return TargetTriple.str();
-  }
-
   virtual std::string buildCompilerRTBasename(const llvm::opt::ArgList &Args,
                                               StringRef Component,
                                               FileType Type,
@@ -548,6 +542,12 @@ class ToolChain {
   /// isThreadModelSupported() - Does this target support a thread model?
   virtual bool isThreadModelSupported(const StringRef Model) const;
 
+  virtual std::string getMultiarchTriple(const Driver &D,
+                                         const llvm::Triple &TargetTriple,
+                                         StringRef SysRoot) const {
+    return TargetTriple.str();
+  }
+
   /// ComputeLLVMTriple - Return the LLVM target triple to use, after taking
   /// command line arguments into account.
   virtual std::string

diff  --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 848a8ce983f6..5008b506a883 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -1900,6 +1900,12 @@ bool Driver::HandleImmediateArgs(const Compilation &C) {
     return false;
   }
 
+  if (C.getArgs().hasArg(options::OPT_print_multiarch)) {
+    llvm::outs() << TC.getMultiarchTriple(*this, TC.getTriple(), SysRoot)
+                 << "\n";
+    return false;
+  }
+
   if (C.getArgs().hasArg(options::OPT_print_targets)) {
     llvm::TargetRegistry::printRegisteredTargetsForVersion(llvm::outs());
     return false;

diff  --git a/clang/lib/Driver/ToolChains/Fuchsia.h b/clang/lib/Driver/ToolChains/Fuchsia.h
index d6eab6e78e88..c49213c7b735 100644
--- a/clang/lib/Driver/ToolChains/Fuchsia.h
+++ b/clang/lib/Driver/ToolChains/Fuchsia.h
@@ -65,6 +65,10 @@ class LLVM_LIBRARY_VISIBILITY Fuchsia : public ToolChain {
     return LangOptions::SSPStrong;
   }
 
+  std::string getMultiarchTriple(const Driver &D,
+                                 const llvm::Triple &TargetTriple,
+                                 StringRef SysRoot) const override;
+
   std::string ComputeEffectiveClangTriple(const llvm::opt::ArgList &Args,
                                           types::ID InputType) const override;
 
@@ -97,10 +101,6 @@ class LLVM_LIBRARY_VISIBILITY Fuchsia : public ToolChain {
 
 protected:
   Tool *buildLinker() const override;
-
-  std::string getMultiarchTriple(const Driver &D,
-                                 const llvm::Triple &TargetTriple,
-                                 StringRef SysRoot) const override;
 };
 
 } // end namespace toolchains

diff  --git a/clang/lib/Driver/ToolChains/Linux.h b/clang/lib/Driver/ToolChains/Linux.h
index 05e01a208456..169a37c44072 100644
--- a/clang/lib/Driver/ToolChains/Linux.h
+++ b/clang/lib/Driver/ToolChains/Linux.h
@@ -23,6 +23,10 @@ class LLVM_LIBRARY_VISIBILITY Linux : public Generic_ELF {
 
   bool HasNativeLLVMSupport() const override;
 
+  std::string getMultiarchTriple(const Driver &D,
+                                 const llvm::Triple &TargetTriple,
+                                 StringRef SysRoot) const override;
+
   void
   AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
                             llvm::opt::ArgStringList &CC1Args) const override;
@@ -61,10 +65,6 @@ class LLVM_LIBRARY_VISIBILITY Linux : public Generic_ELF {
   Tool *buildAssembler() const override;
   Tool *buildLinker() const override;
   Tool *buildStaticLibTool() const override;
-
-  std::string getMultiarchTriple(const Driver &D,
-                                 const llvm::Triple &TargetTriple,
-                                 StringRef SysRoot) const override;
 };
 
 } // end namespace toolchains

diff  --git a/clang/test/Driver/print-multiarch.c b/clang/test/Driver/print-multiarch.c
new file mode 100644
index 000000000000..8638c9a155a3
--- /dev/null
+++ b/clang/test/Driver/print-multiarch.c
@@ -0,0 +1,6 @@
+// Check the output of -print-multiarch.
+
+// RUN: %clang -print-multiarch --target=x86_64-unknown-linux-gnu \
+// RUN:        -resource-dir=%S/Inputs/resource_dir \
+// RUN:      | FileCheck --check-prefix=PRINT-MULTIARCH %s
+// PRINT-MULTIARCH: {{^}}x86_64-linux-gnu{{$}}


        


More information about the cfe-commits mailing list