577 lines
26 KiB
Diff
577 lines
26 KiB
Diff
From 465b7cf1dd093eb0bec1ba47a1683a874d6cc99c Mon Sep 17 00:00:00 2001
|
|
From: jeremyd2019 <github@jdrake.com>
|
|
Date: Thu, 8 May 2025 23:54:02 -0700
|
|
Subject: [PATCH] [Clang] [Driver] add a Cygwin ToolChain (#135691)
|
|
|
|
Add a new Cygwin toolchain that just goes through the motions to
|
|
initialize the Generic_GCC base properly. This allows removing some old,
|
|
almost certainly wrong hard-coded paths from Lex/InitHeaderSearch.cpp.
|
|
|
|
MSYS2 (GCC triple (arch)-pc-msys) is a fork of Cygwin (GCC triple
|
|
(arch)-pc-cygwin), and this driver can be used for either.
|
|
|
|
Add a simple test for this driver.
|
|
---
|
|
clang/lib/Driver/CMakeLists.txt | 1 +
|
|
clang/lib/Driver/Driver.cpp | 4 +
|
|
clang/lib/Driver/ToolChains/Cygwin.cpp | 109 ++++++++++++++++++
|
|
clang/lib/Driver/ToolChains/Cygwin.h | 36 ++++++
|
|
clang/lib/Driver/ToolChains/Gnu.cpp | 16 +++
|
|
clang/lib/Lex/InitHeaderSearch.cpp | 86 +-------------
|
|
.../usr/i686-pc-msys/bin/as | 0
|
|
.../usr/i686-pc-msys/bin/ld | 0
|
|
.../usr/i686-pc-msys/lib/.keep | 0
|
|
.../usr/lib/gcc/i686-pc-msys/10/crtbegin.o | 0
|
|
.../lib/gcc/x86_64-pc-cygwin/10/crtbegin.o | 0
|
|
.../usr/x86_64-pc-cygwin/bin/as | 0
|
|
.../usr/x86_64-pc-cygwin/bin/ld | 0
|
|
.../usr/x86_64-pc-cygwin/lib/.keep | 0
|
|
.../Inputs/basic_cygwin_tree/include/.keep | 0
|
|
.../Driver/Inputs/basic_cygwin_tree/lib/.keep | 0
|
|
.../usr/include/c++/10/.keep | 0
|
|
.../usr/include/i686-pc-cygwin/.keep | 0
|
|
.../usr/include/i686-pc-cygwin/c++/10/.keep | 0
|
|
.../usr/include/x86_64-pc-msys/.keep | 0
|
|
.../usr/include/x86_64-pc-msys/c++/10/.keep | 0
|
|
.../usr/lib/gcc/i686-pc-cygwin/10/crtbegin.o | 0
|
|
.../usr/lib/gcc/i686-pc-cygwin/10/crtbeginS.o | 0
|
|
.../usr/lib/gcc/x86_64-pc-msys/10/crtbegin.o | 0
|
|
.../usr/lib/gcc/x86_64-pc-msys/10/crtbeginS.o | 0
|
|
.../usr/lib/i686-pc-cygwin/.keep | 0
|
|
.../usr/lib/x86_64-pc-msys/.keep | 0
|
|
clang/test/Driver/cygwin.cpp | 77 +++++++++++++
|
|
28 files changed, 246 insertions(+), 83 deletions(-)
|
|
create mode 100644 clang/lib/Driver/ToolChains/Cygwin.cpp
|
|
create mode 100644 clang/lib/Driver/ToolChains/Cygwin.h
|
|
create mode 100755 clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/i686-pc-msys/bin/as
|
|
create mode 100755 clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/i686-pc-msys/bin/ld
|
|
create mode 100644 clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/i686-pc-msys/lib/.keep
|
|
create mode 100644 clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/lib/gcc/i686-pc-msys/10/crtbegin.o
|
|
create mode 100644 clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/lib/gcc/x86_64-pc-cygwin/10/crtbegin.o
|
|
create mode 100755 clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/x86_64-pc-cygwin/bin/as
|
|
create mode 100755 clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/x86_64-pc-cygwin/bin/ld
|
|
create mode 100644 clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/x86_64-pc-cygwin/lib/.keep
|
|
create mode 100644 clang/test/Driver/Inputs/basic_cygwin_tree/include/.keep
|
|
create mode 100644 clang/test/Driver/Inputs/basic_cygwin_tree/lib/.keep
|
|
create mode 100644 clang/test/Driver/Inputs/basic_cygwin_tree/usr/include/c++/10/.keep
|
|
create mode 100644 clang/test/Driver/Inputs/basic_cygwin_tree/usr/include/i686-pc-cygwin/.keep
|
|
create mode 100644 clang/test/Driver/Inputs/basic_cygwin_tree/usr/include/i686-pc-cygwin/c++/10/.keep
|
|
create mode 100644 clang/test/Driver/Inputs/basic_cygwin_tree/usr/include/x86_64-pc-msys/.keep
|
|
create mode 100644 clang/test/Driver/Inputs/basic_cygwin_tree/usr/include/x86_64-pc-msys/c++/10/.keep
|
|
create mode 100644 clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/gcc/i686-pc-cygwin/10/crtbegin.o
|
|
create mode 100644 clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/gcc/i686-pc-cygwin/10/crtbeginS.o
|
|
create mode 100644 clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/gcc/x86_64-pc-msys/10/crtbegin.o
|
|
create mode 100644 clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/gcc/x86_64-pc-msys/10/crtbeginS.o
|
|
create mode 100644 clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/i686-pc-cygwin/.keep
|
|
create mode 100644 clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/x86_64-pc-msys/.keep
|
|
create mode 100644 clang/test/Driver/cygwin.cpp
|
|
|
|
diff --git a/clang/lib/Driver/CMakeLists.txt b/clang/lib/Driver/CMakeLists.txt
|
|
index 5bdb661438..e72525e99d 100644
|
|
--- a/clang/lib/Driver/CMakeLists.txt
|
|
+++ b/clang/lib/Driver/CMakeLists.txt
|
|
@@ -51,6 +51,7 @@ add_clang_library(clangDriver
|
|
ToolChains/CrossWindows.cpp
|
|
ToolChains/CSKYToolChain.cpp
|
|
ToolChains/Cuda.cpp
|
|
+ ToolChains/Cygwin.cpp
|
|
ToolChains/Darwin.cpp
|
|
ToolChains/DragonFly.cpp
|
|
ToolChains/Flang.cpp
|
|
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
|
|
index 87855fdb79..c5c2af6eb2 100644
|
|
--- a/clang/lib/Driver/Driver.cpp
|
|
+++ b/clang/lib/Driver/Driver.cpp
|
|
@@ -17,6 +17,7 @@
|
|
#include "ToolChains/Clang.h"
|
|
#include "ToolChains/CrossWindows.h"
|
|
#include "ToolChains/Cuda.h"
|
|
+#include "ToolChains/Cygwin.h"
|
|
#include "ToolChains/Darwin.h"
|
|
#include "ToolChains/DragonFly.h"
|
|
#include "ToolChains/FreeBSD.h"
|
|
@@ -6692,6 +6693,9 @@ const ToolChain &Driver::getToolChain(const ArgList &Args,
|
|
case llvm::Triple::GNU:
|
|
TC = std::make_unique<toolchains::MinGW>(*this, Target, Args);
|
|
break;
|
|
+ case llvm::Triple::Cygnus:
|
|
+ TC = std::make_unique<toolchains::Cygwin>(*this, Target, Args);
|
|
+ break;
|
|
case llvm::Triple::Itanium:
|
|
TC = std::make_unique<toolchains::CrossWindowsToolChain>(*this, Target,
|
|
Args);
|
|
diff --git a/clang/lib/Driver/ToolChains/Cygwin.cpp b/clang/lib/Driver/ToolChains/Cygwin.cpp
|
|
new file mode 100644
|
|
index 0000000000..f0e90deee9
|
|
--- /dev/null
|
|
+++ b/clang/lib/Driver/ToolChains/Cygwin.cpp
|
|
@@ -0,0 +1,109 @@
|
|
+//===----------------------------------------------------------------------===//
|
|
+//
|
|
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
+// See https://llvm.org/LICENSE.txt for license information.
|
|
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
+//
|
|
+//===----------------------------------------------------------------------===//
|
|
+
|
|
+#include "Cygwin.h"
|
|
+#include "CommonArgs.h"
|
|
+#include "clang/Config/config.h"
|
|
+#include "clang/Driver/Driver.h"
|
|
+#include "clang/Driver/Options.h"
|
|
+#include "llvm/Support/Path.h"
|
|
+#include "llvm/Support/VirtualFileSystem.h"
|
|
+
|
|
+using namespace clang::driver;
|
|
+using namespace clang::driver::toolchains;
|
|
+using namespace clang;
|
|
+using namespace llvm::opt;
|
|
+
|
|
+using tools::addPathIfExists;
|
|
+
|
|
+Cygwin::Cygwin(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
|
|
+ : Generic_GCC(D, Triple, Args) {
|
|
+ GCCInstallation.init(Triple, Args);
|
|
+ std::string SysRoot = computeSysRoot();
|
|
+ ToolChain::path_list &PPaths = getProgramPaths();
|
|
+
|
|
+ Generic_GCC::PushPPaths(PPaths);
|
|
+
|
|
+ path_list &Paths = getFilePaths();
|
|
+
|
|
+ Generic_GCC::AddMultiarchPaths(D, SysRoot, "lib", Paths);
|
|
+
|
|
+ // Similar to the logic for GCC above, if we are currently running Clang
|
|
+ // inside of the requested system root, add its parent library path to those
|
|
+ // searched.
|
|
+ // FIXME: It's not clear whether we should use the driver's installed
|
|
+ // directory ('Dir' below) or the ResourceDir.
|
|
+ if (StringRef(D.Dir).starts_with(SysRoot))
|
|
+ addPathIfExists(D, D.Dir + "/../lib", Paths);
|
|
+
|
|
+ addPathIfExists(D, SysRoot + "/lib", Paths);
|
|
+ addPathIfExists(D, SysRoot + "/usr/lib", Paths);
|
|
+ addPathIfExists(D, SysRoot + "/usr/lib/w32api", Paths);
|
|
+}
|
|
+
|
|
+llvm::ExceptionHandling Cygwin::GetExceptionModel(const ArgList &Args) const {
|
|
+ if (getArch() == llvm::Triple::x86_64 || getArch() == llvm::Triple::aarch64 ||
|
|
+ getArch() == llvm::Triple::arm || getArch() == llvm::Triple::thumb)
|
|
+ return llvm::ExceptionHandling::WinEH;
|
|
+ return llvm::ExceptionHandling::DwarfCFI;
|
|
+}
|
|
+
|
|
+void Cygwin::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
|
|
+ ArgStringList &CC1Args) const {
|
|
+ const Driver &D = getDriver();
|
|
+ std::string SysRoot = computeSysRoot();
|
|
+
|
|
+ if (DriverArgs.hasArg(clang::driver::options::OPT_nostdinc))
|
|
+ return;
|
|
+
|
|
+ if (!DriverArgs.hasArg(options::OPT_nostdlibinc))
|
|
+ addSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/local/include");
|
|
+
|
|
+ if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
|
|
+ SmallString<128> P(D.ResourceDir);
|
|
+ llvm::sys::path::append(P, "include");
|
|
+ addSystemInclude(DriverArgs, CC1Args, P);
|
|
+ }
|
|
+
|
|
+ if (DriverArgs.hasArg(options::OPT_nostdlibinc))
|
|
+ return;
|
|
+
|
|
+ // Check for configure-time C include directories.
|
|
+ StringRef CIncludeDirs(C_INCLUDE_DIRS);
|
|
+ if (CIncludeDirs != "") {
|
|
+ SmallVector<StringRef, 5> Dirs;
|
|
+ CIncludeDirs.split(Dirs, ":");
|
|
+ for (StringRef Dir : Dirs) {
|
|
+ StringRef Prefix =
|
|
+ llvm::sys::path::is_absolute(Dir) ? "" : StringRef(SysRoot);
|
|
+ addExternCSystemInclude(DriverArgs, CC1Args, Prefix + Dir);
|
|
+ }
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ // Lacking those, try to detect the correct set of system includes for the
|
|
+ // target triple.
|
|
+
|
|
+ AddMultilibIncludeArgs(DriverArgs, CC1Args);
|
|
+
|
|
+ // On systems using multiarch, add /usr/include/$triple before
|
|
+ // /usr/include.
|
|
+ std::string MultiarchIncludeDir = getTriple().str();
|
|
+ if (!MultiarchIncludeDir.empty() &&
|
|
+ D.getVFS().exists(SysRoot + "/usr/include/" + MultiarchIncludeDir))
|
|
+ addExternCSystemInclude(DriverArgs, CC1Args,
|
|
+ SysRoot + "/usr/include/" + MultiarchIncludeDir);
|
|
+
|
|
+ // Add an include of '/include' directly. This isn't provided by default by
|
|
+ // system GCCs, but is often used with cross-compiling GCCs, and harmless to
|
|
+ // add even when Clang is acting as-if it were a system compiler.
|
|
+ addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/include");
|
|
+
|
|
+ addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include");
|
|
+ addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include/w32api");
|
|
+}
|
|
diff --git a/clang/lib/Driver/ToolChains/Cygwin.h b/clang/lib/Driver/ToolChains/Cygwin.h
|
|
new file mode 100644
|
|
index 0000000000..d2f72c10c3
|
|
--- /dev/null
|
|
+++ b/clang/lib/Driver/ToolChains/Cygwin.h
|
|
@@ -0,0 +1,36 @@
|
|
+//===----------------------------------------------------------------------===//
|
|
+//
|
|
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
+// See https://llvm.org/LICENSE.txt for license information.
|
|
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
+//
|
|
+//===----------------------------------------------------------------------===//
|
|
+
|
|
+#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_CYGWIN_H
|
|
+#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_CYGWIN_H
|
|
+
|
|
+#include "Gnu.h"
|
|
+#include "clang/Driver/ToolChain.h"
|
|
+
|
|
+namespace clang {
|
|
+namespace driver {
|
|
+namespace toolchains {
|
|
+
|
|
+class LLVM_LIBRARY_VISIBILITY Cygwin : public Generic_GCC {
|
|
+public:
|
|
+ Cygwin(const Driver &D, const llvm::Triple &Triple,
|
|
+ const llvm::opt::ArgList &Args);
|
|
+
|
|
+ llvm::ExceptionHandling
|
|
+ GetExceptionModel(const llvm::opt::ArgList &Args) const override;
|
|
+
|
|
+ void
|
|
+ AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
|
|
+ llvm::opt::ArgStringList &CC1Args) const override;
|
|
+};
|
|
+
|
|
+} // end namespace toolchains
|
|
+} // end namespace driver
|
|
+} // end namespace clang
|
|
+
|
|
+#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_CYGWIN_H
|
|
diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
|
|
index f56eeda3cb..15de05fab5 100644
|
|
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
|
|
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
|
|
@@ -2630,6 +2630,22 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
|
|
return;
|
|
}
|
|
|
|
+ if (TargetTriple.isWindowsCygwinEnvironment()) {
|
|
+ LibDirs.push_back("/lib");
|
|
+ switch (TargetTriple.getArch()) {
|
|
+ case llvm::Triple::x86_64:
|
|
+ TripleAliases.append({"x86_64-pc-cygwin", "x86_64-pc-msys"});
|
|
+ break;
|
|
+ case llvm::Triple::x86:
|
|
+ TripleAliases.append({"i686-pc-cygwin", "i686-pc-msys"});
|
|
+ break;
|
|
+ default:
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ return;
|
|
+ }
|
|
+
|
|
switch (TargetTriple.getArch()) {
|
|
case llvm::Triple::aarch64:
|
|
LibDirs.append(begin(AArch64LibDirs), end(AArch64LibDirs));
|
|
diff --git a/clang/lib/Lex/InitHeaderSearch.cpp b/clang/lib/Lex/InitHeaderSearch.cpp
|
|
index bb2a21356f..45bca1834e 100644
|
|
--- a/clang/lib/Lex/InitHeaderSearch.cpp
|
|
+++ b/clang/lib/Lex/InitHeaderSearch.cpp
|
|
@@ -74,20 +74,10 @@ public:
|
|
SystemHeaderPrefixes.emplace_back(std::string(Prefix), IsSystemHeader);
|
|
}
|
|
|
|
- /// Add the necessary paths to support a MinGW libstdc++.
|
|
- void AddMinGWCPlusPlusIncludePaths(StringRef Base,
|
|
- StringRef Arch,
|
|
- StringRef Version);
|
|
-
|
|
/// Add paths that should always be searched.
|
|
void AddDefaultCIncludePaths(const llvm::Triple &triple,
|
|
const HeaderSearchOptions &HSOpts);
|
|
|
|
- /// Add paths that should be searched when compiling c++.
|
|
- void AddDefaultCPlusPlusIncludePaths(const LangOptions &LangOpts,
|
|
- const llvm::Triple &triple,
|
|
- const HeaderSearchOptions &HSOpts);
|
|
-
|
|
/// Returns true iff AddDefaultIncludePaths should do anything. If this
|
|
/// returns false, include paths should instead be handled in the driver.
|
|
bool ShouldAddDefaultIncludePaths(const llvm::Triple &triple);
|
|
@@ -180,35 +170,14 @@ bool InitHeaderSearch::AddUnmappedPath(const Twine &Path, IncludeDirGroup Group,
|
|
return false;
|
|
}
|
|
|
|
-void InitHeaderSearch::AddMinGWCPlusPlusIncludePaths(StringRef Base,
|
|
- StringRef Arch,
|
|
- StringRef Version) {
|
|
- AddPath(Base + "/" + Arch + "/" + Version + "/include/c++",
|
|
- CXXSystem, false);
|
|
- AddPath(Base + "/" + Arch + "/" + Version + "/include/c++/" + Arch,
|
|
- CXXSystem, false);
|
|
- AddPath(Base + "/" + Arch + "/" + Version + "/include/c++/backward",
|
|
- CXXSystem, false);
|
|
-}
|
|
-
|
|
void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple,
|
|
const HeaderSearchOptions &HSOpts) {
|
|
if (!ShouldAddDefaultIncludePaths(triple))
|
|
llvm_unreachable("Include management is handled in the driver.");
|
|
|
|
- llvm::Triple::OSType os = triple.getOS();
|
|
-
|
|
if (HSOpts.UseStandardSystemIncludes) {
|
|
- switch (os) {
|
|
- case llvm::Triple::Win32:
|
|
- if (triple.getEnvironment() != llvm::Triple::Cygnus)
|
|
- break;
|
|
- [[fallthrough]];
|
|
- default:
|
|
- // FIXME: temporary hack: hard-coded paths.
|
|
- AddPath("/usr/local/include", System, false);
|
|
- break;
|
|
- }
|
|
+ // FIXME: temporary hack: hard-coded paths.
|
|
+ AddPath("/usr/local/include", System, false);
|
|
}
|
|
|
|
// Builtin includes use #include_next directives and should be positioned
|
|
@@ -236,51 +205,9 @@ void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple,
|
|
return;
|
|
}
|
|
|
|
- switch (os) {
|
|
- case llvm::Triple::Win32:
|
|
- switch (triple.getEnvironment()) {
|
|
- default: llvm_unreachable("Include management is handled in the driver.");
|
|
- case llvm::Triple::Cygnus:
|
|
- AddPath("/usr/include/w32api", System, false);
|
|
- break;
|
|
- case llvm::Triple::GNU:
|
|
- break;
|
|
- }
|
|
- break;
|
|
- default:
|
|
- break;
|
|
- }
|
|
-
|
|
AddPath("/usr/include", ExternCSystem, false);
|
|
}
|
|
|
|
-void InitHeaderSearch::AddDefaultCPlusPlusIncludePaths(
|
|
- const LangOptions &LangOpts, const llvm::Triple &triple,
|
|
- const HeaderSearchOptions &HSOpts) {
|
|
- if (!ShouldAddDefaultIncludePaths(triple))
|
|
- llvm_unreachable("Include management is handled in the driver.");
|
|
-
|
|
- // FIXME: temporary hack: hard-coded paths.
|
|
- llvm::Triple::OSType os = triple.getOS();
|
|
- switch (os) {
|
|
- case llvm::Triple::Win32:
|
|
- switch (triple.getEnvironment()) {
|
|
- default: llvm_unreachable("Include management is handled in the driver.");
|
|
- case llvm::Triple::Cygnus:
|
|
- // Cygwin-1.7
|
|
- AddMinGWCPlusPlusIncludePaths("/usr/lib/gcc", "i686-pc-cygwin", "4.7.3");
|
|
- AddMinGWCPlusPlusIncludePaths("/usr/lib/gcc", "i686-pc-cygwin", "4.5.3");
|
|
- AddMinGWCPlusPlusIncludePaths("/usr/lib/gcc", "i686-pc-cygwin", "4.3.4");
|
|
- // g++-4 / Cygwin-1.5
|
|
- AddMinGWCPlusPlusIncludePaths("/usr/lib/gcc", "i686-pc-cygwin", "4.3.2");
|
|
- break;
|
|
- }
|
|
- break;
|
|
- default:
|
|
- break;
|
|
- }
|
|
-}
|
|
-
|
|
bool InitHeaderSearch::ShouldAddDefaultIncludePaths(
|
|
const llvm::Triple &triple) {
|
|
switch (triple.getOS()) {
|
|
@@ -303,15 +230,10 @@ bool InitHeaderSearch::ShouldAddDefaultIncludePaths(
|
|
case llvm::Triple::Solaris:
|
|
case llvm::Triple::UEFI:
|
|
case llvm::Triple::WASI:
|
|
+ case llvm::Triple::Win32:
|
|
case llvm::Triple::ZOS:
|
|
return false;
|
|
|
|
- case llvm::Triple::Win32:
|
|
- if (triple.getEnvironment() != llvm::Triple::Cygnus ||
|
|
- triple.isOSBinFormatMachO())
|
|
- return false;
|
|
- break;
|
|
-
|
|
case llvm::Triple::UnknownOS:
|
|
if (triple.isWasm() || triple.isAppleMachO())
|
|
return false;
|
|
@@ -355,8 +277,6 @@ void InitHeaderSearch::AddDefaultIncludePaths(
|
|
HSOpts.UseStandardCXXIncludes && HSOpts.UseStandardSystemIncludes) {
|
|
if (HSOpts.UseLibcxx) {
|
|
AddPath("/usr/include/c++/v1", CXXSystem, false);
|
|
- } else {
|
|
- AddDefaultCPlusPlusIncludePaths(Lang, triple, HSOpts);
|
|
}
|
|
}
|
|
|
|
diff --git a/clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/i686-pc-msys/bin/as b/clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/i686-pc-msys/bin/as
|
|
new file mode 100755
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/i686-pc-msys/bin/ld b/clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/i686-pc-msys/bin/ld
|
|
new file mode 100755
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/i686-pc-msys/lib/.keep b/clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/i686-pc-msys/lib/.keep
|
|
new file mode 100644
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/lib/gcc/i686-pc-msys/10/crtbegin.o b/clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/lib/gcc/i686-pc-msys/10/crtbegin.o
|
|
new file mode 100644
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/lib/gcc/x86_64-pc-cygwin/10/crtbegin.o b/clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/lib/gcc/x86_64-pc-cygwin/10/crtbegin.o
|
|
new file mode 100644
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/x86_64-pc-cygwin/bin/as b/clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/x86_64-pc-cygwin/bin/as
|
|
new file mode 100755
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/x86_64-pc-cygwin/bin/ld b/clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/x86_64-pc-cygwin/bin/ld
|
|
new file mode 100755
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/x86_64-pc-cygwin/lib/.keep b/clang/test/Driver/Inputs/basic_cross_cygwin_tree/usr/x86_64-pc-cygwin/lib/.keep
|
|
new file mode 100644
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/clang/test/Driver/Inputs/basic_cygwin_tree/include/.keep b/clang/test/Driver/Inputs/basic_cygwin_tree/include/.keep
|
|
new file mode 100644
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/clang/test/Driver/Inputs/basic_cygwin_tree/lib/.keep b/clang/test/Driver/Inputs/basic_cygwin_tree/lib/.keep
|
|
new file mode 100644
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/clang/test/Driver/Inputs/basic_cygwin_tree/usr/include/c++/10/.keep b/clang/test/Driver/Inputs/basic_cygwin_tree/usr/include/c++/10/.keep
|
|
new file mode 100644
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/clang/test/Driver/Inputs/basic_cygwin_tree/usr/include/i686-pc-cygwin/.keep b/clang/test/Driver/Inputs/basic_cygwin_tree/usr/include/i686-pc-cygwin/.keep
|
|
new file mode 100644
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/clang/test/Driver/Inputs/basic_cygwin_tree/usr/include/i686-pc-cygwin/c++/10/.keep b/clang/test/Driver/Inputs/basic_cygwin_tree/usr/include/i686-pc-cygwin/c++/10/.keep
|
|
new file mode 100644
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/clang/test/Driver/Inputs/basic_cygwin_tree/usr/include/x86_64-pc-msys/.keep b/clang/test/Driver/Inputs/basic_cygwin_tree/usr/include/x86_64-pc-msys/.keep
|
|
new file mode 100644
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/clang/test/Driver/Inputs/basic_cygwin_tree/usr/include/x86_64-pc-msys/c++/10/.keep b/clang/test/Driver/Inputs/basic_cygwin_tree/usr/include/x86_64-pc-msys/c++/10/.keep
|
|
new file mode 100644
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/gcc/i686-pc-cygwin/10/crtbegin.o b/clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/gcc/i686-pc-cygwin/10/crtbegin.o
|
|
new file mode 100644
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/gcc/i686-pc-cygwin/10/crtbeginS.o b/clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/gcc/i686-pc-cygwin/10/crtbeginS.o
|
|
new file mode 100644
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/gcc/x86_64-pc-msys/10/crtbegin.o b/clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/gcc/x86_64-pc-msys/10/crtbegin.o
|
|
new file mode 100644
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/gcc/x86_64-pc-msys/10/crtbeginS.o b/clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/gcc/x86_64-pc-msys/10/crtbeginS.o
|
|
new file mode 100644
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/i686-pc-cygwin/.keep b/clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/i686-pc-cygwin/.keep
|
|
new file mode 100644
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/x86_64-pc-msys/.keep b/clang/test/Driver/Inputs/basic_cygwin_tree/usr/lib/x86_64-pc-msys/.keep
|
|
new file mode 100644
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/clang/test/Driver/cygwin.cpp b/clang/test/Driver/cygwin.cpp
|
|
new file mode 100644
|
|
index 0000000000..dd75c48ddc
|
|
--- /dev/null
|
|
+++ b/clang/test/Driver/cygwin.cpp
|
|
@@ -0,0 +1,77 @@
|
|
+// RUN: %clang -### %s --target=i686-pc-windows-cygnus --sysroot=%S/Inputs/basic_cygwin_tree \
|
|
+// RUN: -resource-dir=%S/Inputs/resource_dir \
|
|
+// RUN: --stdlib=platform 2>&1 | FileCheck --check-prefix=CHECK %s
|
|
+// CHECK: "-cc1"
|
|
+// CHECK-SAME: "-resource-dir" "[[RESOURCE:[^"]+]]"
|
|
+// CHECK-SAME: "-isysroot" "[[SYSROOT:[^"]+]]"
|
|
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-pc-cygwin/10/../../../../include/c++/10"
|
|
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-pc-cygwin/10/../../../../include/i686-pc-cygwin/c++/10"
|
|
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-pc-cygwin/10/../../../../include/c++/10/backward"
|
|
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
|
|
+// CHECK-SAME: {{^}} "-internal-isystem" "[[RESOURCE]]{{(/|\\\\)}}include"
|
|
+// CHECK-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/i686-pc-cygwin/10/../../../../i686-pc-cygwin/include"
|
|
+// CHECK-SAME: "-internal-externc-isystem" "[[SYSROOT]]/include"
|
|
+// CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
|
|
+// CHECK-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include/w32api"
|
|
+// CHECK-SAME: "-femulated-tls"
|
|
+// CHECK-SAME: "-exception-model=dwarf"
|
|
+// CHECK: "{{.*}}gcc{{(\.exe)?}}"
|
|
+// CHECK-SAME: "-m32"
|
|
+
|
|
+// RUN: %clang -### %s --target=i686-pc-cygwin --sysroot=%S/Inputs/basic_cygwin_tree \
|
|
+// RUN: --stdlib=platform -static 2>&1 | FileCheck --check-prefix=CHECK-STATIC %s
|
|
+// CHECK-STATIC: "-cc1" "-triple" "i686-pc-windows-cygnus"
|
|
+// CHECK-STATIC-SAME: "-static-define"
|
|
+// CHECK-STATIC: "{{.*}}gcc{{(\.exe)?}}"
|
|
+// CHECK-STATIC-SAME: "-static"
|
|
+
|
|
+// RUN: %clang -### %s --target=i686-pc-cygwin --sysroot=%S/Inputs/basic_cygwin_tree \
|
|
+// RUN: -shared 2>&1 | FileCheck --check-prefix=CHECK-SHARED %s
|
|
+// CHECK-SHARED: "{{.*}}gcc{{(\.exe)?}}"
|
|
+// CHECK-SHARED-SAME: "-shared"
|
|
+
|
|
+// RUN: %clang -### -o %t %s 2>&1 -no-integrated-as -fuse-ld=ld \
|
|
+// RUN: --gcc-toolchain=%S/Inputs/basic_cross_cygwin_tree/usr \
|
|
+// RUN: --target=i686-pc-cygwin \
|
|
+// RUN: | FileCheck --check-prefix=CHECK-CROSS %s
|
|
+// CHECK-CROSS: "-cc1" "-triple" "i686-pc-windows-cygnus"
|
|
+// CHECK-CROSS: "{{.*}}/Inputs/basic_cross_cygwin_tree/usr/lib/gcc/i686-pc-msys/10/../../../../i686-pc-msys/bin{{(/|\\\\)}}as" "--32"
|
|
+
|
|
+// RUN: %clang -### %s --target=x86_64-pc-windows-cygnus --sysroot=%S/Inputs/basic_cygwin_tree \
|
|
+// RUN: -resource-dir=%S/Inputs/resource_dir \
|
|
+// RUN: --stdlib=platform 2>&1 | FileCheck --check-prefix=CHECK-64 %s
|
|
+// CHECK-64: "-cc1"
|
|
+// CHECK-64-SAME: "-resource-dir" "[[RESOURCE:[^"]+]]"
|
|
+// CHECK-64-SAME: "-isysroot" "[[SYSROOT:[^"]+]]"
|
|
+// CHECK-64-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/x86_64-pc-msys/10/../../../../include/c++/10"
|
|
+// CHECK-64-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/x86_64-pc-msys/10/../../../../include/x86_64-pc-msys/c++/10"
|
|
+// CHECK-64-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/x86_64-pc-msys/10/../../../../include/c++/10/backward"
|
|
+// CHECK-64-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/local/include"
|
|
+// CHECK-64-SAME: {{^}} "-internal-isystem" "[[RESOURCE]]{{(/|\\\\)}}include"
|
|
+// CHECK-64-SAME: {{^}} "-internal-isystem" "[[SYSROOT]]/usr/lib/gcc/x86_64-pc-msys/10/../../../../x86_64-pc-msys/include"
|
|
+// CHECK-64-SAME: "-internal-externc-isystem" "[[SYSROOT]]/include"
|
|
+// CHECK-64-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include"
|
|
+// CHECK-64-SAME: {{^}} "-internal-externc-isystem" "[[SYSROOT]]/usr/include/w32api"
|
|
+// CHECK-64-SAME: "-femulated-tls"
|
|
+// CHECK-64-SAME: "-exception-model=seh"
|
|
+// CHECK-64: "{{.*}}gcc{{(\.exe)?}}"
|
|
+// CHECK-64-SAME: "-m64"
|
|
+
|
|
+// RUN: %clang -### %s --target=x86_64-pc-cygwin --sysroot=%S/Inputs/basic_cygwin_tree \
|
|
+// RUN: --stdlib=platform -static 2>&1 | FileCheck --check-prefix=CHECK-64-STATIC %s
|
|
+// CHECK-64-STATIC: "-cc1" "-triple" "x86_64-pc-windows-cygnus"
|
|
+// CHECK-64-STATIC-SAME: "-static-define"
|
|
+// CHECK-64-STATIC: "{{.*}}gcc{{(\.exe)?}}"
|
|
+// CHECK-64-STATIC-SAME: "-static"
|
|
+
|
|
+// RUN: %clang -### %s --target=x86_64-pc-cygwin --sysroot=%S/Inputs/basic_cygwin_tree \
|
|
+// RUN: -shared 2>&1 | FileCheck --check-prefix=CHECK-64-SHARED %s
|
|
+// CHECK-64-SHARED: "{{.*}}gcc{{(\.exe)?}}"
|
|
+// CHECK-64-SHARED-SAME: "-shared"
|
|
+
|
|
+// RUN: %clang -### -o %t %s 2>&1 -no-integrated-as -fuse-ld=ld \
|
|
+// RUN: --gcc-toolchain=%S/Inputs/basic_cross_cygwin_tree/usr \
|
|
+// RUN: --target=x86_64-pc-cygwin \
|
|
+// RUN: | FileCheck --check-prefix=CHECK-64-CROSS %s
|
|
+// CHECK-64-CROSS: "-cc1" "-triple" "x86_64-pc-windows-cygnus"
|
|
+// CHECK-64-CROSS: "{{.*}}/Inputs/basic_cross_cygwin_tree/usr/lib/gcc/x86_64-pc-cygwin/10/../../../../x86_64-pc-cygwin/bin{{(/|\\\\)}}as" "--64"
|
|
--
|
|
2.50.1.windows.1
|
|
|