xref: /optee_os/core/arch/arm/arm.mk (revision 983d02116743476904b68d52ca432d0f79c38c43)
1CFG_LTC_OPTEE_THREAD ?= y
2
3ifeq ($(CFG_ARM64_core),y)
4CFG_KERN_LINKER_FORMAT ?= elf64-littleaarch64
5CFG_KERN_LINKER_ARCH ?= aarch64
6endif
7ifeq ($(CFG_ARM32_core),y)
8CFG_KERN_LINKER_FORMAT ?= elf32-littlearm
9CFG_KERN_LINKER_ARCH ?= arm
10endif
11
12ifeq ($(CFG_TA_FLOAT_SUPPORT),y)
13# Use hard-float for floating point support in user TAs instead of
14# soft-float
15CFG_WITH_VFP ?= y
16ifeq ($(CFG_ARM64_core),y)
17# AArch64 has no fallback to soft-float
18$(call force,CFG_WITH_VFP,y)
19endif
20ifeq ($(CFG_WITH_VFP),y)
21platform-hard-float-enabled := y
22endif
23endif
24
25ifeq ($(CFG_WITH_PAGER),y)
26ifeq ($(CFG_CORE_SANITIZE_KADDRESS),y)
27$(error Error: CFG_CORE_SANITIZE_KADDRESS not compatible with CFG_WITH_PAGER)
28endif
29endif
30
31core-platform-cppflags	+= -I$(arch-dir)/include
32core-platform-subdirs += \
33	$(addprefix $(arch-dir)/, kernel mm tee sta) $(platform-dir)
34
35ifneq ($(CFG_WITH_ARM_TRUSTED_FW),y)
36core-platform-subdirs += $(arch-dir)/sm
37endif
38
39arm64-platform-cppflags += -DARM64=1 -D__LP64__=1
40arm32-platform-cppflags += -DARM32=1 -D__ILP32__=1
41
42platform-cflags-generic ?= -g -ffunction-sections -fdata-sections -pipe
43platform-aflags-generic ?= -g -pipe
44
45arm32-platform-cflags-no-hard-float ?= -mno-apcs-float -mfloat-abi=soft
46arm32-platform-cflags-hard-float ?= -mfloat-abi=hard -funsafe-math-optimizations
47arm32-platform-cflags-generic ?= -mthumb -mthumb-interwork \
48			-fno-short-enums -fno-common -mno-unaligned-access
49arm32-platform-aflags-no-hard-float ?=
50
51arm64-platform-cflags-no-hard-float ?= -mgeneral-regs-only
52arm64-platform-cflags-hard-float ?=
53arm64-platform-cflags-generic ?= -mstrict-align
54
55ifeq ($(DEBUG),1)
56platform-cflags-optimization ?=  -O0
57else
58platform-cflags-optimization ?=  -Os
59endif
60
61platform-cflags-debug-info ?= -g3
62platform-aflags-debug-info ?=
63
64core-platform-cflags += $(platform-cflags-optimization)
65core-platform-cflags += $(platform-cflags-generic)
66core-platform-cflags += $(platform-cflags-debug-info)
67
68core-platform-aflags += $(platform-aflags-generic)
69core-platform-aflags += $(platform-aflags-debug-info)
70
71ifeq ($(CFG_ARM64_core),y)
72arch-bits-core := 64
73core-platform-cppflags += $(arm64-platform-cppflags)
74core-platform-cflags += $(arm64-platform-cflags)
75core-platform-cflags += $(arm64-platform-cflags-generic)
76core-platform-cflags += $(arm64-platform-cflags-no-hard-float)
77core-platform-aflags += $(arm64-platform-aflags)
78else
79arch-bits-core := 32
80core-platform-cppflags += $(arm32-platform-cppflags)
81core-platform-cflags += $(arm32-platform-cflags)
82core-platform-cflags += $(arm32-platform-cflags-no-hard-float)
83ifeq ($(CFG_CORE_UNWIND),y)
84core-platform-cflags += -funwind-tables
85endif
86core-platform-cflags += $(arm32-platform-cflags-generic)
87core-platform-aflags += $(core_arm32-platform-aflags)
88core-platform-aflags += $(arm32-platform-aflags)
89endif
90
91ifneq ($(filter ta_arm32,$(ta-targets)),)
92# Variables for ta-target/sm "ta_arm32"
93CFG_ARM32_ta_arm32 := y
94arch-bits-ta_arm32 := 32
95ta_arm32-platform-cppflags += $(arm32-platform-cppflags)
96ta_arm32-platform-cflags += $(arm32-platform-cflags)
97ta_arm32-platform-cflags += $(platform-cflags-optimization)
98ta_arm32-platform-cflags += $(platform-cflags-debug-info)
99ta_arm32-platform-cflags += -fpie
100ta_arm32-platform-cflags += $(arm32-platform-cflags-generic)
101ifeq ($(platform-hard-float-enabled),y)
102ta_arm32-platform-cflags += $(arm32-platform-cflags-hard-float)
103else
104ta_arm32-platform-cflags += $(arm32-platform-cflags-no-hard-float)
105endif
106ta_arm32-platform-aflags += $(platform-aflags-debug-info)
107ta_arm32-platform-aflags += $(arm32-platform-aflags)
108
109ta-mk-file-export-vars-ta_arm32 += CFG_ARM32_ta_arm32
110ta-mk-file-export-vars-ta_arm32 += ta_arm32-platform-cppflags
111ta-mk-file-export-vars-ta_arm32 += ta_arm32-platform-cflags
112ta-mk-file-export-vars-ta_arm32 += ta_arm32-platform-aflags
113
114ta-mk-file-export-add-ta_arm32 += CROSS_COMPILE32 ?= $$(CROSS_COMPILE)_nl_
115ta-mk-file-export-add-ta_arm32 += CROSS_COMPILE_ta_arm32 ?= $$(CROSS_COMPILE32)_nl_
116endif
117
118ifneq ($(filter ta_arm64,$(ta-targets)),)
119# Variables for ta-target/sm "ta_arm64"
120CFG_ARM64_ta_arm64 := y
121arch-bits-ta_arm64 := 64
122ta_arm64-platform-cppflags += $(arm64-platform-cppflags)
123ta_arm64-platform-cflags += $(arm64-platform-cflags)
124ta_arm64-platform-cflags += $(platform-cflags-optimization)
125ta_arm64-platform-cflags += $(platform-cflags-debug-info)
126ta_arm64-platform-cflags += -fpie
127ta_arm64-platform-cflags += $(arm64-platform-cflags-generic)
128ifeq ($(platform-hard-float-enabled),y)
129ta_arm64-platform-cflags += $(arm64-platform-cflags-hard-float)
130else
131ta_arm64-platform-cflags += $(arm64-platform-cflags-no-hard-float)
132endif
133ta_arm64-platform-aflags += $(platform-aflags-debug-info)
134ta_arm64-platform-aflags += $(arm64-platform-aflags)
135
136ta-mk-file-export-vars-ta_arm64 += CFG_ARM64_ta_arm64
137ta-mk-file-export-vars-ta_arm64 += ta_arm64-platform-cppflags
138ta-mk-file-export-vars-ta_arm64 += ta_arm64-platform-cflags
139ta-mk-file-export-vars-ta_arm64 += ta_arm64-platform-aflags
140
141ta-mk-file-export-add-ta_arm64 += CROSS_COMPILE64 ?= $$(CROSS_COMPILE)_nl_
142ta-mk-file-export-add-ta_arm64 += CROSS_COMPILE_ta_arm64 ?= $$(CROSS_COMPILE64)_nl_
143endif
144
145# Set cross compiler prefix for each submodule
146$(foreach sm, core $(ta-targets), $(eval CROSS_COMPILE_$(sm) ?= $(CROSS_COMPILE$(arch-bits-$(sm)))))
147