forked from OSchip/llvm-project
Add support for the androideabi environment to our triple support, and
for the arm-linux-androideabi triple in particular. Also use this to do a better job of selecting soft FP settings. Patch by Evgeniy Stepanov. llvm-svn: 147872
This commit is contained in:
parent
9a7510af46
commit
c89aa9d964
|
@ -2374,7 +2374,7 @@ public:
|
||||||
|
|
||||||
bool isEABI() const {
|
bool isEABI() const {
|
||||||
StringRef Env = getContext().getTargetInfo().getTriple().getEnvironmentName();
|
StringRef Env = getContext().getTargetInfo().getTriple().getEnvironmentName();
|
||||||
return (Env == "gnueabi" || Env == "eabi");
|
return (Env == "gnueabi" || Env == "eabi" || Env == "androideabi");
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -1164,7 +1164,10 @@ Generic_GCC::GCCInstallationDetector::GCCInstallationDetector(const Driver &D)
|
||||||
SmallVectorImpl<StringRef> &Triples) {
|
SmallVectorImpl<StringRef> &Triples) {
|
||||||
if (HostArch == llvm::Triple::arm || HostArch == llvm::Triple::thumb) {
|
if (HostArch == llvm::Triple::arm || HostArch == llvm::Triple::thumb) {
|
||||||
static const char *const ARMLibDirs[] = { "/lib" };
|
static const char *const ARMLibDirs[] = { "/lib" };
|
||||||
static const char *const ARMTriples[] = { "arm-linux-gnueabi" };
|
static const char *const ARMTriples[] = {
|
||||||
|
"arm-linux-gnueabi",
|
||||||
|
"arm-linux-androideabi"
|
||||||
|
};
|
||||||
LibDirs.append(ARMLibDirs, ARMLibDirs + llvm::array_lengthof(ARMLibDirs));
|
LibDirs.append(ARMLibDirs, ARMLibDirs + llvm::array_lengthof(ARMLibDirs));
|
||||||
Triples.append(ARMTriples, ARMTriples + llvm::array_lengthof(ARMTriples));
|
Triples.append(ARMTriples, ARMTriples + llvm::array_lengthof(ARMTriples));
|
||||||
} else if (HostArch == llvm::Triple::x86_64) {
|
} else if (HostArch == llvm::Triple::x86_64) {
|
||||||
|
|
|
@ -517,6 +517,7 @@ void Clang::AddARMTargetArgs(const ArgList &Args,
|
||||||
} else {
|
} else {
|
||||||
// Select the default based on the platform.
|
// Select the default based on the platform.
|
||||||
switch(Triple.getEnvironment()) {
|
switch(Triple.getEnvironment()) {
|
||||||
|
case llvm::Triple::ANDROIDEABI:
|
||||||
case llvm::Triple::GNUEABI:
|
case llvm::Triple::GNUEABI:
|
||||||
ABIName = "aapcs-linux";
|
ABIName = "aapcs-linux";
|
||||||
break;
|
break;
|
||||||
|
@ -589,6 +590,15 @@ void Clang::AddARMTargetArgs(const ArgList &Args,
|
||||||
// EABI is always AAPCS, and if it was not marked 'hard', it's softfp
|
// EABI is always AAPCS, and if it was not marked 'hard', it's softfp
|
||||||
FloatABI = "softfp";
|
FloatABI = "softfp";
|
||||||
break;
|
break;
|
||||||
|
case llvm::Triple::ANDROIDEABI: {
|
||||||
|
StringRef ArchName =
|
||||||
|
getLLVMArchSuffixForARM(getARMTargetCPU(Args, Triple));
|
||||||
|
if (ArchName.startswith("v7"))
|
||||||
|
FloatABI = "softfp";
|
||||||
|
else
|
||||||
|
FloatABI = "soft";
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
// Assume "soft", but warn the user we are guessing.
|
// Assume "soft", but warn the user we are guessing.
|
||||||
FloatABI = "soft";
|
FloatABI = "soft";
|
||||||
|
|
Loading…
Reference in New Issue