diff options
| author | Saleem Abdulrasool <compnerd@compnerd.org> | 2014-04-04 20:31:19 +0000 |
|---|---|---|
| committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2014-04-04 20:31:19 +0000 |
| commit | f4c9e49f94494154f23f20f84a79552c9f1a03fb (patch) | |
| tree | 2ff0cce22fe31ab23f5d0510f5782caf879e228e /clang/lib/Driver/Tools.cpp | |
| parent | cf6f688a403f046ec9f81dfbfd04621ff7777072 (diff) | |
| download | bcm5719-llvm-f4c9e49f94494154f23f20f84a79552c9f1a03fb.tar.gz bcm5719-llvm-f4c9e49f94494154f23f20f84a79552c9f1a03fb.zip | |
Driver: add target definition for Windows on ARM
This introduces the definitions needed for the Windows on ARM target. Add
target definitions for both the MSVC environment and the MSVC + Itanium C++ ABI
environment. The Visual Studio definitions correspond to the definitions
provided by Visual Studio 2012.
llvm-svn: 205650
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
| -rw-r--r-- | clang/lib/Driver/Tools.cpp | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 6acc3d5f58a..cd369d72eb5 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -475,6 +475,10 @@ static bool isSignedCharDefault(const llvm::Triple &Triple) { case llvm::Triple::arm64: case llvm::Triple::arm: case llvm::Triple::armeb: + if (Triple.isOSDarwin() || Triple.isOSWindows()) + return true; + return false; + case llvm::Triple::ppc: case llvm::Triple::ppc64: if (Triple.isOSDarwin()) @@ -645,6 +649,11 @@ StringRef tools::arm::getARMFloatABI(const Driver &D, const ArgList &Args, break; } + // FIXME: this is invalid for WindowsCE + case llvm::Triple::Win32: + FloatABI = "hard"; + break; + case llvm::Triple::FreeBSD: switch(Triple.getEnvironment()) { case llvm::Triple::GNUEABIHF: @@ -772,6 +781,9 @@ void Clang::AddARMTargetArgs(const ArgList &Args, } else { ABIName = "apcs-gnu"; } + } else if (Triple.isOSWindows()) { + // FIXME: this is invalid for WindowsCE + ABIName = "aapcs"; } else { // Select the default based on the platform. switch(Triple.getEnvironment()) { @@ -2198,6 +2210,16 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, std::string TripleStr = getToolChain().ComputeEffectiveClangTriple(Args); CmdArgs.push_back(Args.MakeArgString(TripleStr)); + const llvm::Triple TT(TripleStr); + if (TT.isOSWindows() && (TT.getArch() == llvm::Triple::arm || + TT.getArch() == llvm::Triple::thumb)) { + unsigned Offset = TT.getArch() == llvm::Triple::arm ? 4 : 6; + unsigned Version; + TT.getArchName().substr(Offset).getAsInteger(10, Version); + if (Version < 7) + D.Diag(diag::err_target_unsupported_arch) << TT.getArchName() << TripleStr; + } + // Push all default warning arguments that are specific to // the given target. These come before user provided warning options // are provided. @@ -4835,9 +4857,16 @@ const char *arm::getARMCPUForMArch(const ArgList &Args, } } - if (Triple.getOS() == llvm::Triple::NetBSD) { + switch (Triple.getOS()) { + case llvm::Triple::NetBSD: if (MArch == "armv6") return "arm1176jzf-s"; + break; + case llvm::Triple::Win32: + // FIXME: this is invalid for WindowsCE + return "cortex-a9"; + default: + break; } const char *result = llvm::StringSwitch<const char *>(MArch) |

