• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1LOCAL_DIR := $(GET_LOCAL_DIR)
2
3ifndef ARCH_arm_TOOLCHAIN_PREFIX
4$(error Please run envsetup.sh to set ARCH_arm_TOOLCHAIN_PREFIX)
5endif
6
7ARCH_arm_COMPILEFLAGS :=
8
9# Arch
10ifeq ($(ARM_CPU),armv8-a)
11ARCH_arm_COMPILEFLAGS += -march=$(ARM_CPU)
12else
13ARCH_arm_COMPILEFLAGS += -mcpu=$(ARM_CPU)
14endif
15
16# Floating point support
17ifneq ($(ARM_WITHOUT_VFP_NEON),true)
18# ARM_WITHOUT_VFP_NEON = false
19ifeq (false,$(call TOBOOL,$(ALLOW_FP_USE)))
20# This is likely kernel space.
21# Don't use neon registers but still support FP ASM.
22# The kernel will not save NEON register on interrupt.
23ARCH_arm_COMPILEFLAGS += -mfpu=vfpv3 -mfloat-abi=softfp -DWITH_NO_FP=1
24else # ALLOW_FP_USE = true
25# This is likely userspace.
26ifeq ($(ARM_CPU),cortex-a7)
27ARCH_arm_COMPILEFLAGS += -mfpu=neon-vfpv4 -mfloat-abi=softfp
28endif
29ifeq ($(ARM_CPU),cortex-a15)
30ARCH_arm_COMPILEFLAGS += -mfpu=neon-vfpv4 -mfloat-abi=softfp
31endif
32ifeq ($(ARM_CPU),armv8-a)
33ARCH_arm_COMPILEFLAGS += -mfpu=crypto-neon-fp-armv8 -mfloat-abi=softfp
34endif
35endif # ALLOW_FP_USE
36else # ARM_WITHOUT_VFP_NEON = true
37ARCH_arm_COMPILEFLAGS += -mfloat-abi=soft
38endif # ARM_WITHOUT_VFP_NEON
39
40CLANG_ARM_TARGET_SYS ?= linux
41CLANG_ARM_TARGET_ABI ?= gnu
42
43ARCH_arm_THUMBCFLAGS :=
44ifeq ($(ENABLE_THUMB),true)
45ARCH_arm_THUMBCFLAGS := -mthumb -D__thumb__
46endif
47
48ARCH_arm_COMPILEFLAGS += -target arm-$(CLANG_ARM_TARGET_SYS)-$(CLANG_ARM_TARGET_ABI)
49
50# Set up custom Rust target to match clang target
51ARCH_arm_SUPPORTS_RUST := true
52ifeq (true,$(call TOBOOL,$(TRUSTY_USERSPACE)))
53ARCH_arm_RUSTFLAGS := --target=armv7-unknown-trusty
54else
55# Save the path to custom toolchain so Rust targets targets can depend on it
56ARCH_arm_RUST_TARGET := $(LOCAL_DIR)/armv7-unknown-trusty-kernel.json
57ARCH_arm_RUSTFLAGS := --target=$(ARCH_arm_RUST_TARGET)
58ARCH_arm_SUPPORTS_RUST_CFI := true
59endif
60