From: Yaron Keren Date: Wed, 15 Jul 2015 13:32:23 +0000 (+0000) Subject: Add support for armv7-windows-gnu targets to the clang front end. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ad6e47665fd86439bc82b861d90767c03cd575aa;p=clang Add support for armv7-windows-gnu targets to the clang front end. http://reviews.llvm.org/D11071 Patch by Martell Malone Reviewed by Reid Kleckner git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@242292 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 3cf74bc849..2b4f945ac3 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -4919,6 +4919,45 @@ public: } }; +// ARM MinGW target +class MinGWARMTargetInfo : public WindowsARMTargetInfo { +public: + MinGWARMTargetInfo(const llvm::Triple &Triple) + : WindowsARMTargetInfo(Triple) { + TheCXXABI.set(TargetCXXABI::GenericARM); + } + + void getTargetDefines(const LangOptions &Opts, + MacroBuilder &Builder) const override { + WindowsARMTargetInfo::getTargetDefines(Opts, Builder); + DefineStd(Builder, "WIN32", Opts); + DefineStd(Builder, "WINNT", Opts); + Builder.defineMacro("_ARM_"); + addMinGWDefines(Opts, Builder); + } +}; + +// ARM Cygwin target +class CygwinARMTargetInfo : public ARMleTargetInfo { +public: + CygwinARMTargetInfo(const llvm::Triple &Triple) : ARMleTargetInfo(Triple) { + TLSSupported = false; + WCharType = UnsignedShort; + DoubleAlign = LongLongAlign = 64; + DescriptionString = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"; + } + void getTargetDefines(const LangOptions &Opts, + MacroBuilder &Builder) const override { + ARMleTargetInfo::getTargetDefines(Opts, Builder); + Builder.defineMacro("_ARM_"); + Builder.defineMacro("__CYGWIN__"); + Builder.defineMacro("__CYGWIN32__"); + DefineStd(Builder, "unix", Opts); + if (Opts.CPlusPlus) + Builder.defineMacro("_GNU_SOURCE"); + } +}; + class DarwinARMTargetInfo : public DarwinTargetInfo { protected: @@ -7039,6 +7078,10 @@ static TargetInfo *AllocateTarget(const llvm::Triple &Triple) { switch (Triple.getEnvironment()) { default: return new ARMleTargetInfo(Triple); + case llvm::Triple::Cygnus: + return new CygwinARMTargetInfo(Triple); + case llvm::Triple::GNU: + return new MinGWARMTargetInfo(Triple); case llvm::Triple::Itanium: return new ItaniumWindowsARMleTargetInfo(Triple); case llvm::Triple::MSVC: