| From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
| From: Greg Hackmann <ghackmann@google.com> |
| Date: Tue, 25 Oct 2016 13:59:59 -0700 |
| Subject: ANDROID: Kbuild, LLVMLinux: allow overriding clang target triple |
| |
| Android has an unusual setup where the kernel needs to target |
| [arch]-linux-gnu to avoid Android userspace-specific flags and |
| optimizations, but AOSP doesn't ship a matching binutils. |
| |
| Add a new variable CLANG_TRIPLE which can override the "-target" triple |
| used to compile the kernel, while using a different CROSS_COMPILE to |
| pick the binutils/gcc installation. For Android you'd do something |
| like: |
| |
| export CLANG_TRIPLE=aarch64-linux-gnu- |
| export CROSS_COMPILE=aarch64-linux-android- |
| |
| If you don't need something like this, leave CLANG_TRIPLE unset and it |
| will default to CROSS_COMPILE. |
| |
| Change-Id: I85d63599c6ab8ed458071cdf9197d85b1f7f150b |
| Signed-off-by: Greg Hackmann <ghackmann@google.com> |
| [adelva: Added a script to check for incorrectly falling back to the |
| default when CLANG_TRIPLE is unset] |
| Bug: 118439987 |
| Bug: 120440614 |
| Test: make CLANG_TRIPLE=x86_64-linux-gnu CC=clang |
| Signed-off-by: Alistair Delva <adelva@google.com> |
| --- |
| Makefile | 6 +++++- |
| scripts/clang-android.sh | 4 ++++ |
| 2 files changed, 9 insertions(+), 1 deletion(-) |
| create mode 100755 scripts/clang-android.sh |
| |
| diff --git a/Makefile b/Makefile |
| index 45c6264f1108..658d0a1c3748 100644 |
| --- a/Makefile |
| +++ b/Makefile |
| @@ -526,7 +526,11 @@ endif |
| |
| ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),) |
| ifneq ($(CROSS_COMPILE),) |
| -CLANG_FLAGS += --target=$(notdir $(CROSS_COMPILE:%-=%)) |
| +CLANG_TRIPLE ?= $(CROSS_COMPILE) |
| +CLANG_FLAGS += --target=$(notdir $(CLANG_TRIPLE:%-=%)) |
| +ifeq ($(shell $(srctree)/scripts/clang-android.sh $(CC) $(CLANG_FLAGS)), y) |
| +$(error "Clang with Android --target detected. Did you specify CLANG_TRIPLE?") |
| +endif |
| GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit)) |
| CLANG_FLAGS += --prefix=$(GCC_TOOLCHAIN_DIR) |
| GCC_TOOLCHAIN := $(realpath $(GCC_TOOLCHAIN_DIR)/..) |
| diff --git a/scripts/clang-android.sh b/scripts/clang-android.sh |
| new file mode 100755 |
| index 000000000000..9186c4f48576 |
| --- /dev/null |
| +++ b/scripts/clang-android.sh |
| @@ -0,0 +1,4 @@ |
| +#!/bin/sh |
| +# SPDX-License-Identifier: GPL-2.0 |
| + |
| +$* -dM -E - </dev/null 2>&1 | grep -q __ANDROID__ && echo "y" |