phosek created this revision. phosek added reviewers: rnk, MaskRay. Herald added a subscriber: dang. phosek requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
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. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D101400 Files: 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 clang/test/Driver/immediate-options.c
Index: clang/test/Driver/immediate-options.c =================================================================== --- clang/test/Driver/immediate-options.c +++ clang/test/Driver/immediate-options.c @@ -29,3 +29,8 @@ // RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \ // RUN: | FileCheck --check-prefix=PRINT-RUNTIME-DIR-PER-TARGET %s // PRINT-RUNTIME-DIR-PER-TARGET: lib{{/|\\}}x86_64-pc-windows-msvc + +// RUN: %clang -print-multiarch-triple --target=x86_64-unknown-linux-gnu \ +// RUN: -resource-dir=%S/Inputs/resource_dir \ +// RUN: | FileCheck --check-prefix=PRINT-MULTIARCH-TRIPLE %s +// PRINT-MULTIARCH-TRIPLE: x86_64-linux-gnu Index: clang/lib/Driver/ToolChains/Linux.h =================================================================== --- clang/lib/Driver/ToolChains/Linux.h +++ clang/lib/Driver/ToolChains/Linux.h @@ -23,6 +23,10 @@ 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 @@ 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 Index: clang/lib/Driver/ToolChains/Fuchsia.h =================================================================== --- clang/lib/Driver/ToolChains/Fuchsia.h +++ clang/lib/Driver/ToolChains/Fuchsia.h @@ -65,6 +65,10 @@ 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 @@ protected: Tool *buildLinker() const override; - - std::string getMultiarchTriple(const Driver &D, - const llvm::Triple &TargetTriple, - StringRef SysRoot) const override; }; } // end namespace toolchains Index: clang/lib/Driver/Driver.cpp =================================================================== --- clang/lib/Driver/Driver.cpp +++ clang/lib/Driver/Driver.cpp @@ -1900,6 +1900,12 @@ return false; } + if (C.getArgs().hasArg(options::OPT_print_multiarch_triple)) { + 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; Index: clang/include/clang/Driver/ToolChain.h =================================================================== --- clang/include/clang/Driver/ToolChain.h +++ clang/include/clang/Driver/ToolChain.h @@ -184,12 +184,6 @@ 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 @@ /// 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 Index: clang/include/clang/Driver/Options.td =================================================================== --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -3584,6 +3584,8 @@ HelpText<"Print the normalized target triple">; def print_effective_triple : Flag<["-", "--"], "print-effective-triple">, HelpText<"Print the effective target triple">; +def print_multiarch_triple : Flag<["-", "--"], "print-multiarch-triple">, + 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">,
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits