From b32490270b786d2c5ba154e613ee2d5e36ed4197 Mon Sep 17 00:00:00 2001 From: David Zarzycki Date: Sun, 8 Dec 2019 16:41:46 +0200 Subject: [PATCH] Revert "Driver: Don't look for libc++ headers in the install directory on Android." This reverts commit 198fbcb817492ff45946e3f7517de15e8cdf0607. This breaks Fedora 31. --- clang/lib/Driver/ToolChains/Linux.cpp | 27 +++++++++-------------- clang/test/Driver/android-no-installed-libcxx.cpp | 8 ------- clang/test/Driver/stdlibxx-isystem.cpp | 10 ++++----- 3 files changed, 16 insertions(+), 29 deletions(-) delete mode 100644 clang/test/Driver/android-no-installed-libcxx.cpp diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp index adacd70..736a2d4 100644 --- a/clang/lib/Driver/ToolChains/Linux.cpp +++ b/clang/lib/Driver/ToolChains/Linux.cpp @@ -888,25 +888,20 @@ static std::string DetectLibcxxIncludePath(llvm::vfs::FileSystem &vfs, void Linux::addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs, llvm::opt::ArgStringList &CC1Args) const { const std::string& SysRoot = computeSysRoot(); - auto AddIncludePath = [&](std::string Path) { - std::string IncludePath = DetectLibcxxIncludePath(getVFS(), Path); + const std::string LibCXXIncludePathCandidates[] = { + DetectLibcxxIncludePath(getVFS(), getDriver().Dir + "/../include/c++"), + // If this is a development, non-installed, clang, libcxx will + // not be found at ../include/c++ but it likely to be found at + // one of the following two locations: + DetectLibcxxIncludePath(getVFS(), SysRoot + "/usr/local/include/c++"), + DetectLibcxxIncludePath(getVFS(), SysRoot + "/usr/include/c++") }; + for (const auto &IncludePath : LibCXXIncludePathCandidates) { if (IncludePath.empty() || !getVFS().exists(IncludePath)) - return false; + continue; + // Use the first candidate that exists. addSystemInclude(DriverArgs, CC1Args, IncludePath); - return true; - }; - // Android never uses the libc++ headers installed alongside the toolchain, - // which are generally incompatible with the NDK libraries anyway. - if (!getTriple().isAndroid()) - if (AddIncludePath(getDriver().Dir + "/../include/c++")) - return; - // If this is a development, non-installed, clang, libcxx will - // not be found at ../include/c++ but it likely to be found at - // one of the following two locations: - if (AddIncludePath(SysRoot + "/usr/local/include/c++")) - return; - if (AddIncludePath(SysRoot + "/usr/include/c++")) return; + } } void Linux::addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs, diff --git a/clang/test/Driver/android-no-installed-libcxx.cpp b/clang/test/Driver/android-no-installed-libcxx.cpp deleted file mode 100644 index b6f4227..0000000 --- a/clang/test/Driver/android-no-installed-libcxx.cpp +++ /dev/null @@ -1,8 +0,0 @@ -// Check that we don't find the libc++ in the installation directory when -// targeting Android. - -// RUN: mkdir -p %t/bin -// RUN: mkdir -p %t/include/c++/v1 -// RUN: %clang -target aarch64-linux-android -ccc-install-dir %t/bin \ -// RUN: -stdlib=libc++ -fsyntax-only %s -### 2>&1 | FileCheck %s -// CHECK-NOT: "-internal-isystem" "{{.*}}v1" diff --git a/clang/test/Driver/stdlibxx-isystem.cpp b/clang/test/Driver/stdlibxx-isystem.cpp index 827cdf9..cf7535f 100644 --- a/clang/test/Driver/stdlibxx-isystem.cpp +++ b/clang/test/Driver/stdlibxx-isystem.cpp @@ -6,7 +6,7 @@ // By default, we should search for libc++ next to the driver. // RUN: mkdir -p %t/bin // RUN: mkdir -p %t/include/c++/v1 -// RUN: %clang -target aarch64-linux-gnu -ccc-install-dir %t/bin \ +// RUN: %clang -target aarch64-linux-android -ccc-install-dir %t/bin \ // RUN: -stdlib=libc++ -fsyntax-only %s -### 2>&1 | \ // RUN: FileCheck -check-prefix=LIBCXX %s // RUN: %clang -target x86_64-apple-darwin -ccc-install-dir %t/bin \ @@ -16,7 +16,7 @@ // LIBCXX: "-internal-isystem" "[[INSTALLDIR]]/../include/c++/v1" // Passing -stdlib++-isystem should suppress the default search. -// RUN: %clang -target aarch64-linux-gnu -ccc-install-dir %t/bin \ +// RUN: %clang -target aarch64-linux-android -ccc-install-dir %t/bin \ // RUN: -stdlib++-isystem /tmp/foo -stdlib++-isystem /tmp/bar -stdlib=libc++ \ // RUN: -fsyntax-only %s -### 2>&1 | FileCheck -check-prefix=NODEFAULT %s // RUN: %clang -target x86_64-apple-darwin -ccc-install-dir %t/bin \ @@ -26,7 +26,7 @@ // NODEFAULT-NOT: "-internal-isystem" "[[INSTALLDIR]]/../include/c++/v1" // And we should add it as an -internal-isystem. -// RUN: %clang -target aarch64-linux-gnu -ccc-install-dir %t/bin \ +// RUN: %clang -target aarch64-linux-android -ccc-install-dir %t/bin \ // RUN: -stdlib++-isystem /tmp/foo -stdlib++-isystem /tmp/bar -stdlib=libc++ \ // RUN: -fsyntax-only %s -### 2>&1 | FileCheck -check-prefix=INCPATH %s // RUN: %clang -target x86_64-apple-darwin -ccc-install-dir %t/bin \ @@ -35,7 +35,7 @@ // INCPATH: "-internal-isystem" "/tmp/foo" "-internal-isystem" "/tmp/bar" // We shouldn't pass the -stdlib++-isystem to cc1. -// RUN: %clang -target aarch64-linux-gnu -ccc-install-dir %t/bin \ +// RUN: %clang -target aarch64-linux-android -ccc-install-dir %t/bin \ // RUN: -stdlib++-isystem /tmp -stdlib=libc++ -fsyntax-only %s -### 2>&1 | \ // RUN: FileCheck -check-prefix=NOCC1 %s // RUN: %clang -target x86_64-apple-darwin -ccc-install-dir %t/bin \ @@ -44,7 +44,7 @@ // NOCC1-NOT: "-stdlib++-isystem" "/tmp" // It should respect -nostdinc++. -// RUN: %clang -target aarch64-linux-gnu -ccc-install-dir %t/bin \ +// RUN: %clang -target aarch64-linux-android -ccc-install-dir %t/bin \ // RUN: -stdlib++-isystem /tmp/foo -stdlib++-isystem /tmp/bar -nostdinc++ \ // RUN: -fsyntax-only %s -### 2>&1 | FileCheck -check-prefix=NOSTDINCXX %s // RUN: %clang -target x86_64-apple-darwin -ccc-install-dir %t/bin \ -- 2.7.4