[PATCH] D45422: [Driver] Allow drivers to add multiple libc++ include paths

2018-04-10 Thread Petr Hosek via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL329748: [Driver] Allow drivers to add multiple libc++ 
include paths (authored by phosek, committed by ).
Herald added a subscriber: llvm-commits.

Changed prior to commit:
  https://reviews.llvm.org/D45422?vs=141579=141892#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D45422

Files:
  cfe/trunk/lib/Driver/ToolChains/BareMetal.cpp
  cfe/trunk/lib/Driver/ToolChains/BareMetal.h
  cfe/trunk/lib/Driver/ToolChains/CloudABI.cpp
  cfe/trunk/lib/Driver/ToolChains/CloudABI.h
  cfe/trunk/lib/Driver/ToolChains/Contiki.h
  cfe/trunk/lib/Driver/ToolChains/Gnu.cpp
  cfe/trunk/lib/Driver/ToolChains/Gnu.h
  cfe/trunk/lib/Driver/ToolChains/Haiku.cpp
  cfe/trunk/lib/Driver/ToolChains/Haiku.h
  cfe/trunk/lib/Driver/ToolChains/Lanai.h
  cfe/trunk/lib/Driver/ToolChains/Linux.cpp
  cfe/trunk/lib/Driver/ToolChains/Linux.h
  cfe/trunk/lib/Driver/ToolChains/MipsLinux.cpp
  cfe/trunk/lib/Driver/ToolChains/MipsLinux.h
  cfe/trunk/lib/Driver/ToolChains/Myriad.cpp
  cfe/trunk/lib/Driver/ToolChains/Myriad.h
  cfe/trunk/lib/Driver/ToolChains/NaCl.cpp
  cfe/trunk/lib/Driver/ToolChains/NaCl.h
  cfe/trunk/lib/Driver/ToolChains/NetBSD.cpp
  cfe/trunk/lib/Driver/ToolChains/NetBSD.h
  cfe/trunk/lib/Driver/ToolChains/PS4CPU.h

Index: cfe/trunk/lib/Driver/ToolChains/BareMetal.h
===
--- cfe/trunk/lib/Driver/ToolChains/BareMetal.h
+++ cfe/trunk/lib/Driver/ToolChains/BareMetal.h
@@ -53,7 +53,6 @@
   void addClangTargetOptions(const llvm::opt::ArgList ,
  llvm::opt::ArgStringList ,
  Action::OffloadKind DeviceOffloadKind) const override;
-  std::string findLibCxxIncludePath(ToolChain::CXXStdlibType LibType) const;
   void AddClangCXXStdlibIncludeArgs(
   const llvm::opt::ArgList ,
   llvm::opt::ArgStringList ) const override;
Index: cfe/trunk/lib/Driver/ToolChains/Linux.cpp
===
--- cfe/trunk/lib/Driver/ToolChains/Linux.cpp
+++ cfe/trunk/lib/Driver/ToolChains/Linux.cpp
@@ -775,7 +775,8 @@
   return MaxVersion ? (base + "/" + MaxVersionString).str() : "";
 }
 
-std::string Linux::findLibCxxIncludePath() const {
+void Linux::addLibCxxIncludePaths(const llvm::opt::ArgList ,
+  llvm::opt::ArgStringList ) const {
   const std::string LibCXXIncludePathCandidates[] = {
   DetectLibcxxIncludePath(getDriver().Dir + "/../include/c++"),
   // If this is a development, non-installed, clang, libcxx will
@@ -787,9 +788,9 @@
 if (IncludePath.empty() || !getVFS().exists(IncludePath))
   continue;
 // Use the first candidate that exists.
-return IncludePath;
+addSystemInclude(DriverArgs, CC1Args, IncludePath);
+return;
   }
-  return "";
 }
 
 void Linux::addLibStdCxxIncludePaths(const llvm::opt::ArgList ,
Index: cfe/trunk/lib/Driver/ToolChains/Gnu.h
===
--- cfe/trunk/lib/Driver/ToolChains/Gnu.h
+++ cfe/trunk/lib/Driver/ToolChains/Gnu.h
@@ -316,7 +316,9 @@
   const llvm::opt::ArgList ,
   llvm::opt::ArgStringList ) const override;
 
-  virtual std::string findLibCxxIncludePath() const;
+  virtual void
+  addLibCxxIncludePaths(const llvm::opt::ArgList ,
+llvm::opt::ArgStringList ) const;
   virtual void
   addLibStdCxxIncludePaths(const llvm::opt::ArgList ,
llvm::opt::ArgStringList ) const;
Index: cfe/trunk/lib/Driver/ToolChains/MipsLinux.h
===
--- cfe/trunk/lib/Driver/ToolChains/MipsLinux.h
+++ cfe/trunk/lib/Driver/ToolChains/MipsLinux.h
@@ -31,7 +31,9 @@
 
   CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList ) const override;
 
-  std::string findLibCxxIncludePath() const override;
+  void addLibCxxIncludePaths(
+  const llvm::opt::ArgList ,
+  llvm::opt::ArgStringList ) const override;
 
   void AddCXXStdlibLibArgs(const llvm::opt::ArgList ,
llvm::opt::ArgStringList ) const override;
Index: cfe/trunk/lib/Driver/ToolChains/Myriad.h
===
--- cfe/trunk/lib/Driver/ToolChains/Myriad.h
+++ cfe/trunk/lib/Driver/ToolChains/Myriad.h
@@ -76,7 +76,9 @@
   void
   AddClangSystemIncludeArgs(const llvm::opt::ArgList ,
 llvm::opt::ArgStringList ) const override;
-  std::string findLibCxxIncludePath() const override;
+  void addLibCxxIncludePaths(
+  const llvm::opt::ArgList ,
+  llvm::opt::ArgStringList ) const override;
   void addLibStdCxxIncludePaths(
   const llvm::opt::ArgList ,
   llvm::opt::ArgStringList ) const override;
Index: cfe/trunk/lib/Driver/ToolChains/Lanai.h
===
--- cfe/trunk/lib/Driver/ToolChains/Lanai.h
+++ 

[PATCH] D45422: [Driver] Allow drivers to add multiple libc++ include paths

2018-04-10 Thread Reid Kleckner via Phabricator via cfe-commits
rnk accepted this revision.
rnk added a comment.
This revision is now accepted and ready to land.

lgtm


Repository:
  rC Clang

https://reviews.llvm.org/D45422



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D45422: [Driver] Allow drivers to add multiple libc++ include paths

2018-04-08 Thread Petr Hosek via Phabricator via cfe-commits
phosek created this revision.
phosek added reviewers: rsmith, dlj, rnk.
Herald added subscribers: cfe-commits, sdardis, dschuff.
Herald added a reviewer: EricWF.

This allows toolchain drivers to add multiple libc++ include paths akin
to libstdc++. This is useful in multiarch setup when some headers might
be in target specific include directory. There should be no functional
change.


Repository:
  rC Clang

https://reviews.llvm.org/D45422

Files:
  clang/lib/Driver/ToolChains/BareMetal.cpp
  clang/lib/Driver/ToolChains/BareMetal.h
  clang/lib/Driver/ToolChains/CloudABI.cpp
  clang/lib/Driver/ToolChains/CloudABI.h
  clang/lib/Driver/ToolChains/Contiki.h
  clang/lib/Driver/ToolChains/Gnu.cpp
  clang/lib/Driver/ToolChains/Gnu.h
  clang/lib/Driver/ToolChains/Haiku.cpp
  clang/lib/Driver/ToolChains/Haiku.h
  clang/lib/Driver/ToolChains/Lanai.h
  clang/lib/Driver/ToolChains/Linux.cpp
  clang/lib/Driver/ToolChains/Linux.h
  clang/lib/Driver/ToolChains/MipsLinux.cpp
  clang/lib/Driver/ToolChains/MipsLinux.h
  clang/lib/Driver/ToolChains/Myriad.cpp
  clang/lib/Driver/ToolChains/Myriad.h
  clang/lib/Driver/ToolChains/NaCl.cpp
  clang/lib/Driver/ToolChains/NaCl.h
  clang/lib/Driver/ToolChains/NetBSD.cpp
  clang/lib/Driver/ToolChains/NetBSD.h
  clang/lib/Driver/ToolChains/PS4CPU.h

Index: clang/lib/Driver/ToolChains/PS4CPU.h
===
--- clang/lib/Driver/ToolChains/PS4CPU.h
+++ clang/lib/Driver/ToolChains/PS4CPU.h
@@ -61,7 +61,9 @@
  const llvm::opt::ArgList );
 
   // No support for finding a C++ standard library yet.
-  std::string findLibCxxIncludePath() const override { return ""; }
+  void addLibCxxIncludePaths(
+  const llvm::opt::ArgList ,
+  llvm::opt::ArgStringList ) const override {}
   void addLibStdCxxIncludePaths(
   const llvm::opt::ArgList ,
   llvm::opt::ArgStringList ) const override {}
Index: clang/lib/Driver/ToolChains/NetBSD.h
===
--- clang/lib/Driver/ToolChains/NetBSD.h
+++ clang/lib/Driver/ToolChains/NetBSD.h
@@ -60,7 +60,9 @@
 
   CXXStdlibType GetDefaultCXXStdlibType() const override;
 
-  std::string findLibCxxIncludePath() const override;
+  void addLibCxxIncludePaths(
+  const llvm::opt::ArgList ,
+  llvm::opt::ArgStringList ) const override;
   void addLibStdCxxIncludePaths(
   const llvm::opt::ArgList ,
   llvm::opt::ArgStringList ) const override;
Index: clang/lib/Driver/ToolChains/NetBSD.cpp
===
--- clang/lib/Driver/ToolChains/NetBSD.cpp
+++ clang/lib/Driver/ToolChains/NetBSD.cpp
@@ -406,8 +406,10 @@
   return ToolChain::CST_Libstdcxx;
 }
 
-std::string NetBSD::findLibCxxIncludePath() const {
-  return getDriver().SysRoot + "/usr/include/c++/";
+void NetBSD::addLibCxxIncludePaths(const llvm::opt::ArgList ,
+   llvm::opt::ArgStringList ) const {
+  addSystemInclude(DriverArgs, CC1Args,
+   getDriver().SysRoot + "/usr/include/c++/");
 }
 
 void NetBSD::addLibStdCxxIncludePaths(const llvm::opt::ArgList ,
Index: clang/lib/Driver/ToolChains/NaCl.h
===
--- clang/lib/Driver/ToolChains/NaCl.h
+++ clang/lib/Driver/ToolChains/NaCl.h
@@ -53,7 +53,9 @@
   void
   AddClangSystemIncludeArgs(const llvm::opt::ArgList ,
 llvm::opt::ArgStringList ) const override;
-  std::string findLibCxxIncludePath() const override;
+  void addLibCxxIncludePaths(
+  const llvm::opt::ArgList ,
+  llvm::opt::ArgStringList ) const override;
 
   CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList ) const override;
 
Index: clang/lib/Driver/ToolChains/NaCl.cpp
===
--- clang/lib/Driver/ToolChains/NaCl.cpp
+++ clang/lib/Driver/ToolChains/NaCl.cpp
@@ -309,25 +309,29 @@
   CmdArgs.push_back("-lc++");
 }
 
-std::string NaClToolChain::findLibCxxIncludePath() const {
+void NaClToolChain::addLibCxxIncludePaths(
+const llvm::opt::ArgList ,
+llvm::opt::ArgStringList ) const {
   const Driver  = getDriver();
 
   SmallString<128> P(D.Dir + "/../");
   switch (getTriple().getArch()) {
   case llvm::Triple::arm:
 llvm::sys::path::append(P, "arm-nacl/include/c++/v1");
-return P.str();
+addSystemInclude(DriverArgs, CC1Args, P.str());
+break;
   case llvm::Triple::x86:
 llvm::sys::path::append(P, "x86_64-nacl/include/c++/v1");
-return P.str();
+addSystemInclude(DriverArgs, CC1Args, P.str());
+break;
   case llvm::Triple::x86_64:
 llvm::sys::path::append(P, "x86_64-nacl/include/c++/v1");
-return P.str();
+addSystemInclude(DriverArgs, CC1Args, P.str());
+break;
   case llvm::Triple::mipsel:
 llvm::sys::path::append(P, "mipsel-nacl/include/c++/v1");
-return P.str();
-  default:
-return "";
+addSystemInclude(DriverArgs, CC1Args,