xref: /openbmc/linux/arch/arm64/Makefile (revision e50e86dbcabda570fc8a1435fe2fca97e9ab7312)
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
13*8c213cc2SMark 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
398bf9284dSVladimir MurzinKBUILD_CFLAGS	+= -mgeneral-regs-only	\
4003adcbd9SWill Deacon		   $(compat_vdso) $(cc_has_k_constraint)
41fa63da2aSNathan ChancellorKBUILD_CFLAGS	+= $(call cc-disable-warning, psabi)
428bf9284dSVladimir MurzinKBUILD_AFLAGS	+= $(compat_vdso)
43c09d6a04SWill Deacon
443d6a7b99SAndrew PinskiKBUILD_CFLAGS	+= $(call cc-option,-mabi=lp64)
453d6a7b99SAndrew PinskiKBUILD_AFLAGS	+= $(call cc-option,-mabi=lp64)
463d6a7b99SAndrew Pinski
476e0a66d1SKees Cook# Avoid generating .eh_frame* sections.
4868c76ad4SArd Biesheuvelifneq ($(CONFIG_UNWIND_TABLES),y)
496e0a66d1SKees CookKBUILD_CFLAGS	+= -fno-asynchronous-unwind-tables -fno-unwind-tables
506e0a66d1SKees CookKBUILD_AFLAGS	+= -fno-asynchronous-unwind-tables -fno-unwind-tables
5168c76ad4SArd Biesheuvelelse
5268c76ad4SArd BiesheuvelKBUILD_CFLAGS	+= -fasynchronous-unwind-tables
5368c76ad4SArd BiesheuvelKBUILD_AFLAGS	+= -fasynchronous-unwind-tables
5468c76ad4SArd Biesheuvelendif
556e0a66d1SKees Cook
560a1213faSArd Biesheuvelifeq ($(CONFIG_STACKPROTECTOR_PER_TASK),y)
570a1213faSArd Biesheuvelprepare: stack_protector_prepare
580a1213faSArd Biesheuvelstack_protector_prepare: prepare0
590a1213faSArd Biesheuvel	$(eval KBUILD_CFLAGS += -mstack-protector-guard=sysreg		  \
600a1213faSArd Biesheuvel				-mstack-protector-guard-reg=sp_el0	  \
610a1213faSArd Biesheuvel				-mstack-protector-guard-offset=$(shell	  \
620a1213faSArd Biesheuvel			awk '{if ($$2 == "TSK_STACK_CANARY") print $$3;}' \
630a1213faSArd Biesheuvel					include/generated/asm-offsets.h))
640a1213faSArd Biesheuvelendif
650a1213faSArd Biesheuvel
6692e2294dSMark Brownifeq ($(CONFIG_ARM64_BTI_KERNEL),y)
67c68cf528SMark Rutland  KBUILD_CFLAGS += -mbranch-protection=pac-ret+bti
68c68cf528SMark Rutlandelse ifeq ($(CONFIG_ARM64_PTR_AUTH_KERNEL),y)
69c68cf528SMark Rutland  ifeq ($(CONFIG_CC_HAS_BRANCH_PROT_PAC_RET),y)
70c68cf528SMark Rutland    KBUILD_CFLAGS += -mbranch-protection=pac-ret
7192e2294dSMark Brown  else
72c68cf528SMark Rutland    KBUILD_CFLAGS += -msign-return-address=non-leaf
7392e2294dSMark Brown  endif
74c68cf528SMark Rutlandelse
75c68cf528SMark Rutland  KBUILD_CFLAGS += $(call cc-option,-mbranch-protection=none)
767c78f67eSZhenyu Yeendif
7774afda40SKristina Martsenko
781e249c41SMark Rutland# Tell the assembler to support instructions from the latest target
791e249c41SMark Rutland# architecture.
801e249c41SMark Rutland#
811e249c41SMark Rutland# For non-integrated assemblers we'll pass this on the command line, and for
821e249c41SMark Rutland# integrated assemblers we'll define ARM64_ASM_ARCH and ARM64_ASM_PREAMBLE for
831e249c41SMark Rutland# inline usage.
841e249c41SMark Rutland#
851e249c41SMark Rutland# We cannot pass the same arch flag to the compiler as this would allow it to
861e249c41SMark Rutland# freely generate instructions which are not supported by earlier architecture
871e249c41SMark Rutland# versions, which would prevent a single kernel image from working on earlier
881e249c41SMark Rutland# hardware.
89f469c032SVincenzo Frascinoifeq ($(CONFIG_AS_HAS_ARMV8_5), y)
90f469c032SVincenzo Frascino  asm-arch := armv8.5-a
911e249c41SMark Rutlandelse ifeq ($(CONFIG_AS_HAS_ARMV8_4), y)
921e249c41SMark Rutland  asm-arch := armv8.4-a
931e249c41SMark Rutlandelse ifeq ($(CONFIG_AS_HAS_ARMV8_3), y)
941e249c41SMark Rutland  asm-arch := armv8.3-a
951e249c41SMark Rutlandelse ifeq ($(CONFIG_AS_HAS_ARMV8_2), y)
961e249c41SMark Rutland  asm-arch := armv8.2-a
97f469c032SVincenzo Frascinoendif
98f469c032SVincenzo Frascino
991764c3edSSami Tolvanenifdef asm-arch
1001764c3edSSami TolvanenKBUILD_CFLAGS	+= -Wa,-march=$(asm-arch) \
1011764c3edSSami Tolvanen		   -DARM64_ASM_ARCH='"$(asm-arch)"'
1027c78f67eSZhenyu Yeendif
1037c78f67eSZhenyu Ye
104da64e9d1SSami Tolvanenifeq ($(CONFIG_SHADOW_CALL_STACK), y)
105da64e9d1SSami TolvanenKBUILD_CFLAGS	+= -ffixed-x18
106da64e9d1SSami Tolvanenendif
107da64e9d1SSami Tolvanen
108a0974e6eSWill Deaconifeq ($(CONFIG_CPU_BIG_ENDIAN), y)
109a0974e6eSWill DeaconKBUILD_CPPFLAGS	+= -mbig-endian
110bcde519eSLuc Van OostenryckCHECKFLAGS	+= -D__AARCH64EB__
111c931d34eSOlof Johansson# Prefer the baremetal ELF build target, but not all toolchains include
112c931d34eSOlof Johansson# it so fall back to the standard linux version if needed.
113311bea3cSNick DesaulniersKBUILD_LDFLAGS	+= -EB $(call ld-option, -maarch64elfb, -maarch64linuxb -z norelro)
114cfa88c79SMichal MarekUTS_MACHINE	:= aarch64_be
115a0974e6eSWill Deaconelse
1168c2c3df3SCatalin MarinasKBUILD_CPPFLAGS	+= -mlittle-endian
117bcde519eSLuc Van OostenryckCHECKFLAGS	+= -D__AARCH64EL__
118c931d34eSOlof Johansson# Same as above, prefer ELF but fall back to linux target if needed.
119311bea3cSNick DesaulniersKBUILD_LDFLAGS	+= -EL $(call ld-option, -maarch64elf, -maarch64linux -z norelro)
120cfa88c79SMichal MarekUTS_MACHINE	:= aarch64
121a0974e6eSWill Deaconendif
1228c2c3df3SCatalin Marinas
123311bea3cSNick Desaulniersifeq ($(CONFIG_LD_IS_LLD), y)
124311bea3cSNick DesaulniersKBUILD_LDFLAGS	+= -z norelro
125311bea3cSNick Desaulniersendif
126311bea3cSNick Desaulniers
1271f2f01b1SLuc Van OostenryckCHECKFLAGS	+= -D__aarch64__
1288c2c3df3SCatalin Marinas
129baaf553dSMark Rutlandifeq ($(CONFIG_DYNAMIC_FTRACE_WITH_CALL_OPS),y)
130baaf553dSMark Rutland  KBUILD_CPPFLAGS += -DCC_USING_PATCHABLE_FUNCTION_ENTRY
131baaf553dSMark Rutland  CC_FLAGS_FTRACE := -fpatchable-function-entry=4,2
132baaf553dSMark Rutlandelse ifeq ($(CONFIG_DYNAMIC_FTRACE_WITH_ARGS),y)
1333b23e499STorsten Duwe  KBUILD_CPPFLAGS += -DCC_USING_PATCHABLE_FUNCTION_ENTRY
1343b23e499STorsten Duwe  CC_FLAGS_FTRACE := -fpatchable-function-entry=2
1353b23e499STorsten Duweendif
1363b23e499STorsten Duwe
137b2f557eaSAndrey Konovalovifeq ($(CONFIG_KASAN_SW_TAGS), y)
138b2f557eaSAndrey KonovalovKASAN_SHADOW_SCALE_SHIFT := 4
1390fea6e9aSAndrey Konovalovelse ifeq ($(CONFIG_KASAN_GENERIC), y)
140b2f557eaSAndrey KonovalovKASAN_SHADOW_SCALE_SHIFT := 3
141b2f557eaSAndrey Konovalovendif
142b2f557eaSAndrey Konovalov
143b2f557eaSAndrey KonovalovKBUILD_CFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT)
144b2f557eaSAndrey KonovalovKBUILD_CPPFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT)
145b2f557eaSAndrey KonovalovKBUILD_AFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT)
146b2f557eaSAndrey Konovalov
1478c2c3df3SCatalin Marinaslibs-y		:= arch/arm64/lib/ $(libs-y)
148c1aac64dSMasahiro Yamadalibs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a
1498c2c3df3SCatalin Marinas
1508c2c3df3SCatalin Marinas# Default target when executing plain make
15106995804SMichal Marekboot		:= arch/arm64/boot
152c37b830fSArd Biesheuvel
153c37b830fSArd Biesheuvelifeq ($(CONFIG_EFI_ZBOOT),)
15406995804SMichal MarekKBUILD_IMAGE	:= $(boot)/Image.gz
155c37b830fSArd Biesheuvelelse
156c37b830fSArd BiesheuvelKBUILD_IMAGE	:= $(boot)/vmlinuz.efi
157c37b830fSArd Biesheuvelendif
1588c2c3df3SCatalin Marinas
159c37b830fSArd Biesheuvelall:	$(notdir $(KBUILD_IMAGE))
1608c2c3df3SCatalin Marinas
161610610daSMasahiro Yamadavmlinuz.efi: Image
162c37b830fSArd BiesheuvelImage vmlinuz.efi: vmlinux
1630723c05fSOlof Johansson	$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
1640723c05fSOlof Johansson
1659ca4e58cSMasahiro YamadaImage.%: Image
16670f915a2SRob Herring	$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
1678c2c3df3SCatalin Marinas
168f774f5bbSMasahiro Yamadainstall: KBUILD_IMAGE := $(boot)/Image
16970a4039bSMasahiro Yamadainstall zinstall:
170f774f5bbSMasahiro Yamada	$(call cmd,install)
1718c2c3df3SCatalin Marinas
1720c6c2d36SMark Brownarchprepare:
1730c6c2d36SMark Brown	$(Q)$(MAKE) $(build)=arch/arm64/tools kapi
17464ee84c7SMasahiro Yamadaifeq ($(CONFIG_ARM64_ERRATUM_843419),y)
17564ee84c7SMasahiro Yamada  ifneq ($(CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419),y)
17664ee84c7SMasahiro Yamada	@echo "warning: ld does not support --fix-cortex-a53-843419; kernel may be susceptible to erratum" >&2
17764ee84c7SMasahiro Yamada  endif
17864ee84c7SMasahiro Yamadaendif
17964ee84c7SMasahiro Yamadaifeq ($(CONFIG_ARM64_USE_LSE_ATOMICS),y)
18064ee84c7SMasahiro Yamada  ifneq ($(CONFIG_ARM64_LSE_ATOMICS),y)
18164ee84c7SMasahiro Yamada	@echo "warning: LSE atomics not supported by binutils" >&2
18264ee84c7SMasahiro Yamada  endif
18364ee84c7SMasahiro Yamadaendif
18464ee84c7SMasahiro Yamada
18598356eb0SVictor Kamenskyifeq ($(KBUILD_EXTMOD),)
186a66649daSKevin Brodsky# We need to generate vdso-offsets.h before compiling certain files in kernel/.
187a66649daSKevin Brodsky# In order to do that, we should use the archprepare target, but we can't since
188a66649daSKevin Brodsky# asm-offsets.h is included in some files used to generate vdso-offsets.h, and
189a66649daSKevin Brodsky# asm-offsets.h is built in prepare0, for which archprepare is a dependency.
190a66649daSKevin Brodsky# Therefore we need to generate the header after prepare0 has been made, hence
191a66649daSKevin Brodsky# this hack.
192a66649daSKevin Brodskyprepare: vdso_prepare
193a66649daSKevin Brodskyvdso_prepare: prepare0
194a5b8ca97SMasahiro Yamada	$(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso \
195a5b8ca97SMasahiro Yamada	include/generated/vdso-offsets.h arch/arm64/kernel/vdso/vdso.so
196a5b8ca97SMasahiro Yamadaifdef CONFIG_COMPAT_VDSO
197a5b8ca97SMasahiro Yamada	$(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso32 \
198a5b8ca97SMasahiro Yamada	include/generated/vdso32-offsets.h arch/arm64/kernel/vdso32/vdso.so
199a5b8ca97SMasahiro Yamadaendif
20098356eb0SVictor Kamenskyendif
201a66649daSKevin Brodsky
202adacfc6dSMasahiro Yamadavdso-install-y				+= arch/arm64/kernel/vdso/vdso.so.dbg
203adacfc6dSMasahiro Yamadavdso-install-$(CONFIG_COMPAT_VDSO)	+= arch/arm64/kernel/vdso32/vdso.so.dbg:vdso32.so
204adacfc6dSMasahiro Yamada
205c6cd63f5SMark Browninclude $(srctree)/scripts/Makefile.defconf
206c6cd63f5SMark Brown
207c6cd63f5SMark BrownPHONY += virtconfig
208c6cd63f5SMark Brownvirtconfig:
209c6cd63f5SMark Brown	$(call merge_into_defconfig_override,defconfig,virt)
210c6cd63f5SMark Brown
2118c2c3df3SCatalin Marinasdefine archhelp
2128c2c3df3SCatalin Marinas  echo  '* Image.gz      - Compressed kernel image (arch/$(ARCH)/boot/Image.gz)'
2138c2c3df3SCatalin Marinas  echo  '  Image         - Uncompressed kernel image (arch/$(ARCH)/boot/Image)'
2148c2c3df3SCatalin Marinas  echo  '  install       - Install uncompressed kernel'
2158c2c3df3SCatalin Marinas  echo  '  zinstall      - Install compressed kernel'
2168c2c3df3SCatalin Marinas  echo  '                  Install using (your) ~/bin/installkernel or'
2178c2c3df3SCatalin Marinas  echo  '                  (distribution) /sbin/installkernel or'
2188c2c3df3SCatalin Marinas  echo  '                  install to $$(INSTALL_PATH) and run lilo'
2198c2c3df3SCatalin Marinasendef
220