diff options
Diffstat (limited to 'clang/lib/Driver')
| -rw-r--r-- | clang/lib/Driver/ToolChains.cpp | 14 | ||||
| -rw-r--r-- | clang/lib/Driver/Tools.cpp | 34 |
2 files changed, 31 insertions, 17 deletions
diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp index 5f9b19c3ff7..8d8e7c7c206 100644 --- a/clang/lib/Driver/ToolChains.cpp +++ b/clang/lib/Driver/ToolChains.cpp @@ -400,7 +400,8 @@ void DarwinClang::AddLinkRuntimeLibArgs(const ArgList &Args, // it never went into the SDK. // Linking against libgcc_s.1 isn't needed for iOS 5.0+ if (isIPhoneOSVersionLT(5, 0) && !isTargetIOSSimulator() && - getTriple().getArch() != llvm::Triple::arm64) + (getTriple().getArch() != llvm::Triple::arm64 && + getTriple().getArch() != llvm::Triple::aarch64)) CmdArgs.push_back("-lgcc_s.1"); // We currently always need a static runtime library for iOS. @@ -520,6 +521,7 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const { if (!OSXTarget.empty() && !iOSTarget.empty()) { if (getTriple().getArch() == llvm::Triple::arm || getTriple().getArch() == llvm::Triple::arm64 || + getTriple().getArch() == llvm::Triple::aarch64 || getTriple().getArch() == llvm::Triple::thumb) OSXTarget = ""; else @@ -656,6 +658,7 @@ void DarwinClang::AddCCKextLibArgs(const ArgList &Args, // Use the newer cc_kext for iOS ARM after 6.0. if (!isTargetIPhoneOS() || isTargetIOSSimulator() || getTriple().getArch() == llvm::Triple::arm64 || + getTriple().getArch() == llvm::Triple::aarch64 || !isIPhoneOSVersionLT(6, 0)) { llvm::sys::path::append(P, "libclang_rt.cc_kext.a"); } else { @@ -926,7 +929,8 @@ DerivedArgList *Darwin::TranslateArgs(const DerivedArgList &Args, // but we can't check the deployment target in the translation code until // it is set here. if (isTargetIOSBased() && !isIPhoneOSVersionLT(6, 0) && - getTriple().getArch() != llvm::Triple::arm64) { + getTriple().getArch() != llvm::Triple::arm64 && + getTriple().getArch() != llvm::Triple::aarch64) { for (ArgList::iterator it = DAL->begin(), ie = DAL->end(); it != ie; ) { Arg *A = *it; ++it; @@ -993,7 +997,8 @@ bool MachO::isPIEDefault() const { bool MachO::isPICDefaultForced() const { return (getArch() == llvm::Triple::x86_64 || - getArch() == llvm::Triple::arm64); + getArch() == llvm::Triple::arm64 || + getArch() == llvm::Triple::aarch64); } bool MachO::SupportsProfiling() const { @@ -1082,7 +1087,8 @@ void Darwin::addStartObjectFileArgs(const llvm::opt::ArgList &Args, if (isTargetIOSSimulator()) { ; // iOS simulator does not need crt1.o. } else if (isTargetIPhoneOS()) { - if (getArch() == llvm::Triple::arm64) + if (getArch() == llvm::Triple::arm64 || + getArch() == llvm::Triple::aarch64) ; // iOS does not need any crt1 files for arm64 else if (isIPhoneOSVersionLT(3, 1)) CmdArgs.push_back("-lcrt1.o"); diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 4c097c5120a..76b7962cd55 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -841,8 +841,9 @@ void Clang::AddARMTargetArgs(const ArgList &Args, } } -/// getARM64TargetCPU - Get the (LLVM) name of the ARM64 cpu we are targeting. -static std::string getARM64TargetCPU(const ArgList &Args) { +/// getAArch64TargetCPU - Get the (LLVM) name of the AArch64 cpu we are +/// targeting. +static std::string getAArch64TargetCPU(const ArgList &Args) { // If we have -mcpu=, use that. if (Arg *A = Args.getLastArg(options::OPT_mcpu_EQ)) { StringRef MCPU = A->getValue(); @@ -864,8 +865,8 @@ static std::string getARM64TargetCPU(const ArgList &Args) { return "generic"; } -void Clang::AddARM64TargetArgs(const ArgList &Args, - ArgStringList &CmdArgs) const { +void Clang::AddAArch64TargetArgs(const ArgList &Args, + ArgStringList &CmdArgs) const { std::string TripleStr = getToolChain().ComputeEffectiveClangTriple(Args); llvm::Triple Triple(TripleStr); @@ -890,11 +891,11 @@ void Clang::AddARM64TargetArgs(const ArgList &Args, CmdArgs.push_back(ABIName); CmdArgs.push_back("-target-cpu"); - CmdArgs.push_back(Args.MakeArgString(getARM64TargetCPU(Args))); + CmdArgs.push_back(Args.MakeArgString(getAArch64TargetCPU(Args))); if (Args.hasArg(options::OPT_mstrict_align)) { CmdArgs.push_back("-backend-option"); - CmdArgs.push_back("-arm64-strict-align"); + CmdArgs.push_back("-aarch64-strict-align"); } } @@ -1327,7 +1328,7 @@ static std::string getCPUName(const ArgList &Args, const llvm::Triple &T) { case llvm::Triple::aarch64_be: case llvm::Triple::arm64: case llvm::Triple::arm64_be: - return getARM64TargetCPU(Args); + return getAArch64TargetCPU(Args); case llvm::Triple::arm: case llvm::Triple::armeb: @@ -2455,7 +2456,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, // PIC or PIE options above, if these show up, PIC is disabled. llvm::Triple Triple(TripleStr); if (KernelOrKext && (!Triple.isiOS() || Triple.isOSVersionLT(6) || - Triple.getArch() == llvm::Triple::arm64)) + Triple.getArch() == llvm::Triple::arm64 || + Triple.getArch() == llvm::Triple::aarch64)) PIC = PIE = false; if (Args.hasArg(options::OPT_static)) PIC = PIE = false; @@ -2782,9 +2784,11 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, AddARMTargetArgs(Args, CmdArgs, KernelOrKext); break; + case llvm::Triple::aarch64: + case llvm::Triple::aarch64_be: case llvm::Triple::arm64: case llvm::Triple::arm64_be: - AddARM64TargetArgs(Args, CmdArgs); + AddAArch64TargetArgs(Args, CmdArgs); break; case llvm::Triple::mips: @@ -3408,16 +3412,20 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, options::OPT_munaligned_access)) { if (A->getOption().matches(options::OPT_mno_unaligned_access)) { CmdArgs.push_back("-backend-option"); - if (getToolChain().getTriple().getArch() == llvm::Triple::arm64 || + if (getToolChain().getTriple().getArch() == llvm::Triple::aarch64 || + getToolChain().getTriple().getArch() == llvm::Triple::aarch64_be || + getToolChain().getTriple().getArch() == llvm::Triple::arm64 || getToolChain().getTriple().getArch() == llvm::Triple::arm64_be) - CmdArgs.push_back("-arm64-strict-align"); + CmdArgs.push_back("-aarch64-strict-align"); else CmdArgs.push_back("-arm-strict-align"); } else { CmdArgs.push_back("-backend-option"); - if (getToolChain().getTriple().getArch() == llvm::Triple::arm64 || + if (getToolChain().getTriple().getArch() == llvm::Triple::aarch64 || + getToolChain().getTriple().getArch() == llvm::Triple::aarch64_be || + getToolChain().getTriple().getArch() == llvm::Triple::arm64 || getToolChain().getTriple().getArch() == llvm::Triple::arm64_be) - CmdArgs.push_back("-arm64-no-strict-align"); + CmdArgs.push_back("-aarch64-no-strict-align"); else CmdArgs.push_back("-arm-no-strict-align"); } |

