[clang] [Cygwin] Cygwin driver (PR #74933)
https://github.com/xu-chiheng closed https://github.com/llvm/llvm-project/pull/74933 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Cygwin] Cygwin driver (PR #74933)
https://github.com/xu-chiheng edited https://github.com/llvm/llvm-project/pull/74933 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Cygwin] Cygwin driver (PR #74933)
https://github.com/xu-chiheng edited https://github.com/llvm/llvm-project/pull/74933 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Cygwin] Cygwin driver (PR #74933)
https://github.com/xu-chiheng updated https://github.com/llvm/llvm-project/pull/74933 From 40ec69c72a4951953ce96c1ab30ec17a07f430cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=8C=81=E6=81=92=20Xu=20Chiheng?= Date: Sat, 9 Dec 2023 21:51:29 +0800 Subject: [PATCH 1/7] 1 --- clang/lib/Driver/CMakeLists.txt| 1 + clang/lib/Driver/Driver.cpp| 4 + clang/lib/Driver/ToolChains/Cygwin.cpp | 731 + clang/lib/Driver/ToolChains/Cygwin.h | 125 + clang/lib/Lex/InitHeaderSearch.cpp | 30 +- 5 files changed, 865 insertions(+), 26 deletions(-) create mode 100644 clang/lib/Driver/ToolChains/Cygwin.cpp create mode 100644 clang/lib/Driver/ToolChains/Cygwin.h diff --git a/clang/lib/Driver/CMakeLists.txt b/clang/lib/Driver/CMakeLists.txt index 58427e3f83c420..7ab5a1ee963515 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 9b2f2a37480983..4d08c9a14c9bcf 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" @@ -6269,6 +6270,9 @@ const ToolChain &Driver::getToolChain(const ArgList &Args, else TC = std::make_unique(*this, Target, Args); break; + case llvm::Triple::Cygnus: +TC = std::make_unique(*this, Target, Args); +break; case llvm::Triple::GNU: TC = std::make_unique(*this, Target, Args); break; diff --git a/clang/lib/Driver/ToolChains/Cygwin.cpp b/clang/lib/Driver/ToolChains/Cygwin.cpp new file mode 100644 index 00..8aa9cf5c8ec034 --- /dev/null +++ b/clang/lib/Driver/ToolChains/Cygwin.cpp @@ -0,0 +1,731 @@ +//===--- Cygwin.cpp - CygwinToolChain Implementation ===// +// +// 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/Compilation.h" +#include "clang/Driver/Driver.h" +#include "clang/Driver/DriverDiagnostic.h" +#include "clang/Driver/InputInfo.h" +#include "clang/Driver/Options.h" +#include "clang/Driver/SanitizerArgs.h" +#include "llvm/Option/ArgList.h" +#include "llvm/Support/FileSystem.h" +#include "llvm/Support/Path.h" +#include "llvm/Support/VirtualFileSystem.h" +#include + +using namespace clang::diag; +using namespace clang::driver; +using namespace clang; +using namespace llvm::opt; + +/// Cygwin Tools +void tools::Cygwin::Assembler::ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &Args, + const char *LinkingOutput) const { + claimNoWarnArgs(Args); + ArgStringList CmdArgs; + + if (getToolChain().getArch() == llvm::Triple::x86) { +CmdArgs.push_back("--32"); + } else if (getToolChain().getArch() == llvm::Triple::x86_64) { +CmdArgs.push_back("--64"); + } + + Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, options::OPT_Xassembler); + + CmdArgs.push_back("-o"); + CmdArgs.push_back(Output.getFilename()); + + for (const auto &II : Inputs) +CmdArgs.push_back(II.getFilename()); + + const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath("as")); + C.addCommand(std::make_unique(JA, *this, ResponseFileSupport::None(), + Exec, CmdArgs, Inputs, Output)); + + if (Args.hasArg(options::OPT_gsplit_dwarf)) +SplitDebugInfo(getToolChain(), C, *this, JA, Args, Output, + SplitDebugName(JA, Args, Inputs[0], Output)); +} + +void tools::Cygwin::Linker::AddLibGCC(const ArgList &Args, + ArgStringList &CmdArgs) const { + // Make use of compiler-rt if --rtlib option is used + ToolChain::RuntimeLibType RLT = getToolChain().GetRuntimeLibType(Args); + if (RLT == ToolChain::RLT_Libgcc) { +bool Static = Args.hasArg(options::OPT_static_libgcc) || + Args.hasArg(options::OPT_static); +bool Shared = Args.hasArg(options::OPT_shared); +bool CXX = getToolChain().getDriver().CCCIsCXX(); + +if (Static || (!CXX && !S
[clang] [Cygwin] Cygwin driver (PR #74933)
=?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng,=?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng, =?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng,=?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng, =?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng,=?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng Message-ID: In-Reply-To: brad0 wrote: You probably need to rebase this. https://github.com/llvm/llvm-project/pull/74933 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Cygwin] Cygwin driver (PR #74933)
xu-chiheng wrote: > @carlo-bramini has spent some effort on using Clang in Cygwin environments > before, so as far as I know, it does work in general from before. So this > change, which adds an entirely new driver for Cygwin environments, would need > to be explained why it does that (I don't disagree, it's probably the right > thing to do in general), how things worked before and how this changes > things. And I would like to have @carlo-bramini's eye on this (and all the > related Cygwin patches from @xu-chiheng). > > And changes like this need some general tests, have a look at > `clang/test/Driver` for how other drivers are tested. I'm not very familiar with test. I just use my build scripts to build LLVM and GCC on Cygwin and MinGW. https://github.com/llvm/llvm-project/pull/74933 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Cygwin] Cygwin driver (PR #74933)
xu-chiheng wrote: > > > > The Cygwin driver is basically the same as MinGW driver with minor > > difference. > > Right. What are the actual observable differences to what was executed > before? (I presume this before used the `Generic_GCC` toolchain?) Also, I > wonder if it would make sense to share the MinGW driver code with Cygwin, and > just add exceptions where necessary, instead of duplicating it into a > separate one? Maybe, but perhaps not. The original Generic_GCC driver can be built on Cygwin, but does not work on non trivial cases. Even Cygwin's old outdated llvm patches use a driver modified from MinGW driver . https://cygwin.com/git-cygwin-packages/ https://cygwin.com/git-cygwin-packages/?p=git/cygwin-packages/clang.git;a=summary git://cygwin.com/git/cygwin-packages/clang.git https://cygwin.com/git-cygwin-packages/?p=git/cygwin-packages/llvm.git;a=summary git://cygwin.com/git/cygwin-packages/llvm.git Combining Cygwin and MinGW driver is simple. But the combined code may be ugly. https://github.com/llvm/llvm-project/pull/74933 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Cygwin] Cygwin driver (PR #74933)
mstorsjo wrote: > > @carlo-bramini has spent some effort on using Clang in Cygwin environments > > before, so as far as I know, it does work in general from before. So this > > change, which adds an entirely new driver for Cygwin environments, would > > need to be explained why it does that (I don't disagree, it's probably the > > right thing to do in general), how things worked before and how this > > changes things. And I would like to have @carlo-bramini's eye on this (and > > all the related Cygwin patches from @xu-chiheng). > > And changes like this need some general tests, have a look at > > `clang/test/Driver` for how other drivers are tested. > > The Cygwin driver is basically the same as MinGW driver with minor difference. Right. What are the actual observable differences to what was executed before? (I presume this before used the `Generic_GCC` toolchain?) Also, I wonder if it would make sense to share the MinGW driver code with Cygwin, and just add exceptions where necessary, instead of duplicating it into a separate one? Maybe, but perhaps not. https://github.com/llvm/llvm-project/pull/74933 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Cygwin] Cygwin driver (PR #74933)
https://github.com/xu-chiheng updated https://github.com/llvm/llvm-project/pull/74933 From daa6702f698724655b91c4fa52272c09924d2d83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=8C=81=E6=81=92=20Xu=20Chiheng?= Date: Sat, 9 Dec 2023 21:51:29 +0800 Subject: [PATCH 1/7] 1 --- clang/lib/Driver/CMakeLists.txt| 1 + clang/lib/Driver/Driver.cpp| 4 + clang/lib/Driver/ToolChains/Cygwin.cpp | 731 + clang/lib/Driver/ToolChains/Cygwin.h | 125 + clang/lib/Lex/InitHeaderSearch.cpp | 30 +- 5 files changed, 865 insertions(+), 26 deletions(-) create mode 100644 clang/lib/Driver/ToolChains/Cygwin.cpp create mode 100644 clang/lib/Driver/ToolChains/Cygwin.h diff --git a/clang/lib/Driver/CMakeLists.txt b/clang/lib/Driver/CMakeLists.txt index 58427e3f83c420..7ab5a1ee963515 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 e241706b9082ee..b6f3da3a006f4e 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" @@ -6263,6 +6264,9 @@ const ToolChain &Driver::getToolChain(const ArgList &Args, else TC = std::make_unique(*this, Target, Args); break; + case llvm::Triple::Cygnus: +TC = std::make_unique(*this, Target, Args); +break; case llvm::Triple::GNU: TC = std::make_unique(*this, Target, Args); break; diff --git a/clang/lib/Driver/ToolChains/Cygwin.cpp b/clang/lib/Driver/ToolChains/Cygwin.cpp new file mode 100644 index 00..8aa9cf5c8ec034 --- /dev/null +++ b/clang/lib/Driver/ToolChains/Cygwin.cpp @@ -0,0 +1,731 @@ +//===--- Cygwin.cpp - CygwinToolChain Implementation ===// +// +// 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/Compilation.h" +#include "clang/Driver/Driver.h" +#include "clang/Driver/DriverDiagnostic.h" +#include "clang/Driver/InputInfo.h" +#include "clang/Driver/Options.h" +#include "clang/Driver/SanitizerArgs.h" +#include "llvm/Option/ArgList.h" +#include "llvm/Support/FileSystem.h" +#include "llvm/Support/Path.h" +#include "llvm/Support/VirtualFileSystem.h" +#include + +using namespace clang::diag; +using namespace clang::driver; +using namespace clang; +using namespace llvm::opt; + +/// Cygwin Tools +void tools::Cygwin::Assembler::ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &Args, + const char *LinkingOutput) const { + claimNoWarnArgs(Args); + ArgStringList CmdArgs; + + if (getToolChain().getArch() == llvm::Triple::x86) { +CmdArgs.push_back("--32"); + } else if (getToolChain().getArch() == llvm::Triple::x86_64) { +CmdArgs.push_back("--64"); + } + + Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, options::OPT_Xassembler); + + CmdArgs.push_back("-o"); + CmdArgs.push_back(Output.getFilename()); + + for (const auto &II : Inputs) +CmdArgs.push_back(II.getFilename()); + + const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath("as")); + C.addCommand(std::make_unique(JA, *this, ResponseFileSupport::None(), + Exec, CmdArgs, Inputs, Output)); + + if (Args.hasArg(options::OPT_gsplit_dwarf)) +SplitDebugInfo(getToolChain(), C, *this, JA, Args, Output, + SplitDebugName(JA, Args, Inputs[0], Output)); +} + +void tools::Cygwin::Linker::AddLibGCC(const ArgList &Args, + ArgStringList &CmdArgs) const { + // Make use of compiler-rt if --rtlib option is used + ToolChain::RuntimeLibType RLT = getToolChain().GetRuntimeLibType(Args); + if (RLT == ToolChain::RLT_Libgcc) { +bool Static = Args.hasArg(options::OPT_static_libgcc) || + Args.hasArg(options::OPT_static); +bool Shared = Args.hasArg(options::OPT_shared); +bool CXX = getToolChain().getDriver().CCCIsCXX(); + +if (Static || (!CXX && !S
[clang] [Cygwin] Cygwin driver (PR #74933)
xu-chiheng wrote: > @carlo-bramini has spent some effort on using Clang in Cygwin environments > before, so as far as I know, it does work in general from before. So this > change, which adds an entirely new driver for Cygwin environments, would need > to be explained why it does that (I don't disagree, it's probably the right > thing to do in general), how things worked before and how this changes > things. And I would like to have @carlo-bramini's eye on this (and all the > related Cygwin patches from @xu-chiheng). > > And changes like this need some general tests, have a look at > `clang/test/Driver` for how other drivers are tested. I have build scripts and patches at: https://github.com/xu-chiheng/Note https://github.com/llvm/llvm-project/pull/74933 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Cygwin] Cygwin driver (PR #74933)
xu-chiheng wrote: > @carlo-bramini has spent some effort on using Clang in Cygwin environments > before, so as far as I know, it does work in general from before. So this > change, which adds an entirely new driver for Cygwin environments, would need > to be explained why it does that (I don't disagree, it's probably the right > thing to do in general), how things worked before and how this changes > things. And I would like to have @carlo-bramini's eye on this (and all the > related Cygwin patches from @xu-chiheng). > > And changes like this need some general tests, have a look at > `clang/test/Driver` for how other drivers are tested. The Cygwin driver is basically the same as MinGW driver with minor difference. https://github.com/llvm/llvm-project/pull/74933 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Cygwin] Cygwin driver (PR #74933)
mstorsjo wrote: @carlo-bramini has spent some effort on using Clang in Cygwin environments before, so as far as I know, it does work in general from before. So this change, which adds an entirely new driver for Cygwin environments, would need to be explained why it does that (I don't disagree, it's probably the right thing to do in general), how things worked before and how this changes things. And I would like to have @carlo-bramini's eye on this (and all the related Cygwin patches from @xu-chiheng). And changes like this need some general tests, have a look at `clang/test/Driver` for how other drivers are tested. https://github.com/llvm/llvm-project/pull/74933 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Cygwin] Cygwin driver (PR #74933)
https://github.com/xu-chiheng updated https://github.com/llvm/llvm-project/pull/74933 From daa6702f698724655b91c4fa52272c09924d2d83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=8C=81=E6=81=92=20Xu=20Chiheng?= Date: Sat, 9 Dec 2023 21:51:29 +0800 Subject: [PATCH 1/6] 1 --- clang/lib/Driver/CMakeLists.txt| 1 + clang/lib/Driver/Driver.cpp| 4 + clang/lib/Driver/ToolChains/Cygwin.cpp | 731 + clang/lib/Driver/ToolChains/Cygwin.h | 125 + clang/lib/Lex/InitHeaderSearch.cpp | 30 +- 5 files changed, 865 insertions(+), 26 deletions(-) create mode 100644 clang/lib/Driver/ToolChains/Cygwin.cpp create mode 100644 clang/lib/Driver/ToolChains/Cygwin.h diff --git a/clang/lib/Driver/CMakeLists.txt b/clang/lib/Driver/CMakeLists.txt index 58427e3f83c420..7ab5a1ee963515 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 e241706b9082ee..b6f3da3a006f4e 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" @@ -6263,6 +6264,9 @@ const ToolChain &Driver::getToolChain(const ArgList &Args, else TC = std::make_unique(*this, Target, Args); break; + case llvm::Triple::Cygnus: +TC = std::make_unique(*this, Target, Args); +break; case llvm::Triple::GNU: TC = std::make_unique(*this, Target, Args); break; diff --git a/clang/lib/Driver/ToolChains/Cygwin.cpp b/clang/lib/Driver/ToolChains/Cygwin.cpp new file mode 100644 index 00..8aa9cf5c8ec034 --- /dev/null +++ b/clang/lib/Driver/ToolChains/Cygwin.cpp @@ -0,0 +1,731 @@ +//===--- Cygwin.cpp - CygwinToolChain Implementation ===// +// +// 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/Compilation.h" +#include "clang/Driver/Driver.h" +#include "clang/Driver/DriverDiagnostic.h" +#include "clang/Driver/InputInfo.h" +#include "clang/Driver/Options.h" +#include "clang/Driver/SanitizerArgs.h" +#include "llvm/Option/ArgList.h" +#include "llvm/Support/FileSystem.h" +#include "llvm/Support/Path.h" +#include "llvm/Support/VirtualFileSystem.h" +#include + +using namespace clang::diag; +using namespace clang::driver; +using namespace clang; +using namespace llvm::opt; + +/// Cygwin Tools +void tools::Cygwin::Assembler::ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &Args, + const char *LinkingOutput) const { + claimNoWarnArgs(Args); + ArgStringList CmdArgs; + + if (getToolChain().getArch() == llvm::Triple::x86) { +CmdArgs.push_back("--32"); + } else if (getToolChain().getArch() == llvm::Triple::x86_64) { +CmdArgs.push_back("--64"); + } + + Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, options::OPT_Xassembler); + + CmdArgs.push_back("-o"); + CmdArgs.push_back(Output.getFilename()); + + for (const auto &II : Inputs) +CmdArgs.push_back(II.getFilename()); + + const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath("as")); + C.addCommand(std::make_unique(JA, *this, ResponseFileSupport::None(), + Exec, CmdArgs, Inputs, Output)); + + if (Args.hasArg(options::OPT_gsplit_dwarf)) +SplitDebugInfo(getToolChain(), C, *this, JA, Args, Output, + SplitDebugName(JA, Args, Inputs[0], Output)); +} + +void tools::Cygwin::Linker::AddLibGCC(const ArgList &Args, + ArgStringList &CmdArgs) const { + // Make use of compiler-rt if --rtlib option is used + ToolChain::RuntimeLibType RLT = getToolChain().GetRuntimeLibType(Args); + if (RLT == ToolChain::RLT_Libgcc) { +bool Static = Args.hasArg(options::OPT_static_libgcc) || + Args.hasArg(options::OPT_static); +bool Shared = Args.hasArg(options::OPT_shared); +bool CXX = getToolChain().getDriver().CCCIsCXX(); + +if (Static || (!CXX && !S
[clang] [Cygwin] Cygwin driver (PR #74933)
=?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng,=?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng, =?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng,=?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng Message-ID: In-Reply-To: @@ -242,14 +240,7 @@ void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple, 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; -} +llvm_unreachable("Include management is handled in the driver."); brad0 wrote: Just remove the switch statement all together. https://github.com/llvm/llvm-project/pull/74933 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Cygwin] Cygwin driver (PR #74933)
=?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng,=?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng, =?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng,=?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng Message-ID: In-Reply-To: @@ -268,17 +259,7 @@ void InitHeaderSearch::AddDefaultCPlusPlusIncludePaths( 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; -} +llvm_unreachable("Include management is handled in the driver."); brad0 wrote: You should be able to remove AddDefaultCPlusPlusIncludePaths(). https://github.com/llvm/llvm-project/pull/74933 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Cygwin] Cygwin driver (PR #74933)
=?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng,=?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng, =?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng,=?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng Message-ID: In-Reply-To: @@ -205,9 +205,7 @@ void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple, if (HSOpts.UseStandardSystemIncludes) { switch (os) { case llvm::Triple::Win32: - if (triple.getEnvironment() != llvm::Triple::Cygnus) -break; - [[fallthrough]]; brad0 wrote: Just remove the Win32 switch case. https://github.com/llvm/llvm-project/pull/74933 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Cygwin] Cygwin driver (PR #74933)
=?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng,=?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng, =?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng,=?utf-8?b?5b6Q5oyB5oGS?= Xu Chiheng Message-ID: In-Reply-To: @@ -310,10 +291,7 @@ bool InitHeaderSearch::ShouldAddDefaultIncludePaths( return false; case llvm::Triple::Win32: -if (triple.getEnvironment() != llvm::Triple::Cygnus || -triple.isOSBinFormatMachO()) - return false; -break; brad0 wrote: Add Win32 to the list just above this. https://github.com/llvm/llvm-project/pull/74933 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Cygwin] Cygwin driver (PR #74933)
https://github.com/xu-chiheng updated https://github.com/llvm/llvm-project/pull/74933 From daa6702f698724655b91c4fa52272c09924d2d83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=8C=81=E6=81=92=20Xu=20Chiheng?= Date: Sat, 9 Dec 2023 21:51:29 +0800 Subject: [PATCH 1/5] 1 --- clang/lib/Driver/CMakeLists.txt| 1 + clang/lib/Driver/Driver.cpp| 4 + clang/lib/Driver/ToolChains/Cygwin.cpp | 731 + clang/lib/Driver/ToolChains/Cygwin.h | 125 + clang/lib/Lex/InitHeaderSearch.cpp | 30 +- 5 files changed, 865 insertions(+), 26 deletions(-) create mode 100644 clang/lib/Driver/ToolChains/Cygwin.cpp create mode 100644 clang/lib/Driver/ToolChains/Cygwin.h diff --git a/clang/lib/Driver/CMakeLists.txt b/clang/lib/Driver/CMakeLists.txt index 58427e3f83c420..7ab5a1ee963515 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 e241706b9082ee..b6f3da3a006f4e 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" @@ -6263,6 +6264,9 @@ const ToolChain &Driver::getToolChain(const ArgList &Args, else TC = std::make_unique(*this, Target, Args); break; + case llvm::Triple::Cygnus: +TC = std::make_unique(*this, Target, Args); +break; case llvm::Triple::GNU: TC = std::make_unique(*this, Target, Args); break; diff --git a/clang/lib/Driver/ToolChains/Cygwin.cpp b/clang/lib/Driver/ToolChains/Cygwin.cpp new file mode 100644 index 00..8aa9cf5c8ec034 --- /dev/null +++ b/clang/lib/Driver/ToolChains/Cygwin.cpp @@ -0,0 +1,731 @@ +//===--- Cygwin.cpp - CygwinToolChain Implementation ===// +// +// 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/Compilation.h" +#include "clang/Driver/Driver.h" +#include "clang/Driver/DriverDiagnostic.h" +#include "clang/Driver/InputInfo.h" +#include "clang/Driver/Options.h" +#include "clang/Driver/SanitizerArgs.h" +#include "llvm/Option/ArgList.h" +#include "llvm/Support/FileSystem.h" +#include "llvm/Support/Path.h" +#include "llvm/Support/VirtualFileSystem.h" +#include + +using namespace clang::diag; +using namespace clang::driver; +using namespace clang; +using namespace llvm::opt; + +/// Cygwin Tools +void tools::Cygwin::Assembler::ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &Args, + const char *LinkingOutput) const { + claimNoWarnArgs(Args); + ArgStringList CmdArgs; + + if (getToolChain().getArch() == llvm::Triple::x86) { +CmdArgs.push_back("--32"); + } else if (getToolChain().getArch() == llvm::Triple::x86_64) { +CmdArgs.push_back("--64"); + } + + Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, options::OPT_Xassembler); + + CmdArgs.push_back("-o"); + CmdArgs.push_back(Output.getFilename()); + + for (const auto &II : Inputs) +CmdArgs.push_back(II.getFilename()); + + const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath("as")); + C.addCommand(std::make_unique(JA, *this, ResponseFileSupport::None(), + Exec, CmdArgs, Inputs, Output)); + + if (Args.hasArg(options::OPT_gsplit_dwarf)) +SplitDebugInfo(getToolChain(), C, *this, JA, Args, Output, + SplitDebugName(JA, Args, Inputs[0], Output)); +} + +void tools::Cygwin::Linker::AddLibGCC(const ArgList &Args, + ArgStringList &CmdArgs) const { + // Make use of compiler-rt if --rtlib option is used + ToolChain::RuntimeLibType RLT = getToolChain().GetRuntimeLibType(Args); + if (RLT == ToolChain::RLT_Libgcc) { +bool Static = Args.hasArg(options::OPT_static_libgcc) || + Args.hasArg(options::OPT_static); +bool Shared = Args.hasArg(options::OPT_shared); +bool CXX = getToolChain().getDriver().CCCIsCXX(); + +if (Static || (!CXX && !S
[clang] [Cygwin] Cygwin driver (PR #74933)
https://github.com/xu-chiheng updated https://github.com/llvm/llvm-project/pull/74933 From daa6702f698724655b91c4fa52272c09924d2d83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=8C=81=E6=81=92=20Xu=20Chiheng?= Date: Sat, 9 Dec 2023 21:51:29 +0800 Subject: [PATCH 1/3] 1 --- clang/lib/Driver/CMakeLists.txt| 1 + clang/lib/Driver/Driver.cpp| 4 + clang/lib/Driver/ToolChains/Cygwin.cpp | 731 + clang/lib/Driver/ToolChains/Cygwin.h | 125 + clang/lib/Lex/InitHeaderSearch.cpp | 30 +- 5 files changed, 865 insertions(+), 26 deletions(-) create mode 100644 clang/lib/Driver/ToolChains/Cygwin.cpp create mode 100644 clang/lib/Driver/ToolChains/Cygwin.h diff --git a/clang/lib/Driver/CMakeLists.txt b/clang/lib/Driver/CMakeLists.txt index 58427e3f83c42..7ab5a1ee96351 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 e241706b9082e..b6f3da3a006f4 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" @@ -6263,6 +6264,9 @@ const ToolChain &Driver::getToolChain(const ArgList &Args, else TC = std::make_unique(*this, Target, Args); break; + case llvm::Triple::Cygnus: +TC = std::make_unique(*this, Target, Args); +break; case llvm::Triple::GNU: TC = std::make_unique(*this, Target, Args); break; diff --git a/clang/lib/Driver/ToolChains/Cygwin.cpp b/clang/lib/Driver/ToolChains/Cygwin.cpp new file mode 100644 index 0..8aa9cf5c8ec03 --- /dev/null +++ b/clang/lib/Driver/ToolChains/Cygwin.cpp @@ -0,0 +1,731 @@ +//===--- Cygwin.cpp - CygwinToolChain Implementation ===// +// +// 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/Compilation.h" +#include "clang/Driver/Driver.h" +#include "clang/Driver/DriverDiagnostic.h" +#include "clang/Driver/InputInfo.h" +#include "clang/Driver/Options.h" +#include "clang/Driver/SanitizerArgs.h" +#include "llvm/Option/ArgList.h" +#include "llvm/Support/FileSystem.h" +#include "llvm/Support/Path.h" +#include "llvm/Support/VirtualFileSystem.h" +#include + +using namespace clang::diag; +using namespace clang::driver; +using namespace clang; +using namespace llvm::opt; + +/// Cygwin Tools +void tools::Cygwin::Assembler::ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &Args, + const char *LinkingOutput) const { + claimNoWarnArgs(Args); + ArgStringList CmdArgs; + + if (getToolChain().getArch() == llvm::Triple::x86) { +CmdArgs.push_back("--32"); + } else if (getToolChain().getArch() == llvm::Triple::x86_64) { +CmdArgs.push_back("--64"); + } + + Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, options::OPT_Xassembler); + + CmdArgs.push_back("-o"); + CmdArgs.push_back(Output.getFilename()); + + for (const auto &II : Inputs) +CmdArgs.push_back(II.getFilename()); + + const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath("as")); + C.addCommand(std::make_unique(JA, *this, ResponseFileSupport::None(), + Exec, CmdArgs, Inputs, Output)); + + if (Args.hasArg(options::OPT_gsplit_dwarf)) +SplitDebugInfo(getToolChain(), C, *this, JA, Args, Output, + SplitDebugName(JA, Args, Inputs[0], Output)); +} + +void tools::Cygwin::Linker::AddLibGCC(const ArgList &Args, + ArgStringList &CmdArgs) const { + // Make use of compiler-rt if --rtlib option is used + ToolChain::RuntimeLibType RLT = getToolChain().GetRuntimeLibType(Args); + if (RLT == ToolChain::RLT_Libgcc) { +bool Static = Args.hasArg(options::OPT_static_libgcc) || + Args.hasArg(options::OPT_static); +bool Shared = Args.hasArg(options::OPT_shared); +bool CXX = getToolChain().getDriver().CCCIsCXX(); + +if (Static || (!CXX && !Shared)
[clang] [Cygwin] Cygwin driver (PR #74933)
https://github.com/xu-chiheng updated https://github.com/llvm/llvm-project/pull/74933 From daa6702f698724655b91c4fa52272c09924d2d83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=8C=81=E6=81=92=20Xu=20Chiheng?= Date: Sat, 9 Dec 2023 21:51:29 +0800 Subject: [PATCH 1/2] 1 --- clang/lib/Driver/CMakeLists.txt| 1 + clang/lib/Driver/Driver.cpp| 4 + clang/lib/Driver/ToolChains/Cygwin.cpp | 731 + clang/lib/Driver/ToolChains/Cygwin.h | 125 + clang/lib/Lex/InitHeaderSearch.cpp | 30 +- 5 files changed, 865 insertions(+), 26 deletions(-) create mode 100644 clang/lib/Driver/ToolChains/Cygwin.cpp create mode 100644 clang/lib/Driver/ToolChains/Cygwin.h diff --git a/clang/lib/Driver/CMakeLists.txt b/clang/lib/Driver/CMakeLists.txt index 58427e3f83c420..7ab5a1ee963515 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 e241706b9082ee..b6f3da3a006f4e 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" @@ -6263,6 +6264,9 @@ const ToolChain &Driver::getToolChain(const ArgList &Args, else TC = std::make_unique(*this, Target, Args); break; + case llvm::Triple::Cygnus: +TC = std::make_unique(*this, Target, Args); +break; case llvm::Triple::GNU: TC = std::make_unique(*this, Target, Args); break; diff --git a/clang/lib/Driver/ToolChains/Cygwin.cpp b/clang/lib/Driver/ToolChains/Cygwin.cpp new file mode 100644 index 00..8aa9cf5c8ec034 --- /dev/null +++ b/clang/lib/Driver/ToolChains/Cygwin.cpp @@ -0,0 +1,731 @@ +//===--- Cygwin.cpp - CygwinToolChain Implementation ===// +// +// 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/Compilation.h" +#include "clang/Driver/Driver.h" +#include "clang/Driver/DriverDiagnostic.h" +#include "clang/Driver/InputInfo.h" +#include "clang/Driver/Options.h" +#include "clang/Driver/SanitizerArgs.h" +#include "llvm/Option/ArgList.h" +#include "llvm/Support/FileSystem.h" +#include "llvm/Support/Path.h" +#include "llvm/Support/VirtualFileSystem.h" +#include + +using namespace clang::diag; +using namespace clang::driver; +using namespace clang; +using namespace llvm::opt; + +/// Cygwin Tools +void tools::Cygwin::Assembler::ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &Args, + const char *LinkingOutput) const { + claimNoWarnArgs(Args); + ArgStringList CmdArgs; + + if (getToolChain().getArch() == llvm::Triple::x86) { +CmdArgs.push_back("--32"); + } else if (getToolChain().getArch() == llvm::Triple::x86_64) { +CmdArgs.push_back("--64"); + } + + Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, options::OPT_Xassembler); + + CmdArgs.push_back("-o"); + CmdArgs.push_back(Output.getFilename()); + + for (const auto &II : Inputs) +CmdArgs.push_back(II.getFilename()); + + const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath("as")); + C.addCommand(std::make_unique(JA, *this, ResponseFileSupport::None(), + Exec, CmdArgs, Inputs, Output)); + + if (Args.hasArg(options::OPT_gsplit_dwarf)) +SplitDebugInfo(getToolChain(), C, *this, JA, Args, Output, + SplitDebugName(JA, Args, Inputs[0], Output)); +} + +void tools::Cygwin::Linker::AddLibGCC(const ArgList &Args, + ArgStringList &CmdArgs) const { + // Make use of compiler-rt if --rtlib option is used + ToolChain::RuntimeLibType RLT = getToolChain().GetRuntimeLibType(Args); + if (RLT == ToolChain::RLT_Libgcc) { +bool Static = Args.hasArg(options::OPT_static_libgcc) || + Args.hasArg(options::OPT_static); +bool Shared = Args.hasArg(options::OPT_shared); +bool CXX = getToolChain().getDriver().CCCIsCXX(); + +if (Static || (!CXX && !S
[clang] [Cygwin] Cygwin driver (PR #74933)
https://github.com/xu-chiheng updated https://github.com/llvm/llvm-project/pull/74933 From daa6702f698724655b91c4fa52272c09924d2d83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=8C=81=E6=81=92=20Xu=20Chiheng?= Date: Sat, 9 Dec 2023 21:51:29 +0800 Subject: [PATCH] 1 --- clang/lib/Driver/CMakeLists.txt| 1 + clang/lib/Driver/Driver.cpp| 4 + clang/lib/Driver/ToolChains/Cygwin.cpp | 731 + clang/lib/Driver/ToolChains/Cygwin.h | 125 + clang/lib/Lex/InitHeaderSearch.cpp | 30 +- 5 files changed, 865 insertions(+), 26 deletions(-) create mode 100644 clang/lib/Driver/ToolChains/Cygwin.cpp create mode 100644 clang/lib/Driver/ToolChains/Cygwin.h diff --git a/clang/lib/Driver/CMakeLists.txt b/clang/lib/Driver/CMakeLists.txt index 58427e3f83c42..7ab5a1ee96351 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 e241706b9082e..b6f3da3a006f4 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" @@ -6263,6 +6264,9 @@ const ToolChain &Driver::getToolChain(const ArgList &Args, else TC = std::make_unique(*this, Target, Args); break; + case llvm::Triple::Cygnus: +TC = std::make_unique(*this, Target, Args); +break; case llvm::Triple::GNU: TC = std::make_unique(*this, Target, Args); break; diff --git a/clang/lib/Driver/ToolChains/Cygwin.cpp b/clang/lib/Driver/ToolChains/Cygwin.cpp new file mode 100644 index 0..8aa9cf5c8ec03 --- /dev/null +++ b/clang/lib/Driver/ToolChains/Cygwin.cpp @@ -0,0 +1,731 @@ +//===--- Cygwin.cpp - CygwinToolChain Implementation ===// +// +// 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/Compilation.h" +#include "clang/Driver/Driver.h" +#include "clang/Driver/DriverDiagnostic.h" +#include "clang/Driver/InputInfo.h" +#include "clang/Driver/Options.h" +#include "clang/Driver/SanitizerArgs.h" +#include "llvm/Option/ArgList.h" +#include "llvm/Support/FileSystem.h" +#include "llvm/Support/Path.h" +#include "llvm/Support/VirtualFileSystem.h" +#include + +using namespace clang::diag; +using namespace clang::driver; +using namespace clang; +using namespace llvm::opt; + +/// Cygwin Tools +void tools::Cygwin::Assembler::ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &Args, + const char *LinkingOutput) const { + claimNoWarnArgs(Args); + ArgStringList CmdArgs; + + if (getToolChain().getArch() == llvm::Triple::x86) { +CmdArgs.push_back("--32"); + } else if (getToolChain().getArch() == llvm::Triple::x86_64) { +CmdArgs.push_back("--64"); + } + + Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, options::OPT_Xassembler); + + CmdArgs.push_back("-o"); + CmdArgs.push_back(Output.getFilename()); + + for (const auto &II : Inputs) +CmdArgs.push_back(II.getFilename()); + + const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath("as")); + C.addCommand(std::make_unique(JA, *this, ResponseFileSupport::None(), + Exec, CmdArgs, Inputs, Output)); + + if (Args.hasArg(options::OPT_gsplit_dwarf)) +SplitDebugInfo(getToolChain(), C, *this, JA, Args, Output, + SplitDebugName(JA, Args, Inputs[0], Output)); +} + +void tools::Cygwin::Linker::AddLibGCC(const ArgList &Args, + ArgStringList &CmdArgs) const { + // Make use of compiler-rt if --rtlib option is used + ToolChain::RuntimeLibType RLT = getToolChain().GetRuntimeLibType(Args); + if (RLT == ToolChain::RLT_Libgcc) { +bool Static = Args.hasArg(options::OPT_static_libgcc) || + Args.hasArg(options::OPT_static); +bool Shared = Args.hasArg(options::OPT_shared); +bool CXX = getToolChain().getDriver().CCCIsCXX(); + +if (Static || (!CXX && !Shared)) {
[clang] [Cygwin] Cygwin driver (PR #74933)
https://github.com/xu-chiheng updated https://github.com/llvm/llvm-project/pull/74933 From daa6702f698724655b91c4fa52272c09924d2d83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=8C=81=E6=81=92=20Xu=20Chiheng?= Date: Sat, 9 Dec 2023 21:51:29 +0800 Subject: [PATCH 1/2] 1 --- clang/lib/Driver/CMakeLists.txt| 1 + clang/lib/Driver/Driver.cpp| 4 + clang/lib/Driver/ToolChains/Cygwin.cpp | 731 + clang/lib/Driver/ToolChains/Cygwin.h | 125 + clang/lib/Lex/InitHeaderSearch.cpp | 30 +- 5 files changed, 865 insertions(+), 26 deletions(-) create mode 100644 clang/lib/Driver/ToolChains/Cygwin.cpp create mode 100644 clang/lib/Driver/ToolChains/Cygwin.h diff --git a/clang/lib/Driver/CMakeLists.txt b/clang/lib/Driver/CMakeLists.txt index 58427e3f83c42..7ab5a1ee96351 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 e241706b9082e..b6f3da3a006f4 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" @@ -6263,6 +6264,9 @@ const ToolChain &Driver::getToolChain(const ArgList &Args, else TC = std::make_unique(*this, Target, Args); break; + case llvm::Triple::Cygnus: +TC = std::make_unique(*this, Target, Args); +break; case llvm::Triple::GNU: TC = std::make_unique(*this, Target, Args); break; diff --git a/clang/lib/Driver/ToolChains/Cygwin.cpp b/clang/lib/Driver/ToolChains/Cygwin.cpp new file mode 100644 index 0..8aa9cf5c8ec03 --- /dev/null +++ b/clang/lib/Driver/ToolChains/Cygwin.cpp @@ -0,0 +1,731 @@ +//===--- Cygwin.cpp - CygwinToolChain Implementation ===// +// +// 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/Compilation.h" +#include "clang/Driver/Driver.h" +#include "clang/Driver/DriverDiagnostic.h" +#include "clang/Driver/InputInfo.h" +#include "clang/Driver/Options.h" +#include "clang/Driver/SanitizerArgs.h" +#include "llvm/Option/ArgList.h" +#include "llvm/Support/FileSystem.h" +#include "llvm/Support/Path.h" +#include "llvm/Support/VirtualFileSystem.h" +#include + +using namespace clang::diag; +using namespace clang::driver; +using namespace clang; +using namespace llvm::opt; + +/// Cygwin Tools +void tools::Cygwin::Assembler::ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &Args, + const char *LinkingOutput) const { + claimNoWarnArgs(Args); + ArgStringList CmdArgs; + + if (getToolChain().getArch() == llvm::Triple::x86) { +CmdArgs.push_back("--32"); + } else if (getToolChain().getArch() == llvm::Triple::x86_64) { +CmdArgs.push_back("--64"); + } + + Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, options::OPT_Xassembler); + + CmdArgs.push_back("-o"); + CmdArgs.push_back(Output.getFilename()); + + for (const auto &II : Inputs) +CmdArgs.push_back(II.getFilename()); + + const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath("as")); + C.addCommand(std::make_unique(JA, *this, ResponseFileSupport::None(), + Exec, CmdArgs, Inputs, Output)); + + if (Args.hasArg(options::OPT_gsplit_dwarf)) +SplitDebugInfo(getToolChain(), C, *this, JA, Args, Output, + SplitDebugName(JA, Args, Inputs[0], Output)); +} + +void tools::Cygwin::Linker::AddLibGCC(const ArgList &Args, + ArgStringList &CmdArgs) const { + // Make use of compiler-rt if --rtlib option is used + ToolChain::RuntimeLibType RLT = getToolChain().GetRuntimeLibType(Args); + if (RLT == ToolChain::RLT_Libgcc) { +bool Static = Args.hasArg(options::OPT_static_libgcc) || + Args.hasArg(options::OPT_static); +bool Shared = Args.hasArg(options::OPT_shared); +bool CXX = getToolChain().getDriver().CCCIsCXX(); + +if (Static || (!CXX && !Shared)
[clang] [Cygwin] Cygwin driver (PR #74933)
github-actions[bot] wrote: :warning: C/C++ code formatter, clang-format found issues in your code. :warning: You can test this locally with the following command: ``bash git-clang-format --diff 600462a2db7c044896122acfb347ce2d4d88271f daa6702f698724655b91c4fa52272c09924d2d83 -- clang/lib/Driver/ToolChains/Cygwin.cpp clang/lib/Driver/ToolChains/Cygwin.h clang/lib/Driver/Driver.cpp clang/lib/Lex/InitHeaderSearch.cpp `` View the diff from clang-format here. ``diff diff --git a/clang/lib/Driver/ToolChains/Cygwin.cpp b/clang/lib/Driver/ToolChains/Cygwin.cpp index 8aa9cf5c8e..b34ce6ff2e 100644 --- a/clang/lib/Driver/ToolChains/Cygwin.cpp +++ b/clang/lib/Driver/ToolChains/Cygwin.cpp @@ -1,4 +1,5 @@ -//===--- Cygwin.cpp - CygwinToolChain Implementation ===// +//===--- Cygwin.cpp - CygwinToolChain Implementation +//===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -28,10 +29,10 @@ using namespace llvm::opt; /// Cygwin Tools void tools::Cygwin::Assembler::ConstructJob(Compilation &C, const JobAction &JA, - const InputInfo &Output, - const InputInfoList &Inputs, - const ArgList &Args, - const char *LinkingOutput) const { +const InputInfo &Output, +const InputInfoList &Inputs, +const ArgList &Args, +const char *LinkingOutput) const { claimNoWarnArgs(Args); ArgStringList CmdArgs; @@ -59,7 +60,7 @@ void tools::Cygwin::Assembler::ConstructJob(Compilation &C, const JobAction &JA, } void tools::Cygwin::Linker::AddLibGCC(const ArgList &Args, - ArgStringList &CmdArgs) const { + ArgStringList &CmdArgs) const { // Make use of compiler-rt if --rtlib option is used ToolChain::RuntimeLibType RLT = getToolChain().GetRuntimeLibType(Args); if (RLT == ToolChain::RLT_Libgcc) { @@ -83,10 +84,10 @@ void tools::Cygwin::Linker::AddLibGCC(const ArgList &Args, } void tools::Cygwin::Linker::ConstructJob(Compilation &C, const JobAction &JA, -const InputInfo &Output, -const InputInfoList &Inputs, -const ArgList &Args, -const char *LinkingOutput) const { + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &Args, + const char *LinkingOutput) const { const ToolChain &TC = getToolChain(); const Driver &D = TC.getDriver(); const SanitizerArgs &Sanitize = TC.getSanitizerArgs(Args); @@ -127,7 +128,8 @@ void tools::Cygwin::Linker::ConstructJob(Compilation &C, const JobAction &JA, D.Diag(diag::err_target_unknown_triple) << TC.getEffectiveTriple().str(); } - if (!Args.getLastArgValue(options::OPT_fuse_ld_EQ, "link").equals_insensitive("lld")) { + if (!Args.getLastArgValue(options::OPT_fuse_ld_EQ, "link") + .equals_insensitive("lld")) { if (TC.getArch() == llvm::Triple::x86) { CmdArgs.push_back("--wrap"); CmdArgs.push_back("_Znwj"); @@ -435,7 +437,8 @@ static llvm::ErrorOr findGcc(const llvm::Triple &LiteralTriple, Gccs.emplace_back("cygwin-gcc"); // Please do not add "gcc" here for (StringRef CandidateGcc : Gccs) -if (llvm::ErrorOr GPPName = llvm::sys::findProgramByName(CandidateGcc)) +if (llvm::ErrorOr GPPName = +llvm::sys::findProgramByName(CandidateGcc)) return GPPName; return make_error_code(std::errc::no_such_file_or_directory); } @@ -459,7 +462,7 @@ findClangRelativeSysroot(const Driver &D, const llvm::Triple &LiteralTriple, } toolchains::Cygwin::Cygwin(const Driver &D, const llvm::Triple &Triple, - const ArgList &Args) + const ArgList &Args) : ToolChain(D, Triple, Args), CudaInstallation(D, Triple, Args), RocmInstallation(D, Triple, Args) { getProgramPaths().push_back(getDriver().getInstalledDir()); @@ -493,7 +496,8 @@ toolchains::Cygwin::Cygwin(const Driver &D, const llvm::Triple &Triple, getFilePaths().push_back( (Base + SubdirName + llvm::sys::path::get_separator() + "usr/lib").str()); getFilePaths().push_back( - (Base + SubdirName + llvm::sys::path::get_separator() + "usr/lib/w32api").str()); + (Base + SubdirName + llvm::sys::path::get_separator() + "usr/lib/w32api") + .str
[clang] [Cygwin] Cygwin driver (PR #74933)
llvmbot wrote: @llvm/pr-subscribers-clang-driver @llvm/pr-subscribers-clang Author: 徐持恒 Xu Chiheng (xu-chiheng) Changes --- Patch is 35.89 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/74933.diff 5 Files Affected: - (modified) clang/lib/Driver/CMakeLists.txt (+1) - (modified) clang/lib/Driver/Driver.cpp (+4) - (added) clang/lib/Driver/ToolChains/Cygwin.cpp (+731) - (added) clang/lib/Driver/ToolChains/Cygwin.h (+125) - (modified) clang/lib/Lex/InitHeaderSearch.cpp (+4-26) ``diff diff --git a/clang/lib/Driver/CMakeLists.txt b/clang/lib/Driver/CMakeLists.txt index 58427e3f83c420..7ab5a1ee963515 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 e241706b9082ee..b6f3da3a006f4e 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" @@ -6263,6 +6264,9 @@ const ToolChain &Driver::getToolChain(const ArgList &Args, else TC = std::make_unique(*this, Target, Args); break; + case llvm::Triple::Cygnus: +TC = std::make_unique(*this, Target, Args); +break; case llvm::Triple::GNU: TC = std::make_unique(*this, Target, Args); break; diff --git a/clang/lib/Driver/ToolChains/Cygwin.cpp b/clang/lib/Driver/ToolChains/Cygwin.cpp new file mode 100644 index 00..8aa9cf5c8ec034 --- /dev/null +++ b/clang/lib/Driver/ToolChains/Cygwin.cpp @@ -0,0 +1,731 @@ +//===--- Cygwin.cpp - CygwinToolChain Implementation ===// +// +// 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/Compilation.h" +#include "clang/Driver/Driver.h" +#include "clang/Driver/DriverDiagnostic.h" +#include "clang/Driver/InputInfo.h" +#include "clang/Driver/Options.h" +#include "clang/Driver/SanitizerArgs.h" +#include "llvm/Option/ArgList.h" +#include "llvm/Support/FileSystem.h" +#include "llvm/Support/Path.h" +#include "llvm/Support/VirtualFileSystem.h" +#include + +using namespace clang::diag; +using namespace clang::driver; +using namespace clang; +using namespace llvm::opt; + +/// Cygwin Tools +void tools::Cygwin::Assembler::ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &Args, + const char *LinkingOutput) const { + claimNoWarnArgs(Args); + ArgStringList CmdArgs; + + if (getToolChain().getArch() == llvm::Triple::x86) { +CmdArgs.push_back("--32"); + } else if (getToolChain().getArch() == llvm::Triple::x86_64) { +CmdArgs.push_back("--64"); + } + + Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, options::OPT_Xassembler); + + CmdArgs.push_back("-o"); + CmdArgs.push_back(Output.getFilename()); + + for (const auto &II : Inputs) +CmdArgs.push_back(II.getFilename()); + + const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath("as")); + C.addCommand(std::make_unique(JA, *this, ResponseFileSupport::None(), + Exec, CmdArgs, Inputs, Output)); + + if (Args.hasArg(options::OPT_gsplit_dwarf)) +SplitDebugInfo(getToolChain(), C, *this, JA, Args, Output, + SplitDebugName(JA, Args, Inputs[0], Output)); +} + +void tools::Cygwin::Linker::AddLibGCC(const ArgList &Args, + ArgStringList &CmdArgs) const { + // Make use of compiler-rt if --rtlib option is used + ToolChain::RuntimeLibType RLT = getToolChain().GetRuntimeLibType(Args); + if (RLT == ToolChain::RLT_Libgcc) { +bool Static = Args.hasArg(options::OPT_static_libgcc) || + Args.hasArg(options::OPT_static); +bool Shared = Args.hasArg(options::OPT_shared); +bool CXX = getToolChain().getDriver().CCCIsCXX(); + +if (Static || (!CXX && !Shared)) { + CmdArgs.push_back("-lgcc"); + CmdArgs.push_back("-lgcc_eh"); +} else { + CmdArgs.push_back("-lgcc_s"); + CmdArgs.push_back("-lgcc");
[clang] [Cygwin] Cygwin driver (PR #74933)
https://github.com/xu-chiheng created https://github.com/llvm/llvm-project/pull/74933 None From daa6702f698724655b91c4fa52272c09924d2d83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=8C=81=E6=81=92=20Xu=20Chiheng?= Date: Sat, 9 Dec 2023 21:51:29 +0800 Subject: [PATCH] 1 --- clang/lib/Driver/CMakeLists.txt| 1 + clang/lib/Driver/Driver.cpp| 4 + clang/lib/Driver/ToolChains/Cygwin.cpp | 731 + clang/lib/Driver/ToolChains/Cygwin.h | 125 + clang/lib/Lex/InitHeaderSearch.cpp | 30 +- 5 files changed, 865 insertions(+), 26 deletions(-) create mode 100644 clang/lib/Driver/ToolChains/Cygwin.cpp create mode 100644 clang/lib/Driver/ToolChains/Cygwin.h diff --git a/clang/lib/Driver/CMakeLists.txt b/clang/lib/Driver/CMakeLists.txt index 58427e3f83c42..7ab5a1ee96351 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 e241706b9082e..b6f3da3a006f4 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" @@ -6263,6 +6264,9 @@ const ToolChain &Driver::getToolChain(const ArgList &Args, else TC = std::make_unique(*this, Target, Args); break; + case llvm::Triple::Cygnus: +TC = std::make_unique(*this, Target, Args); +break; case llvm::Triple::GNU: TC = std::make_unique(*this, Target, Args); break; diff --git a/clang/lib/Driver/ToolChains/Cygwin.cpp b/clang/lib/Driver/ToolChains/Cygwin.cpp new file mode 100644 index 0..8aa9cf5c8ec03 --- /dev/null +++ b/clang/lib/Driver/ToolChains/Cygwin.cpp @@ -0,0 +1,731 @@ +//===--- Cygwin.cpp - CygwinToolChain Implementation ===// +// +// 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/Compilation.h" +#include "clang/Driver/Driver.h" +#include "clang/Driver/DriverDiagnostic.h" +#include "clang/Driver/InputInfo.h" +#include "clang/Driver/Options.h" +#include "clang/Driver/SanitizerArgs.h" +#include "llvm/Option/ArgList.h" +#include "llvm/Support/FileSystem.h" +#include "llvm/Support/Path.h" +#include "llvm/Support/VirtualFileSystem.h" +#include + +using namespace clang::diag; +using namespace clang::driver; +using namespace clang; +using namespace llvm::opt; + +/// Cygwin Tools +void tools::Cygwin::Assembler::ConstructJob(Compilation &C, const JobAction &JA, + const InputInfo &Output, + const InputInfoList &Inputs, + const ArgList &Args, + const char *LinkingOutput) const { + claimNoWarnArgs(Args); + ArgStringList CmdArgs; + + if (getToolChain().getArch() == llvm::Triple::x86) { +CmdArgs.push_back("--32"); + } else if (getToolChain().getArch() == llvm::Triple::x86_64) { +CmdArgs.push_back("--64"); + } + + Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, options::OPT_Xassembler); + + CmdArgs.push_back("-o"); + CmdArgs.push_back(Output.getFilename()); + + for (const auto &II : Inputs) +CmdArgs.push_back(II.getFilename()); + + const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath("as")); + C.addCommand(std::make_unique(JA, *this, ResponseFileSupport::None(), + Exec, CmdArgs, Inputs, Output)); + + if (Args.hasArg(options::OPT_gsplit_dwarf)) +SplitDebugInfo(getToolChain(), C, *this, JA, Args, Output, + SplitDebugName(JA, Args, Inputs[0], Output)); +} + +void tools::Cygwin::Linker::AddLibGCC(const ArgList &Args, + ArgStringList &CmdArgs) const { + // Make use of compiler-rt if --rtlib option is used + ToolChain::RuntimeLibType RLT = getToolChain().GetRuntimeLibType(Args); + if (RLT == ToolChain::RLT_Libgcc) { +bool Static = Args.hasArg(options::OPT_static_libgcc) || + Args.hasArg(options::OPT_static); +bool Shared = Args.hasArg(options::OPT_shared); +bool CXX = getToolChain().getDriver().CCCIsCXX(); + +if (Static || (!CXX && !Share