forked from OSchip/llvm-project
[Driver] allow Android triples to alias for non Android targets
Summary: Partial revert of r330873 ('[Driver] Reland "Android triples are not aliases for other triples."') While we don't want `-target *-linux-android` to alias to non *-linux-android libs and binaries, it turns out we do want the opposite. Ie. We would like for `-target *-linux-gnu` to still be able to use *-android libs and binaries. In fact, this is used to cross assemble and link the Linux kernel for Android devices. `-target *-linux-gnu` needs to be used for the Linux kernel when using the android binutils prebuilts (*-linux-android). The use of `-target *-linux-android` on C source files will cause Clang to perform optimizations based on the presence of bionic (due to r265481 ('Faster stack-protector for Android/AArch64.')) which is invalid within the Linux kernel and will produce a non-bootable kernel image. Of course, you could just use the standard binutils (*-linux-gnu), but Android does not distribute these. So this patch fixes a problem that only occurs when cross assembling and linking a Linux kernel with the Android provided binutils, which is what is done within Android's build system. Reviewers: srhines, pirama, danalbert Reviewed By: srhines, danalbert Subscribers: javed.absar, kristof.beyls, cfe-commits Differential Revision: https://reviews.llvm.org/D53463 llvm-svn: 344941
This commit is contained in:
parent
552b62ed1f
commit
11dadac247
|
@ -1847,19 +1847,21 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
|
|||
static const char *const AArch64LibDirs[] = {"/lib64", "/lib"};
|
||||
static const char *const AArch64Triples[] = {
|
||||
"aarch64-none-linux-gnu", "aarch64-linux-gnu", "aarch64-redhat-linux",
|
||||
"aarch64-suse-linux"};
|
||||
"aarch64-suse-linux", "aarch64-linux-android"};
|
||||
static const char *const AArch64beLibDirs[] = {"/lib"};
|
||||
static const char *const AArch64beTriples[] = {"aarch64_be-none-linux-gnu",
|
||||
"aarch64_be-linux-gnu"};
|
||||
|
||||
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"};
|
||||
static const char *const ARMHFTriples[] = {"arm-linux-gnueabihf",
|
||||
"armv7hl-redhat-linux-gnueabi",
|
||||
"armv6hl-suse-linux-gnueabi",
|
||||
"armv7hl-suse-linux-gnueabi"};
|
||||
static const char *const ARMebLibDirs[] = {"/lib"};
|
||||
static const char *const ARMebTriples[] = {"armeb-linux-gnueabi"};
|
||||
static const char *const ARMebTriples[] = {"armeb-linux-gnueabi",
|
||||
"armeb-linux-androideabi"};
|
||||
static const char *const ARMebHFTriples[] = {
|
||||
"armeb-linux-gnueabihf", "armebv7hl-redhat-linux-gnueabi"};
|
||||
|
||||
|
@ -1870,14 +1872,15 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
|
|||
"x86_64-redhat-linux", "x86_64-suse-linux",
|
||||
"x86_64-manbo-linux-gnu", "x86_64-linux-gnu",
|
||||
"x86_64-slackware-linux", "x86_64-unknown-linux",
|
||||
"x86_64-amazon-linux"};
|
||||
"x86_64-amazon-linux", "x86_64-linux-android"};
|
||||
static const char *const X32LibDirs[] = {"/libx32"};
|
||||
static const char *const X86LibDirs[] = {"/lib32", "/lib"};
|
||||
static const char *const X86Triples[] = {
|
||||
"i686-linux-gnu", "i686-pc-linux-gnu", "i486-linux-gnu",
|
||||
"i386-linux-gnu", "i386-redhat-linux6E", "i686-redhat-linux",
|
||||
"i586-redhat-linux", "i386-redhat-linux", "i586-suse-linux",
|
||||
"i486-slackware-linux", "i686-montavista-linux", "i586-linux-gnu"};
|
||||
"i486-slackware-linux", "i686-montavista-linux", "i586-linux-gnu",
|
||||
"i686-linux-android"};
|
||||
|
||||
static const char *const MIPSLibDirs[] = {"/lib"};
|
||||
static const char *const MIPSTriples[] = {
|
||||
|
@ -1885,7 +1888,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
|
|||
"mips-img-linux-gnu", "mipsisa32r6-linux-gnu"};
|
||||
static const char *const MIPSELLibDirs[] = {"/lib"};
|
||||
static const char *const MIPSELTriples[] = {
|
||||
"mipsel-linux-gnu", "mips-img-linux-gnu", "mipsisa32r6el-linux-gnu"};
|
||||
"mipsel-linux-gnu", "mips-img-linux-gnu", "mipsisa32r6el-linux-gnu",
|
||||
"mipsel-linux-android"};
|
||||
|
||||
static const char *const MIPS64LibDirs[] = {"/lib64", "/lib"};
|
||||
static const char *const MIPS64Triples[] = {
|
||||
|
@ -1896,7 +1900,8 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes(
|
|||
static const char *const MIPS64ELTriples[] = {
|
||||
"mips64el-linux-gnu", "mips-mti-linux-gnu",
|
||||
"mips-img-linux-gnu", "mips64el-linux-gnuabi64",
|
||||
"mipsisa64r6el-linux-gnu", "mipsisa64r6el-linux-gnuabi64"};
|
||||
"mipsisa64r6el-linux-gnu", "mipsisa64r6el-linux-gnuabi64",
|
||||
"mips64el-linux-android"};
|
||||
|
||||
static const char *const MIPSN32LibDirs[] = {"/lib32"};
|
||||
static const char *const MIPSN32Triples[] = {"mips64-linux-gnuabin32",
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
// Test that gcc-toolchain option works correctly with a aarch64-linux-gnu
|
||||
// triple.
|
||||
//
|
||||
// RUN: %clang %s -### -v --target=aarch64-linux-gnu \
|
||||
// RUN: --gcc-toolchain=%S/Inputs/basic_android_ndk_tree/ 2>&1 \
|
||||
// RUN: | FileCheck %s
|
||||
//
|
||||
// CHECK: Found candidate GCC installation: {{.*}}/Inputs/basic_android_ndk_tree/lib/gcc/aarch64-linux-android/4.9
|
Loading…
Reference in New Issue