blob: 2f1de88651e6d44a4e4ba96a56a66840fdd72747 [file] [log] [blame]
Catalin Marinas8c2c3df2012-04-20 14:45:54 +01001#
2# arch/arm64/Makefile
3#
4# This file is included by the global makefile so that you can add your own
5# architecture-specific flags and dependencies.
6#
7# This file is subject to the terms and conditions of the GNU General Public
8# License. See the file "COPYING" in the main directory of this archive
9# for more details.
10#
11# Copyright (C) 1995-2001 by Russell King
12
Nick Desaulniers311bea32020-12-17 16:24:32 -080013LDFLAGS_vmlinux :=--no-undefined -X
Catalin Marinas8c2c3df2012-04-20 14:45:54 +010014
Nick Desaulniersfd9dde62017-10-27 09:33:41 -070015ifeq ($(CONFIG_RELOCATABLE), y)
16# Pass --no-apply-dynamic-relocs to restore pre-binutils-2.27 behaviour
17# for relative relocs, since this leads to better Image compression
18# with the relocation offsets always being zero.
Nick Desaulniers3b92fa72020-10-16 10:53:39 -070019LDFLAGS_vmlinux += -shared -Bsymbolic -z notext \
Nick Desaulniersfd9dde62017-10-27 09:33:41 -070020 $(call ld-option, --no-apply-dynamic-relocs)
Ard Biesheuvel1e48ef72016-01-26 09:13:44 +010021endif
22
Will Deacon6ffe9922016-08-22 11:58:36 +010023ifeq ($(CONFIG_ARM64_ERRATUM_843419),y)
Masahiro Yamada64ee84c2021-08-01 14:35:25 +090024 ifeq ($(CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419),y)
Will Deacon6ffe9922016-08-22 11:58:36 +010025LDFLAGS_vmlinux += --fix-cortex-a53-843419
26 endif
27endif
28
Will Deacon03adcbd2019-08-29 14:34:42 +010029cc_has_k_constraint := $(call try-run,echo \
30 'int main(void) { \
31 asm volatile("and w0, w0, %w0" :: "K" (4294967295)); \
32 return 0; \
33 }' | $(CC) -S -x c -o "$$TMP" -,,-DCONFIG_CC_HAS_K_CONSTRAINT=1)
34
Vladimir Murzin8bf92842020-01-15 14:18:25 +000035ifeq ($(CONFIG_BROKEN_GAS_INST),y)
Marc Zyngierbbb56c22016-12-06 15:27:43 +000036$(warning Detected assembler with broken .inst; disassembly will be unreliable)
37endif
38
Vladimir Murzin8bf92842020-01-15 14:18:25 +000039KBUILD_CFLAGS += -mgeneral-regs-only \
Will Deacon03adcbd2019-08-29 14:34:42 +010040 $(compat_vdso) $(cc_has_k_constraint)
Nathan Chancellorfa63da22019-06-11 10:19:32 -070041KBUILD_CFLAGS += $(call cc-disable-warning, psabi)
Vladimir Murzin8bf92842020-01-15 14:18:25 +000042KBUILD_AFLAGS += $(compat_vdso)
Will Deaconc09d6a02015-02-03 16:14:13 +000043
Andrew Pinski3d6a7b92017-09-18 11:20:20 +010044KBUILD_CFLAGS += $(call cc-option,-mabi=lp64)
45KBUILD_AFLAGS += $(call cc-option,-mabi=lp64)
46
Kees Cook6e0a66d2020-08-21 12:42:51 -070047# Avoid generating .eh_frame* sections.
48KBUILD_CFLAGS += -fno-asynchronous-unwind-tables -fno-unwind-tables
49KBUILD_AFLAGS += -fno-asynchronous-unwind-tables -fno-unwind-tables
50
Ard Biesheuvel0a1213f2018-12-12 13:08:44 +010051ifeq ($(CONFIG_STACKPROTECTOR_PER_TASK),y)
52prepare: stack_protector_prepare
53stack_protector_prepare: prepare0
54 $(eval KBUILD_CFLAGS += -mstack-protector-guard=sysreg \
55 -mstack-protector-guard-reg=sp_el0 \
56 -mstack-protector-guard-offset=$(shell \
57 awk '{if ($$2 == "TSK_STACK_CANARY") print $$3;}' \
58 include/generated/asm-offsets.h))
59endif
60
Ard Biesheuvel2c54b422021-12-13 15:02:52 +010061ifeq ($(CONFIG_AS_HAS_ARMV8_2), y)
62# make sure to pass the newest target architecture to -march.
63asm-arch := armv8.2-a
64endif
65
Mark Brownb8fdef32020-03-31 20:44:59 +010066# Ensure that if the compiler supports branch protection we default it
67# off, this will be overridden if we are using branch protection.
68branch-prot-flags-y += $(call cc-option,-mbranch-protection=none)
69
Daniel Kissb27a9f42021-06-13 11:26:31 +020070ifeq ($(CONFIG_ARM64_PTR_AUTH_KERNEL),y)
Kristina Martsenko74afda42020-03-13 14:35:03 +053071branch-prot-flags-$(CONFIG_CC_HAS_SIGN_RETURN_ADDRESS) := -msign-return-address=all
Mark Brown717b9382020-05-06 20:51:28 +010072# We enable additional protection for leaf functions as there is some
73# narrow potential for ROP protection benefits and no substantial
74# performance impact has been observed.
Mark Brown92e22942020-05-06 20:51:29 +010075ifeq ($(CONFIG_ARM64_BTI_KERNEL),y)
76branch-prot-flags-$(CONFIG_CC_HAS_BRANCH_PROT_PAC_RET_BTI) := -mbranch-protection=pac-ret+leaf+bti
77else
Kristina Martsenko74afda42020-03-13 14:35:03 +053078branch-prot-flags-$(CONFIG_CC_HAS_BRANCH_PROT_PAC_RET) := -mbranch-protection=pac-ret+leaf
Mark Brown92e22942020-05-06 20:51:29 +010079endif
Kristina Martsenko74afda42020-03-13 14:35:03 +053080# -march=armv8.3-a enables the non-nops instructions for PAC, to avoid the
81# compiler to generate them and consequently to break the single image contract
82# we pass it only to the assembler. This option is utilized only in case of non
83# integrated assemblers.
Sami Tolvanen1764c3e2020-08-27 13:36:08 -070084ifeq ($(CONFIG_AS_HAS_PAC), y)
85asm-arch := armv8.3-a
Kristina Martsenko74afda42020-03-13 14:35:03 +053086endif
Zhenyu Ye7c78f672020-07-15 15:19:44 +080087endif
Kristina Martsenko74afda42020-03-13 14:35:03 +053088
Mark Brownb8fdef32020-03-31 20:44:59 +010089KBUILD_CFLAGS += $(branch-prot-flags-y)
90
Zhenyu Ye7c78f672020-07-15 15:19:44 +080091ifeq ($(CONFIG_AS_HAS_ARMV8_4), y)
92# make sure to pass the newest target architecture to -march.
Sami Tolvanen1764c3e2020-08-27 13:36:08 -070093asm-arch := armv8.4-a
94endif
95
Vincenzo Frascinof469c032020-12-22 12:01:24 -080096ifeq ($(CONFIG_AS_HAS_ARMV8_5), y)
97# make sure to pass the newest target architecture to -march.
98asm-arch := armv8.5-a
99endif
100
Sami Tolvanen1764c3e2020-08-27 13:36:08 -0700101ifdef asm-arch
102KBUILD_CFLAGS += -Wa,-march=$(asm-arch) \
103 -DARM64_ASM_ARCH='"$(asm-arch)"'
Zhenyu Ye7c78f672020-07-15 15:19:44 +0800104endif
105
Sami Tolvanenda64e9d2020-04-27 09:00:11 -0700106ifeq ($(CONFIG_SHADOW_CALL_STACK), y)
107KBUILD_CFLAGS += -ffixed-x18
108endif
109
Will Deacona0974e62013-10-11 14:52:08 +0100110ifeq ($(CONFIG_CPU_BIG_ENDIAN), y)
111KBUILD_CPPFLAGS += -mbig-endian
Luc Van Oostenryckbcde5192017-06-24 17:42:11 +0200112CHECKFLAGS += -D__AARCH64EB__
Olof Johanssonc931d342018-07-13 08:30:33 -0700113# Prefer the baremetal ELF build target, but not all toolchains include
114# it so fall back to the standard linux version if needed.
Nick Desaulniers311bea32020-12-17 16:24:32 -0800115KBUILD_LDFLAGS += -EB $(call ld-option, -maarch64elfb, -maarch64linuxb -z norelro)
Michal Marekcfa88c72016-08-30 10:31:35 +0200116UTS_MACHINE := aarch64_be
Will Deacona0974e62013-10-11 14:52:08 +0100117else
Catalin Marinas8c2c3df2012-04-20 14:45:54 +0100118KBUILD_CPPFLAGS += -mlittle-endian
Luc Van Oostenryckbcde5192017-06-24 17:42:11 +0200119CHECKFLAGS += -D__AARCH64EL__
Olof Johanssonc931d342018-07-13 08:30:33 -0700120# Same as above, prefer ELF but fall back to linux target if needed.
Nick Desaulniers311bea32020-12-17 16:24:32 -0800121KBUILD_LDFLAGS += -EL $(call ld-option, -maarch64elf, -maarch64linux -z norelro)
Michal Marekcfa88c72016-08-30 10:31:35 +0200122UTS_MACHINE := aarch64
Will Deacona0974e62013-10-11 14:52:08 +0100123endif
Catalin Marinas8c2c3df2012-04-20 14:45:54 +0100124
Nick Desaulniers311bea32020-12-17 16:24:32 -0800125ifeq ($(CONFIG_LD_IS_LLD), y)
126KBUILD_LDFLAGS += -z norelro
127endif
128
Luc Van Oostenryck1f2f01b2018-05-30 22:48:38 +0200129CHECKFLAGS += -D__aarch64__
Catalin Marinas8c2c3df2012-04-20 14:45:54 +0100130
Torsten Duwe3b23e4992019-02-08 16:10:19 +0100131ifeq ($(CONFIG_DYNAMIC_FTRACE_WITH_REGS),y)
132 KBUILD_CPPFLAGS += -DCC_USING_PATCHABLE_FUNCTION_ENTRY
133 CC_FLAGS_FTRACE := -fpatchable-function-entry=2
134endif
135
Catalin Marinas8c2c3df2012-04-20 14:45:54 +0100136# Default value
137head-y := arch/arm64/kernel/head.o
138
Andrey Konovalovb2f557e2018-12-28 00:29:57 -0800139ifeq ($(CONFIG_KASAN_SW_TAGS), y)
140KASAN_SHADOW_SCALE_SHIFT := 4
Andrey Konovalov0fea6e92020-12-22 12:02:06 -0800141else ifeq ($(CONFIG_KASAN_GENERIC), y)
Andrey Konovalovb2f557e2018-12-28 00:29:57 -0800142KASAN_SHADOW_SCALE_SHIFT := 3
143endif
144
145KBUILD_CFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT)
146KBUILD_CPPFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT)
147KBUILD_AFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT)
148
Catalin Marinas8c2c3df2012-04-20 14:45:54 +0100149libs-y := arch/arm64/lib/ $(libs-y)
Masahiro Yamadac1aac642020-06-04 11:20:30 +0900150libs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a
Catalin Marinas8c2c3df2012-04-20 14:45:54 +0100151
152# Default target when executing plain make
Michal Marek06995802016-11-22 22:34:29 +0100153boot := arch/arm64/boot
154KBUILD_IMAGE := $(boot)/Image.gz
Catalin Marinas8c2c3df2012-04-20 14:45:54 +0100155
Rob Herring37c8a5f2018-01-10 15:19:37 -0600156all: Image.gz
Catalin Marinas8c2c3df2012-04-20 14:45:54 +0100157
Catalin Marinas8c2c3df2012-04-20 14:45:54 +0100158
Olof Johansson0723c052015-07-16 21:26:16 +0100159Image: vmlinux
160 $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
161
Masahiro Yamada9ca4e582016-06-21 10:44:00 +0900162Image.%: Image
Rob Herring70f915a2012-12-03 17:17:21 -0600163 $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
Catalin Marinas8c2c3df2012-04-20 14:45:54 +0100164
Masahiro Yamada70a40392021-07-29 23:05:27 +0900165install: install-image := Image
166zinstall: install-image := Image.gz
167install zinstall:
168 $(CONFIG_SHELL) $(srctree)/$(boot)/install.sh $(KERNELRELEASE) \
169 $(boot)/$(install-image) System.map "$(INSTALL_PATH)"
Catalin Marinas8c2c3df2012-04-20 14:45:54 +0100170
Kyle McMartin3c017422013-06-16 20:32:44 +0100171PHONY += vdso_install
172vdso_install:
173 $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso $@
Frank van der Linden5d28ba52020-08-27 23:40:12 +0000174 $(if $(CONFIG_COMPAT_VDSO), \
175 $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso32 $@)
Kyle McMartin3c017422013-06-16 20:32:44 +0100176
Mark Brown0c6c2d32021-04-28 13:12:31 +0100177archprepare:
178 $(Q)$(MAKE) $(build)=arch/arm64/tools kapi
Masahiro Yamada64ee84c2021-08-01 14:35:25 +0900179ifeq ($(CONFIG_ARM64_ERRATUM_843419),y)
180 ifneq ($(CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419),y)
181 @echo "warning: ld does not support --fix-cortex-a53-843419; kernel may be susceptible to erratum" >&2
182 endif
183endif
184ifeq ($(CONFIG_ARM64_USE_LSE_ATOMICS),y)
185 ifneq ($(CONFIG_ARM64_LSE_ATOMICS),y)
186 @echo "warning: LSE atomics not supported by binutils" >&2
187 endif
188endif
189
Victor Kamensky98356eb2018-10-30 16:37:10 -0700190ifeq ($(KBUILD_EXTMOD),)
Kevin Brodskya66649d2016-05-12 17:39:15 +0100191# We need to generate vdso-offsets.h before compiling certain files in kernel/.
192# In order to do that, we should use the archprepare target, but we can't since
193# asm-offsets.h is included in some files used to generate vdso-offsets.h, and
194# asm-offsets.h is built in prepare0, for which archprepare is a dependency.
195# Therefore we need to generate the header after prepare0 has been made, hence
196# this hack.
197prepare: vdso_prepare
198vdso_prepare: prepare0
Masahiro Yamadaa5b8ca92020-12-18 11:45:40 +0900199 $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso \
200 include/generated/vdso-offsets.h arch/arm64/kernel/vdso/vdso.so
201ifdef CONFIG_COMPAT_VDSO
202 $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso32 \
203 include/generated/vdso32-offsets.h arch/arm64/kernel/vdso32/vdso.so
204endif
Victor Kamensky98356eb2018-10-30 16:37:10 -0700205endif
Kevin Brodskya66649d2016-05-12 17:39:15 +0100206
Catalin Marinas8c2c3df2012-04-20 14:45:54 +0100207define archhelp
208 echo '* Image.gz - Compressed kernel image (arch/$(ARCH)/boot/Image.gz)'
209 echo ' Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)'
Catalin Marinas8c2c3df2012-04-20 14:45:54 +0100210 echo ' install - Install uncompressed kernel'
211 echo ' zinstall - Install compressed kernel'
212 echo ' Install using (your) ~/bin/installkernel or'
213 echo ' (distribution) /sbin/installkernel or'
214 echo ' install to $$(INSTALL_PATH) and run lilo'
215endef