xref: /linux/arch/arm64/Makefile (revision 111b29599c189247919a514b6c3a93e828db27c2)
18c2c3df3SCatalin Marinas#
28c2c3df3SCatalin Marinas# arch/arm64/Makefile
38c2c3df3SCatalin Marinas#
48c2c3df3SCatalin Marinas# This file is included by the global makefile so that you can add your own
58c2c3df3SCatalin Marinas# architecture-specific flags and dependencies.
68c2c3df3SCatalin Marinas#
78c2c3df3SCatalin Marinas# This file is subject to the terms and conditions of the GNU General Public
88c2c3df3SCatalin Marinas# License.  See the file "COPYING" in the main directory of this archive
98c2c3df3SCatalin Marinas# for more details.
108c2c3df3SCatalin Marinas#
118c2c3df3SCatalin Marinas# Copyright (C) 1995-2001 by Russell King
128c2c3df3SCatalin Marinas
139abe390eSMark RutlandLDFLAGS_vmlinux	:=--no-undefined -X --pic-veneer
148c2c3df3SCatalin Marinas
15fd9dde6aSNick Desaulniersifeq ($(CONFIG_RELOCATABLE), y)
16fd9dde6aSNick Desaulniers# Pass --no-apply-dynamic-relocs to restore pre-binutils-2.27 behaviour
17fd9dde6aSNick Desaulniers# for relative relocs, since this leads to better Image compression
18fd9dde6aSNick Desaulniers# with the relocation offsets always being zero.
193b92fa74SNick DesaulniersLDFLAGS_vmlinux		+= -shared -Bsymbolic -z notext \
20fd9dde6aSNick Desaulniers			$(call ld-option, --no-apply-dynamic-relocs)
211e48ef7fSArd Biesheuvelendif
221e48ef7fSArd Biesheuvel
236ffe9923SWill Deaconifeq ($(CONFIG_ARM64_ERRATUM_843419),y)
2464ee84c7SMasahiro Yamada  ifeq ($(CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419),y)
256ffe9923SWill DeaconLDFLAGS_vmlinux	+= --fix-cortex-a53-843419
266ffe9923SWill Deacon  endif
276ffe9923SWill Deaconendif
286ffe9923SWill Deacon
2903adcbd9SWill Deaconcc_has_k_constraint := $(call try-run,echo				\
3003adcbd9SWill Deacon	'int main(void) {						\
3103adcbd9SWill Deacon		asm volatile("and w0, w0, %w0" :: "K" (4294967295));	\
3203adcbd9SWill Deacon		return 0;						\
3303adcbd9SWill Deacon	}' | $(CC) -S -x c -o "$$TMP" -,,-DCONFIG_CC_HAS_K_CONSTRAINT=1)
3403adcbd9SWill Deacon
358bf9284dSVladimir Murzinifeq ($(CONFIG_BROKEN_GAS_INST),y)
36bbb56c27SMarc Zyngier$(warning Detected assembler with broken .inst; disassembly will be unreliable)
37bbb56c27SMarc Zyngierendif
38bbb56c27SMarc Zyngier
3971883ae3SSamuel Holland# The GCC option -ffreestanding is required in order to compile code containing
4071883ae3SSamuel Holland# ARM/NEON intrinsics in a non C99-compliant environment (such as the kernel)
4171883ae3SSamuel HollandCC_FLAGS_FPU	:= -ffreestanding
4271883ae3SSamuel Holland# Enable <arm_neon.h>
4371883ae3SSamuel HollandCC_FLAGS_FPU	+= -isystem $(shell $(CC) -print-file-name=include)
4471883ae3SSamuel HollandCC_FLAGS_NO_FPU	:= -mgeneral-regs-only
4571883ae3SSamuel Holland
4671883ae3SSamuel HollandKBUILD_CFLAGS	+= $(CC_FLAGS_NO_FPU) \
4703adcbd9SWill Deacon		   $(compat_vdso) $(cc_has_k_constraint)
48fa63da2aSNathan ChancellorKBUILD_CFLAGS	+= $(call cc-disable-warning, psabi)
498bf9284dSVladimir MurzinKBUILD_AFLAGS	+= $(compat_vdso)
50c09d6a04SWill Deacon
51*446a8351SMiguel Ojedaifeq ($(call test-ge, $(CONFIG_RUSTC_VERSION), 108500),y)
52*446a8351SMiguel OjedaKBUILD_RUSTFLAGS += --target=aarch64-unknown-none-softfloat
53*446a8351SMiguel Ojedaelse
54724a75acSJamie CunliffeKBUILD_RUSTFLAGS += --target=aarch64-unknown-none -Ctarget-feature="-neon"
55*446a8351SMiguel Ojedaendif
56724a75acSJamie Cunliffe
573d6a7b99SAndrew PinskiKBUILD_CFLAGS	+= $(call cc-option,-mabi=lp64)
583d6a7b99SAndrew PinskiKBUILD_AFLAGS	+= $(call cc-option,-mabi=lp64)
593d6a7b99SAndrew Pinski
606e0a66d1SKees Cook# Avoid generating .eh_frame* sections.
6168c76ad4SArd Biesheuvelifneq ($(CONFIG_UNWIND_TABLES),y)
626e0a66d1SKees CookKBUILD_CFLAGS	+= -fno-asynchronous-unwind-tables -fno-unwind-tables
636e0a66d1SKees CookKBUILD_AFLAGS	+= -fno-asynchronous-unwind-tables -fno-unwind-tables
64d077242dSAlice RyhlKBUILD_RUSTFLAGS += -Cforce-unwind-tables=n
6568c76ad4SArd Biesheuvelelse
6668c76ad4SArd BiesheuvelKBUILD_CFLAGS	+= -fasynchronous-unwind-tables
6768c76ad4SArd BiesheuvelKBUILD_AFLAGS	+= -fasynchronous-unwind-tables
68d077242dSAlice RyhlKBUILD_RUSTFLAGS += -Cforce-unwind-tables=y -Zuse-sync-unwind=n
6968c76ad4SArd Biesheuvelendif
706e0a66d1SKees Cook
710a1213faSArd Biesheuvelifeq ($(CONFIG_STACKPROTECTOR_PER_TASK),y)
720a1213faSArd Biesheuvelprepare: stack_protector_prepare
730a1213faSArd Biesheuvelstack_protector_prepare: prepare0
740a1213faSArd Biesheuvel	$(eval KBUILD_CFLAGS += -mstack-protector-guard=sysreg		  \
750a1213faSArd Biesheuvel				-mstack-protector-guard-reg=sp_el0	  \
760a1213faSArd Biesheuvel				-mstack-protector-guard-offset=$(shell	  \
770a1213faSArd Biesheuvel			awk '{if ($$2 == "TSK_STACK_CANARY") print $$3;}' \
78214c0eeaSMasahiro Yamada				$(objtree)/include/generated/asm-offsets.h))
790a1213faSArd Biesheuvelendif
800a1213faSArd Biesheuvel
8192e2294dSMark Brownifeq ($(CONFIG_ARM64_BTI_KERNEL),y)
82c68cf528SMark Rutland  KBUILD_CFLAGS += -mbranch-protection=pac-ret+bti
83724a75acSJamie Cunliffe  KBUILD_RUSTFLAGS += -Zbranch-protection=bti,pac-ret
84c68cf528SMark Rutlandelse ifeq ($(CONFIG_ARM64_PTR_AUTH_KERNEL),y)
85724a75acSJamie Cunliffe  KBUILD_RUSTFLAGS += -Zbranch-protection=pac-ret
86c68cf528SMark Rutland  ifeq ($(CONFIG_CC_HAS_BRANCH_PROT_PAC_RET),y)
87c68cf528SMark Rutland    KBUILD_CFLAGS += -mbranch-protection=pac-ret
8892e2294dSMark Brown  else
89c68cf528SMark Rutland    KBUILD_CFLAGS += -msign-return-address=non-leaf
9092e2294dSMark Brown  endif
91c68cf528SMark Rutlandelse
92c68cf528SMark Rutland  KBUILD_CFLAGS += $(call cc-option,-mbranch-protection=none)
937c78f67eSZhenyu Yeendif
9474afda40SKristina Martsenko
951e249c41SMark Rutland# Tell the assembler to support instructions from the latest target
961e249c41SMark Rutland# architecture.
971e249c41SMark Rutland#
981e249c41SMark Rutland# For non-integrated assemblers we'll pass this on the command line, and for
991e249c41SMark Rutland# integrated assemblers we'll define ARM64_ASM_ARCH and ARM64_ASM_PREAMBLE for
1001e249c41SMark Rutland# inline usage.
1011e249c41SMark Rutland#
1021e249c41SMark Rutland# We cannot pass the same arch flag to the compiler as this would allow it to
1031e249c41SMark Rutland# freely generate instructions which are not supported by earlier architecture
1041e249c41SMark Rutland# versions, which would prevent a single kernel image from working on earlier
1051e249c41SMark Rutland# hardware.
106f469c032SVincenzo Frascinoifeq ($(CONFIG_AS_HAS_ARMV8_5), y)
107f469c032SVincenzo Frascino  asm-arch := armv8.5-a
1081e249c41SMark Rutlandelse ifeq ($(CONFIG_AS_HAS_ARMV8_4), y)
1091e249c41SMark Rutland  asm-arch := armv8.4-a
1101e249c41SMark Rutlandelse ifeq ($(CONFIG_AS_HAS_ARMV8_3), y)
1111e249c41SMark Rutland  asm-arch := armv8.3-a
1121e249c41SMark Rutlandelse ifeq ($(CONFIG_AS_HAS_ARMV8_2), y)
1131e249c41SMark Rutland  asm-arch := armv8.2-a
114f469c032SVincenzo Frascinoendif
115f469c032SVincenzo Frascino
1161764c3edSSami Tolvanenifdef asm-arch
1171764c3edSSami TolvanenKBUILD_CFLAGS	+= -Wa,-march=$(asm-arch) \
1181764c3edSSami Tolvanen		   -DARM64_ASM_ARCH='"$(asm-arch)"'
1197c78f67eSZhenyu Yeendif
1207c78f67eSZhenyu Ye
121da64e9d1SSami Tolvanenifeq ($(CONFIG_SHADOW_CALL_STACK), y)
122da64e9d1SSami TolvanenKBUILD_CFLAGS	+= -ffixed-x18
123d077242dSAlice RyhlKBUILD_RUSTFLAGS += -Zfixed-x18
124da64e9d1SSami Tolvanenendif
125da64e9d1SSami Tolvanen
126a0974e6eSWill Deaconifeq ($(CONFIG_CPU_BIG_ENDIAN), y)
127a0974e6eSWill DeaconKBUILD_CPPFLAGS	+= -mbig-endian
128bcde519eSLuc Van OostenryckCHECKFLAGS	+= -D__AARCH64EB__
129c931d34eSOlof Johansson# Prefer the baremetal ELF build target, but not all toolchains include
130c931d34eSOlof Johansson# it so fall back to the standard linux version if needed.
131311bea3cSNick DesaulniersKBUILD_LDFLAGS	+= -EB $(call ld-option, -maarch64elfb, -maarch64linuxb -z norelro)
132cfa88c79SMichal MarekUTS_MACHINE	:= aarch64_be
133a0974e6eSWill Deaconelse
1348c2c3df3SCatalin MarinasKBUILD_CPPFLAGS	+= -mlittle-endian
135bcde519eSLuc Van OostenryckCHECKFLAGS	+= -D__AARCH64EL__
136c931d34eSOlof Johansson# Same as above, prefer ELF but fall back to linux target if needed.
137311bea3cSNick DesaulniersKBUILD_LDFLAGS	+= -EL $(call ld-option, -maarch64elf, -maarch64linux -z norelro)
138cfa88c79SMichal MarekUTS_MACHINE	:= aarch64
139a0974e6eSWill Deaconendif
1408c2c3df3SCatalin Marinas
141311bea3cSNick Desaulniersifeq ($(CONFIG_LD_IS_LLD), y)
142311bea3cSNick DesaulniersKBUILD_LDFLAGS	+= -z norelro
143311bea3cSNick Desaulniersendif
144311bea3cSNick Desaulniers
1451f2f01b1SLuc Van OostenryckCHECKFLAGS	+= -D__aarch64__
1468c2c3df3SCatalin Marinas
147baaf553dSMark Rutlandifeq ($(CONFIG_DYNAMIC_FTRACE_WITH_CALL_OPS),y)
148baaf553dSMark Rutland  KBUILD_CPPFLAGS += -DCC_USING_PATCHABLE_FUNCTION_ENTRY
149baaf553dSMark Rutland  CC_FLAGS_FTRACE := -fpatchable-function-entry=4,2
150baaf553dSMark Rutlandelse ifeq ($(CONFIG_DYNAMIC_FTRACE_WITH_ARGS),y)
1513b23e499STorsten Duwe  KBUILD_CPPFLAGS += -DCC_USING_PATCHABLE_FUNCTION_ENTRY
1523b23e499STorsten Duwe  CC_FLAGS_FTRACE := -fpatchable-function-entry=2
1533b23e499STorsten Duweendif
1543b23e499STorsten Duwe
155b2f557eaSAndrey Konovalovifeq ($(CONFIG_KASAN_SW_TAGS), y)
156b2f557eaSAndrey KonovalovKASAN_SHADOW_SCALE_SHIFT := 4
1570fea6e9aSAndrey Konovalovelse ifeq ($(CONFIG_KASAN_GENERIC), y)
158b2f557eaSAndrey KonovalovKASAN_SHADOW_SCALE_SHIFT := 3
159b2f557eaSAndrey Konovalovendif
160b2f557eaSAndrey Konovalov
161b2f557eaSAndrey KonovalovKBUILD_CFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT)
162b2f557eaSAndrey KonovalovKBUILD_CPPFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT)
163b2f557eaSAndrey KonovalovKBUILD_AFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT)
164b2f557eaSAndrey Konovalov
1658c2c3df3SCatalin Marinaslibs-y		:= arch/arm64/lib/ $(libs-y)
166c1aac64dSMasahiro Yamadalibs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a
1678c2c3df3SCatalin Marinas
1688c2c3df3SCatalin Marinas# Default target when executing plain make
16906995804SMichal Marekboot		:= arch/arm64/boot
170c37b830fSArd Biesheuvel
1717a23b027SSimon GlassBOOT_TARGETS	:= Image vmlinuz.efi image.fit
1720dc1670bSSimon Glass
1730dc1670bSSimon GlassPHONY += $(BOOT_TARGETS)
1740dc1670bSSimon Glass
175c37b830fSArd Biesheuvelifeq ($(CONFIG_EFI_ZBOOT),)
17606995804SMichal MarekKBUILD_IMAGE	:= $(boot)/Image.gz
177c37b830fSArd Biesheuvelelse
178c37b830fSArd BiesheuvelKBUILD_IMAGE	:= $(boot)/vmlinuz.efi
179c37b830fSArd Biesheuvelendif
1808c2c3df3SCatalin Marinas
181c37b830fSArd Biesheuvelall:	$(notdir $(KBUILD_IMAGE))
1828c2c3df3SCatalin Marinas
1837a23b027SSimon Glassimage.fit: dtbs
1847a23b027SSimon Glass
1857a23b027SSimon Glassvmlinuz.efi image.fit: Image
1860dc1670bSSimon Glass$(BOOT_TARGETS): vmlinux
1870723c05fSOlof Johansson	$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
1880723c05fSOlof Johansson
1899ca4e58cSMasahiro YamadaImage.%: Image
19070f915a2SRob Herring	$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
1918c2c3df3SCatalin Marinas
1924c7be57fSLinus Torvaldsifeq ($(CONFIG_COMPRESSED_INSTALL),y)
1934c7be57fSLinus Torvalds DEFAULT_KBUILD_IMAGE = $(KBUILD_IMAGE)
1944c7be57fSLinus Torvaldselse
1954c7be57fSLinus Torvalds DEFAULT_KBUILD_IMAGE = $(boot)/Image
1964c7be57fSLinus Torvaldsendif
1974c7be57fSLinus Torvalds
1984c7be57fSLinus Torvaldsinstall: KBUILD_IMAGE := $(DEFAULT_KBUILD_IMAGE)
19970a4039bSMasahiro Yamadainstall zinstall:
200f774f5bbSMasahiro Yamada	$(call cmd,install)
2018c2c3df3SCatalin Marinas
2020c6c2d36SMark Brownarchprepare:
2030c6c2d36SMark Brown	$(Q)$(MAKE) $(build)=arch/arm64/tools kapi
20464ee84c7SMasahiro Yamadaifeq ($(CONFIG_ARM64_ERRATUM_843419),y)
20564ee84c7SMasahiro Yamada  ifneq ($(CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419),y)
20664ee84c7SMasahiro Yamada	@echo "warning: ld does not support --fix-cortex-a53-843419; kernel may be susceptible to erratum" >&2
20764ee84c7SMasahiro Yamada  endif
20864ee84c7SMasahiro Yamadaendif
20964ee84c7SMasahiro Yamadaifeq ($(CONFIG_ARM64_USE_LSE_ATOMICS),y)
21064ee84c7SMasahiro Yamada  ifneq ($(CONFIG_ARM64_LSE_ATOMICS),y)
21164ee84c7SMasahiro Yamada	@echo "warning: LSE atomics not supported by binutils" >&2
21264ee84c7SMasahiro Yamada  endif
21364ee84c7SMasahiro Yamadaendif
21464ee84c7SMasahiro Yamada
21598356eb0SVictor Kamenskyifeq ($(KBUILD_EXTMOD),)
216a66649daSKevin Brodsky# We need to generate vdso-offsets.h before compiling certain files in kernel/.
217a66649daSKevin Brodsky# In order to do that, we should use the archprepare target, but we can't since
218a66649daSKevin Brodsky# asm-offsets.h is included in some files used to generate vdso-offsets.h, and
219a66649daSKevin Brodsky# asm-offsets.h is built in prepare0, for which archprepare is a dependency.
220a66649daSKevin Brodsky# Therefore we need to generate the header after prepare0 has been made, hence
221a66649daSKevin Brodsky# this hack.
222a66649daSKevin Brodskyprepare: vdso_prepare
223a66649daSKevin Brodskyvdso_prepare: prepare0
224a5b8ca97SMasahiro Yamada	$(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso \
225a5b8ca97SMasahiro Yamada	include/generated/vdso-offsets.h arch/arm64/kernel/vdso/vdso.so
226a5b8ca97SMasahiro Yamadaifdef CONFIG_COMPAT_VDSO
227a5b8ca97SMasahiro Yamada	$(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso32 \
228c7767f5cSKevin Brodsky	arch/arm64/kernel/vdso32/vdso.so
229a5b8ca97SMasahiro Yamadaendif
23098356eb0SVictor Kamenskyendif
231a66649daSKevin Brodsky
23256769ba4SMasahiro Yamadavdso-install-y				+= arch/arm64/kernel/vdso/vdso.so.dbg
233a099bec7SMasahiro Yamadavdso-install-$(CONFIG_COMPAT_VDSO)	+= arch/arm64/kernel/vdso32/vdso32.so.dbg
23456769ba4SMasahiro Yamada
235c6cd63f5SMark Browninclude $(srctree)/scripts/Makefile.defconf
236c6cd63f5SMark Brown
237c6cd63f5SMark BrownPHONY += virtconfig
238c6cd63f5SMark Brownvirtconfig:
239c6cd63f5SMark Brown	$(call merge_into_defconfig_override,defconfig,virt)
240c6cd63f5SMark Brown
2418c2c3df3SCatalin Marinasdefine archhelp
2428c2c3df3SCatalin Marinas  echo  '* Image.gz      - Compressed kernel image (arch/$(ARCH)/boot/Image.gz)'
2438c2c3df3SCatalin Marinas  echo  '  Image         - Uncompressed kernel image (arch/$(ARCH)/boot/Image)'
2447a23b027SSimon Glass  echo  '  image.fit     - Flat Image Tree (arch/$(ARCH)/boot/image.fit)'
2454c7be57fSLinus Torvalds  echo  '  install       - Install kernel (compressed if COMPRESSED_INSTALL set)'
2468c2c3df3SCatalin Marinas  echo  '  zinstall      - Install compressed kernel'
2478c2c3df3SCatalin Marinas  echo  '                  Install using (your) ~/bin/installkernel or'
2488c2c3df3SCatalin Marinas  echo  '                  (distribution) /sbin/installkernel or'
2498c2c3df3SCatalin Marinas  echo  '                  install to $$(INSTALL_PATH) and run lilo'
2508c2c3df3SCatalin Marinasendef
251