xref: /aosp_15_r20/external/arm-trusted-firmware/make_helpers/armv7-a-cpus.mk (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park#
2*54fd6939SJiyong Park# Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
3*54fd6939SJiyong Park#
4*54fd6939SJiyong Park# SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park#
6*54fd6939SJiyong Park
7*54fd6939SJiyong Parkifneq (${ARCH},aarch32)
8*54fd6939SJiyong Park$(error ARM_ARCH_MAJOR=7 mandates ARCH=aarch32)
9*54fd6939SJiyong Parkendif
10*54fd6939SJiyong Park
11*54fd6939SJiyong Park# For ARMv7, set march32 from platform directive ARMV7_CORTEX_Ax=yes
12*54fd6939SJiyong Park# and ARM_WITH_NEON=yes/no.
13*54fd6939SJiyong Park#
14*54fd6939SJiyong Park# GCC and Clang require -march=armv7-a for C-A9 and -march=armv7ve for C-A15.
15*54fd6939SJiyong Park# armClang requires -march=armv7-a for all ARMv7 Cortex-A. To comply with
16*54fd6939SJiyong Park# all, just drop -march and supply only -mcpu.
17*54fd6939SJiyong Park
18*54fd6939SJiyong Park# Platform can override march32-directive through MARCH32_DIRECTIVE
19*54fd6939SJiyong Parkifdef MARCH32_DIRECTIVE
20*54fd6939SJiyong Parkmarch32-directive		:= $(MARCH32_DIRECTIVE)
21*54fd6939SJiyong Parkelse
22*54fd6939SJiyong Parkmarch32-set-${ARM_CORTEX_A5}	:= -mcpu=cortex-a5
23*54fd6939SJiyong Parkmarch32-set-${ARM_CORTEX_A7}	:= -mcpu=cortex-a7
24*54fd6939SJiyong Parkmarch32-set-${ARM_CORTEX_A9}	:= -mcpu=cortex-a9
25*54fd6939SJiyong Parkmarch32-set-${ARM_CORTEX_A12}	:= -mcpu=cortex-a12
26*54fd6939SJiyong Parkmarch32-set-${ARM_CORTEX_A15}	:= -mcpu=cortex-a15
27*54fd6939SJiyong Parkmarch32-set-${ARM_CORTEX_A17}	:= -mcpu=cortex-a17
28*54fd6939SJiyong Parkmarch32-neon-$(ARM_WITH_NEON)	:= -mfpu=neon
29*54fd6939SJiyong Park
30*54fd6939SJiyong Park# default to -march=armv7-a as target directive
31*54fd6939SJiyong Parkmarch32-set-yes			?= -march=armv7-a
32*54fd6939SJiyong Parkmarch32-directive		:= ${march32-set-yes} ${march32-neon-yes}
33*54fd6939SJiyong Parkendif
34*54fd6939SJiyong Park
35*54fd6939SJiyong Park# Platform may override these extension support directives:
36*54fd6939SJiyong Park#
37*54fd6939SJiyong Park# ARMV7_SUPPORTS_LARGE_PAGE_ADDRESSING
38*54fd6939SJiyong Park# Defined if core supports the Large Page Addressing extension.
39*54fd6939SJiyong Park#
40*54fd6939SJiyong Park# ARMV7_SUPPORTS_VIRTUALIZATION
41*54fd6939SJiyong Park# Defined if ARMv7 core supports the Virtualization extension.
42*54fd6939SJiyong Park#
43*54fd6939SJiyong Park# ARMV7_SUPPORTS_GENERIC_TIMER
44*54fd6939SJiyong Park# Defined if ARMv7 core supports the Generic Timer extension.
45*54fd6939SJiyong Park
46*54fd6939SJiyong Parkifeq ($(filter yes,$(ARM_CORTEX_A7) $(ARM_CORTEX_A12) $(ARM_CORTEX_A15) $(ARM_CORTEX_A17)),yes)
47*54fd6939SJiyong Park$(eval $(call add_defines,\
48*54fd6939SJiyong Park    $(sort \
49*54fd6939SJiyong Park        ARMV7_SUPPORTS_LARGE_PAGE_ADDRESSING \
50*54fd6939SJiyong Park        ARMV7_SUPPORTS_VIRTUALIZATION \
51*54fd6939SJiyong Park        ARMV7_SUPPORTS_GENERIC_TIMER \
52*54fd6939SJiyong Park        ARMV7_SUPPORTS_VFP \
53*54fd6939SJiyong Park)))
54*54fd6939SJiyong Parkendif
55*54fd6939SJiyong Park
56*54fd6939SJiyong Parkifeq ($(ARM_CORTEX_A5),yes)
57*54fd6939SJiyong Park$(eval $(call add_define,ARM_CORTEX_A5))
58*54fd6939SJiyong Parkendif
59