Page MenuHomePhabricator

[Driver] allow Android triples to alias for non Android targets

Authored by nickdesaulniers on Oct 19 2018, 5:20 PM.



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

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.

Diff Detail

rC Clang

Event Timeline

srhines accepted this revision.Oct 19 2018, 6:13 PM

Please remove the reference to b/X in the commit message. LLVM doesn't allow internal bug numbers, and you described the issue well enough without it.

This revision is now accepted and ready to land.Oct 19 2018, 6:13 PM
nickdesaulniers edited the summary of this revision. (Show Details)Oct 22 2018, 12:32 PM
This revision was automatically updated to reflect the committed changes.