xref: /linux/arch/arm64/Makefile (revision dee264c16a6334dcdbea5c186f5ff35f98b1df42)
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.
19*2555d4c6SArnd BergmannLDFLAGS_vmlinux	+= -shared -Bsymbolic -z notext --no-apply-dynamic-relocs
201e48ef7fSArd Biesheuvelendif
211e48ef7fSArd Biesheuvel
226ffe9923SWill Deaconifeq ($(CONFIG_ARM64_ERRATUM_843419),y)
236ffe9923SWill DeaconLDFLAGS_vmlinux	+= --fix-cortex-a53-843419
246ffe9923SWill Deaconendif
256ffe9923SWill Deacon
2603adcbd9SWill Deaconcc_has_k_constraint := $(call try-run,echo				\
2703adcbd9SWill Deacon	'int main(void) {						\
2803adcbd9SWill Deacon		asm volatile("and w0, w0, %w0" :: "K" (4294967295));	\
2903adcbd9SWill Deacon		return 0;						\
3003adcbd9SWill Deacon	}' | $(CC) -S -x c -o "$$TMP" -,,-DCONFIG_CC_HAS_K_CONSTRAINT=1)
3103adcbd9SWill Deacon
328bf9284dSVladimir Murzinifeq ($(CONFIG_BROKEN_GAS_INST),y)
33bbb56c27SMarc Zyngier$(warning Detected assembler with broken .inst; disassembly will be unreliable)
34bbb56c27SMarc Zyngierendif
35bbb56c27SMarc Zyngier
3671883ae3SSamuel Holland# The GCC option -ffreestanding is required in order to compile code containing
3771883ae3SSamuel Holland# ARM/NEON intrinsics in a non C99-compliant environment (such as the kernel)
3871883ae3SSamuel HollandCC_FLAGS_FPU	:= -ffreestanding
3971883ae3SSamuel Holland# Enable <arm_neon.h>
4071883ae3SSamuel HollandCC_FLAGS_FPU	+= -isystem $(shell $(CC) -print-file-name=include)
4171883ae3SSamuel HollandCC_FLAGS_NO_FPU	:= -mgeneral-regs-only
4271883ae3SSamuel Holland
4371883ae3SSamuel HollandKBUILD_CFLAGS	+= $(CC_FLAGS_NO_FPU) \
4403adcbd9SWill Deacon		   $(compat_vdso) $(cc_has_k_constraint)
45fa63da2aSNathan ChancellorKBUILD_CFLAGS	+= $(call cc-disable-warning, psabi)
468bf9284dSVladimir MurzinKBUILD_AFLAGS	+= $(compat_vdso)
47c09d6a04SWill Deacon
48ac954145SMiguel Ojedaifeq ($(call rustc-min-version, 108500),y)
49446a8351SMiguel OjedaKBUILD_RUSTFLAGS += --target=aarch64-unknown-none-softfloat
50446a8351SMiguel Ojedaelse
51724a75acSJamie CunliffeKBUILD_RUSTFLAGS += --target=aarch64-unknown-none -Ctarget-feature="-neon"
52446a8351SMiguel Ojedaendif
53724a75acSJamie Cunliffe
543d6a7b99SAndrew PinskiKBUILD_CFLAGS	+= $(call cc-option,-mabi=lp64)
553d6a7b99SAndrew PinskiKBUILD_AFLAGS	+= $(call cc-option,-mabi=lp64)
563d6a7b99SAndrew Pinski
576e0a66d1SKees Cook# Avoid generating .eh_frame* sections.
5868c76ad4SArd Biesheuvelifneq ($(CONFIG_UNWIND_TABLES),y)
596e0a66d1SKees CookKBUILD_CFLAGS	+= -fno-asynchronous-unwind-tables -fno-unwind-tables
606e0a66d1SKees CookKBUILD_AFLAGS	+= -fno-asynchronous-unwind-tables -fno-unwind-tables
61d077242dSAlice RyhlKBUILD_RUSTFLAGS += -Cforce-unwind-tables=n
6268c76ad4SArd Biesheuvelelse
6368c76ad4SArd BiesheuvelKBUILD_CFLAGS	+= -fasynchronous-unwind-tables
6468c76ad4SArd BiesheuvelKBUILD_AFLAGS	+= -fasynchronous-unwind-tables
65d077242dSAlice RyhlKBUILD_RUSTFLAGS += -Cforce-unwind-tables=y -Zuse-sync-unwind=n
6668c76ad4SArd Biesheuvelendif
676e0a66d1SKees Cook
680a1213faSArd Biesheuvelifeq ($(CONFIG_STACKPROTECTOR_PER_TASK),y)
690a1213faSArd Biesheuvelprepare: stack_protector_prepare
700a1213faSArd Biesheuvelstack_protector_prepare: prepare0
710a1213faSArd Biesheuvel	$(eval KBUILD_CFLAGS += -mstack-protector-guard=sysreg		  \
720a1213faSArd Biesheuvel				-mstack-protector-guard-reg=sp_el0	  \
730a1213faSArd Biesheuvel				-mstack-protector-guard-offset=$(shell	  \
740a1213faSArd Biesheuvel			awk '{if ($$2 == "TSK_STACK_CANARY") print $$3;}' \
75214c0eeaSMasahiro Yamada				$(objtree)/include/generated/asm-offsets.h))
760a1213faSArd Biesheuvelendif
770a1213faSArd Biesheuvel
7892e2294dSMark Brownifeq ($(CONFIG_ARM64_BTI_KERNEL),y)
79c68cf528SMark Rutland  KBUILD_CFLAGS += -mbranch-protection=pac-ret+bti
80724a75acSJamie Cunliffe  KBUILD_RUSTFLAGS += -Zbranch-protection=bti,pac-ret
81c68cf528SMark Rutlandelse ifeq ($(CONFIG_ARM64_PTR_AUTH_KERNEL),y)
82724a75acSJamie Cunliffe  KBUILD_RUSTFLAGS += -Zbranch-protection=pac-ret
83c68cf528SMark Rutland  ifeq ($(CONFIG_CC_HAS_BRANCH_PROT_PAC_RET),y)
84c68cf528SMark Rutland    KBUILD_CFLAGS += -mbranch-protection=pac-ret
8592e2294dSMark Brown  else
86c68cf528SMark Rutland    KBUILD_CFLAGS += -msign-return-address=non-leaf
8792e2294dSMark Brown  endif
88c68cf528SMark Rutlandelse
89c68cf528SMark Rutland  KBUILD_CFLAGS += $(call cc-option,-mbranch-protection=none)
907c78f67eSZhenyu Yeendif
9174afda40SKristina Martsenko
921e249c41SMark Rutland# Tell the assembler to support instructions from the latest target
931e249c41SMark Rutland# architecture.
941e249c41SMark Rutland#
951e249c41SMark Rutland# For non-integrated assemblers we'll pass this on the command line, and for
961e249c41SMark Rutland# integrated assemblers we'll define ARM64_ASM_ARCH and ARM64_ASM_PREAMBLE for
971e249c41SMark Rutland# inline usage.
981e249c41SMark Rutland#
991e249c41SMark Rutland# We cannot pass the same arch flag to the compiler as this would allow it to
1001e249c41SMark Rutland# freely generate instructions which are not supported by earlier architecture
1011e249c41SMark Rutland# versions, which would prevent a single kernel image from working on earlier
1021e249c41SMark Rutland# hardware.
103f469c032SVincenzo Frascinoifeq ($(CONFIG_AS_HAS_ARMV8_5), y)
104f469c032SVincenzo Frascino  asm-arch := armv8.5-a
105*2555d4c6SArnd Bergmannelse
1061e249c41SMark Rutland  asm-arch := armv8.4-a
107f469c032SVincenzo Frascinoendif
108f469c032SVincenzo Frascino
1091764c3edSSami Tolvanenifdef asm-arch
1101764c3edSSami TolvanenKBUILD_CFLAGS	+= -Wa,-march=$(asm-arch) \
1111764c3edSSami Tolvanen		   -DARM64_ASM_ARCH='"$(asm-arch)"'
1127c78f67eSZhenyu Yeendif
1137c78f67eSZhenyu Ye
114da64e9d1SSami Tolvanenifeq ($(CONFIG_SHADOW_CALL_STACK), y)
115da64e9d1SSami TolvanenKBUILD_CFLAGS	+= -ffixed-x18
116d077242dSAlice RyhlKBUILD_RUSTFLAGS += -Zfixed-x18
117da64e9d1SSami Tolvanenendif
118da64e9d1SSami Tolvanen
119a0974e6eSWill Deaconifeq ($(CONFIG_CPU_BIG_ENDIAN), y)
120a0974e6eSWill DeaconKBUILD_CPPFLAGS	+= -mbig-endian
121bcde519eSLuc Van OostenryckCHECKFLAGS	+= -D__AARCH64EB__
122c931d34eSOlof Johansson# Prefer the baremetal ELF build target, but not all toolchains include
123c931d34eSOlof Johansson# it so fall back to the standard linux version if needed.
124311bea3cSNick DesaulniersKBUILD_LDFLAGS	+= -EB $(call ld-option, -maarch64elfb, -maarch64linuxb -z norelro)
125cfa88c79SMichal MarekUTS_MACHINE	:= aarch64_be
126a0974e6eSWill Deaconelse
1278c2c3df3SCatalin MarinasKBUILD_CPPFLAGS	+= -mlittle-endian
128bcde519eSLuc Van OostenryckCHECKFLAGS	+= -D__AARCH64EL__
129c931d34eSOlof Johansson# Same as above, prefer ELF but fall back to linux target if needed.
130311bea3cSNick DesaulniersKBUILD_LDFLAGS	+= -EL $(call ld-option, -maarch64elf, -maarch64linux -z norelro)
131cfa88c79SMichal MarekUTS_MACHINE	:= aarch64
132a0974e6eSWill Deaconendif
1338c2c3df3SCatalin Marinas
134311bea3cSNick Desaulniersifeq ($(CONFIG_LD_IS_LLD), y)
135311bea3cSNick DesaulniersKBUILD_LDFLAGS	+= -z norelro
136311bea3cSNick Desaulniersendif
137311bea3cSNick Desaulniers
1381f2f01b1SLuc Van OostenryckCHECKFLAGS	+= -D__aarch64__
1398c2c3df3SCatalin Marinas
140baaf553dSMark Rutlandifeq ($(CONFIG_DYNAMIC_FTRACE_WITH_CALL_OPS),y)
141baaf553dSMark Rutland  KBUILD_CPPFLAGS += -DCC_USING_PATCHABLE_FUNCTION_ENTRY
142baaf553dSMark Rutland  CC_FLAGS_FTRACE := -fpatchable-function-entry=4,2
143baaf553dSMark Rutlandelse ifeq ($(CONFIG_DYNAMIC_FTRACE_WITH_ARGS),y)
1443b23e499STorsten Duwe  KBUILD_CPPFLAGS += -DCC_USING_PATCHABLE_FUNCTION_ENTRY
1453b23e499STorsten Duwe  CC_FLAGS_FTRACE := -fpatchable-function-entry=2
1463b23e499STorsten Duweendif
1473b23e499STorsten Duwe
148b2f557eaSAndrey Konovalovifeq ($(CONFIG_KASAN_SW_TAGS), y)
149b2f557eaSAndrey KonovalovKASAN_SHADOW_SCALE_SHIFT := 4
1500fea6e9aSAndrey Konovalovelse ifeq ($(CONFIG_KASAN_GENERIC), y)
151b2f557eaSAndrey KonovalovKASAN_SHADOW_SCALE_SHIFT := 3
152b2f557eaSAndrey Konovalovendif
153b2f557eaSAndrey Konovalov
154b2f557eaSAndrey KonovalovKBUILD_CFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT)
155b2f557eaSAndrey KonovalovKBUILD_CPPFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT)
156b2f557eaSAndrey KonovalovKBUILD_AFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT)
157b2f557eaSAndrey Konovalov
1588c2c3df3SCatalin Marinaslibs-y		:= arch/arm64/lib/ $(libs-y)
159c1aac64dSMasahiro Yamadalibs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a
1608c2c3df3SCatalin Marinas
1618c2c3df3SCatalin Marinas# Default target when executing plain make
16206995804SMichal Marekboot		:= arch/arm64/boot
163c37b830fSArd Biesheuvel
1647a23b027SSimon GlassBOOT_TARGETS	:= Image vmlinuz.efi image.fit
1650dc1670bSSimon Glass
1660dc1670bSSimon GlassPHONY += $(BOOT_TARGETS)
1670dc1670bSSimon Glass
168c37b830fSArd Biesheuvelifeq ($(CONFIG_EFI_ZBOOT),)
16906995804SMichal MarekKBUILD_IMAGE	:= $(boot)/Image.gz
170c37b830fSArd Biesheuvelelse
171c37b830fSArd BiesheuvelKBUILD_IMAGE	:= $(boot)/vmlinuz.efi
172c37b830fSArd Biesheuvelendif
1738c2c3df3SCatalin Marinas
174c37b830fSArd Biesheuvelall:	$(notdir $(KBUILD_IMAGE))
1758c2c3df3SCatalin Marinas
1767a23b027SSimon Glassimage.fit: dtbs
1777a23b027SSimon Glass
1787a23b027SSimon Glassvmlinuz.efi image.fit: Image
1790dc1670bSSimon Glass$(BOOT_TARGETS): vmlinux
1800723c05fSOlof Johansson	$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
1810723c05fSOlof Johansson
1829ca4e58cSMasahiro YamadaImage.%: Image
18370f915a2SRob Herring	$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
1848c2c3df3SCatalin Marinas
1854c7be57fSLinus Torvaldsifeq ($(CONFIG_COMPRESSED_INSTALL),y)
1864c7be57fSLinus Torvalds DEFAULT_KBUILD_IMAGE = $(KBUILD_IMAGE)
1874c7be57fSLinus Torvaldselse
1884c7be57fSLinus Torvalds DEFAULT_KBUILD_IMAGE = $(boot)/Image
1894c7be57fSLinus Torvaldsendif
1904c7be57fSLinus Torvalds
1914c7be57fSLinus Torvaldsinstall: KBUILD_IMAGE := $(DEFAULT_KBUILD_IMAGE)
19270a4039bSMasahiro Yamadainstall zinstall:
193f774f5bbSMasahiro Yamada	$(call cmd,install)
1948c2c3df3SCatalin Marinas
1950c6c2d36SMark Brownarchprepare:
1960c6c2d36SMark Brown	$(Q)$(MAKE) $(build)=arch/arm64/tools kapi
19764ee84c7SMasahiro Yamada
19898356eb0SVictor Kamenskyifeq ($(KBUILD_EXTMOD),)
199a66649daSKevin Brodsky# We need to generate vdso-offsets.h before compiling certain files in kernel/.
200a66649daSKevin Brodsky# In order to do that, we should use the archprepare target, but we can't since
201a66649daSKevin Brodsky# asm-offsets.h is included in some files used to generate vdso-offsets.h, and
202a66649daSKevin Brodsky# asm-offsets.h is built in prepare0, for which archprepare is a dependency.
203a66649daSKevin Brodsky# Therefore we need to generate the header after prepare0 has been made, hence
204a66649daSKevin Brodsky# this hack.
205a66649daSKevin Brodskyprepare: vdso_prepare
206a66649daSKevin Brodskyvdso_prepare: prepare0
207a5b8ca97SMasahiro Yamada	$(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso \
208a5b8ca97SMasahiro Yamada	include/generated/vdso-offsets.h arch/arm64/kernel/vdso/vdso.so
209a5b8ca97SMasahiro Yamadaifdef CONFIG_COMPAT_VDSO
210a5b8ca97SMasahiro Yamada	$(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso32 \
211c7767f5cSKevin Brodsky	arch/arm64/kernel/vdso32/vdso.so
212a5b8ca97SMasahiro Yamadaendif
21398356eb0SVictor Kamenskyendif
214a66649daSKevin Brodsky
21556769ba4SMasahiro Yamadavdso-install-y				+= arch/arm64/kernel/vdso/vdso.so.dbg
216a099bec7SMasahiro Yamadavdso-install-$(CONFIG_COMPAT_VDSO)	+= arch/arm64/kernel/vdso32/vdso32.so.dbg
21756769ba4SMasahiro Yamada
218c6cd63f5SMark Browninclude $(srctree)/scripts/Makefile.defconf
219c6cd63f5SMark Brown
220c6cd63f5SMark BrownPHONY += virtconfig
221c6cd63f5SMark Brownvirtconfig:
222c6cd63f5SMark Brown	$(call merge_into_defconfig_override,defconfig,virt)
223c6cd63f5SMark Brown
2248c2c3df3SCatalin Marinasdefine archhelp
2258c2c3df3SCatalin Marinas  echo  '* Image.gz      - Compressed kernel image (arch/$(ARCH)/boot/Image.gz)'
2268c2c3df3SCatalin Marinas  echo  '  Image         - Uncompressed kernel image (arch/$(ARCH)/boot/Image)'
2277a23b027SSimon Glass  echo  '  image.fit     - Flat Image Tree (arch/$(ARCH)/boot/image.fit)'
2284c7be57fSLinus Torvalds  echo  '  install       - Install kernel (compressed if COMPRESSED_INSTALL set)'
2298c2c3df3SCatalin Marinas  echo  '  zinstall      - Install compressed kernel'
2308c2c3df3SCatalin Marinas  echo  '                  Install using (your) ~/bin/installkernel or'
2318c2c3df3SCatalin Marinas  echo  '                  (distribution) /sbin/installkernel or'
2328c2c3df3SCatalin Marinas  echo  '                  install to $$(INSTALL_PATH) and run lilo'
2338c2c3df3SCatalin Marinasendef
234