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