13d0407baSopenharmony_ci# 23d0407baSopenharmony_ci# arch/arm64/Makefile 33d0407baSopenharmony_ci# 43d0407baSopenharmony_ci# This file is included by the global makefile so that you can add your own 53d0407baSopenharmony_ci# architecture-specific flags and dependencies. 63d0407baSopenharmony_ci# 73d0407baSopenharmony_ci# This file is subject to the terms and conditions of the GNU General Public 83d0407baSopenharmony_ci# License. See the file "COPYING" in the main directory of this archive 93d0407baSopenharmony_ci# for more details. 103d0407baSopenharmony_ci# 113d0407baSopenharmony_ci# Copyright (C) 1995-2001 by Russell King 123d0407baSopenharmony_ci 133d0407baSopenharmony_ciLDFLAGS_vmlinux :=--no-undefined -X 143d0407baSopenharmony_ci 153d0407baSopenharmony_ciifeq ($(CONFIG_RELOCATABLE), y) 163d0407baSopenharmony_ci# Pass --no-apply-dynamic-relocs to restore pre-binutils-2.27 behaviour 173d0407baSopenharmony_ci# for relative relocs, since this leads to better Image compression 183d0407baSopenharmony_ci# with the relocation offsets always being zero. 193d0407baSopenharmony_ciLDFLAGS_vmlinux += -shared -Bsymbolic -z notext \ 203d0407baSopenharmony_ci $(call ld-option, --no-apply-dynamic-relocs) 213d0407baSopenharmony_ciendif 223d0407baSopenharmony_ci 233d0407baSopenharmony_ciifeq ($(CONFIG_ARM64_ERRATUM_843419),y) 243d0407baSopenharmony_ci ifeq ($(call ld-option, --fix-cortex-a53-843419),) 253d0407baSopenharmony_ci$(warning ld does not support --fix-cortex-a53-843419; kernel may be susceptible to erratum) 263d0407baSopenharmony_ci else 273d0407baSopenharmony_ciLDFLAGS_vmlinux += --fix-cortex-a53-843419 283d0407baSopenharmony_ci endif 293d0407baSopenharmony_ciendif 303d0407baSopenharmony_ci 313d0407baSopenharmony_ciifeq ($(CONFIG_ARM64_USE_LSE_ATOMICS), y) 323d0407baSopenharmony_ci ifneq ($(CONFIG_ARM64_LSE_ATOMICS), y) 333d0407baSopenharmony_ci$(warning LSE atomics not supported by binutils) 343d0407baSopenharmony_ci endif 353d0407baSopenharmony_ciendif 363d0407baSopenharmony_ci 373d0407baSopenharmony_cicc_has_k_constraint := $(call try-run,echo \ 383d0407baSopenharmony_ci 'int main(void) { \ 393d0407baSopenharmony_ci asm volatile("and w0, w0, %w0" :: "K" (4294967295)); \ 403d0407baSopenharmony_ci return 0; \ 413d0407baSopenharmony_ci }' | $(CC) -S -x c -o "$$TMP" -,,-DCONFIG_CC_HAS_K_CONSTRAINT=1) 423d0407baSopenharmony_ci 433d0407baSopenharmony_ciifeq ($(CONFIG_BROKEN_GAS_INST),y) 443d0407baSopenharmony_ci$(warning Detected assembler with broken .inst; disassembly will be unreliable) 453d0407baSopenharmony_ciendif 463d0407baSopenharmony_ci 473d0407baSopenharmony_ciKBUILD_CFLAGS += -mgeneral-regs-only \ 483d0407baSopenharmony_ci $(compat_vdso) $(cc_has_k_constraint) 493d0407baSopenharmony_ciKBUILD_CFLAGS += $(call cc-disable-warning, psabi) 503d0407baSopenharmony_ciKBUILD_AFLAGS += $(compat_vdso) 513d0407baSopenharmony_ci 523d0407baSopenharmony_ciKBUILD_CFLAGS += $(call cc-option,-mabi=lp64) 533d0407baSopenharmony_ciKBUILD_AFLAGS += $(call cc-option,-mabi=lp64) 543d0407baSopenharmony_ci 553d0407baSopenharmony_ci# Avoid generating .eh_frame* sections. 563d0407baSopenharmony_ciKBUILD_CFLAGS += -fno-asynchronous-unwind-tables -fno-unwind-tables 573d0407baSopenharmony_ciKBUILD_AFLAGS += -fno-asynchronous-unwind-tables -fno-unwind-tables 583d0407baSopenharmony_ci 593d0407baSopenharmony_ciifeq ($(CONFIG_STACKPROTECTOR_PER_TASK),y) 603d0407baSopenharmony_ciprepare: stack_protector_prepare 613d0407baSopenharmony_cistack_protector_prepare: prepare0 623d0407baSopenharmony_ci $(eval KBUILD_CFLAGS += -mstack-protector-guard=sysreg \ 633d0407baSopenharmony_ci -mstack-protector-guard-reg=sp_el0 \ 643d0407baSopenharmony_ci -mstack-protector-guard-offset=$(shell \ 653d0407baSopenharmony_ci awk '{if ($$2 == "TSK_STACK_CANARY") print $$3;}' \ 663d0407baSopenharmony_ci include/generated/asm-offsets.h)) 673d0407baSopenharmony_ciendif 683d0407baSopenharmony_ci 693d0407baSopenharmony_ci# Ensure that if the compiler supports branch protection we default it 703d0407baSopenharmony_ci# off, this will be overridden if we are using branch protection. 713d0407baSopenharmony_cibranch-prot-flags-y += $(call cc-option,-mbranch-protection=none) 723d0407baSopenharmony_ci 733d0407baSopenharmony_ciifeq ($(CONFIG_ARM64_PTR_AUTH),y) 743d0407baSopenharmony_cibranch-prot-flags-$(CONFIG_CC_HAS_SIGN_RETURN_ADDRESS) := -msign-return-address=all 753d0407baSopenharmony_ci# We enable additional protection for leaf functions as there is some 763d0407baSopenharmony_ci# narrow potential for ROP protection benefits and no substantial 773d0407baSopenharmony_ci# performance impact has been observed. 783d0407baSopenharmony_ciifeq ($(CONFIG_ARM64_BTI_KERNEL),y) 793d0407baSopenharmony_cibranch-prot-flags-$(CONFIG_CC_HAS_BRANCH_PROT_PAC_RET_BTI) := -mbranch-protection=pac-ret+leaf+bti 803d0407baSopenharmony_cielse 813d0407baSopenharmony_cibranch-prot-flags-$(CONFIG_CC_HAS_BRANCH_PROT_PAC_RET) := -mbranch-protection=pac-ret+leaf 823d0407baSopenharmony_ciendif 833d0407baSopenharmony_ci# -march=armv8.3-a enables the non-nops instructions for PAC, to avoid the 843d0407baSopenharmony_ci# compiler to generate them and consequently to break the single image contract 853d0407baSopenharmony_ci# we pass it only to the assembler. This option is utilized only in case of non 863d0407baSopenharmony_ci# integrated assemblers. 873d0407baSopenharmony_ciifeq ($(CONFIG_AS_HAS_PAC), y) 883d0407baSopenharmony_ciasm-arch := armv8.3-a 893d0407baSopenharmony_ciendif 903d0407baSopenharmony_ciendif 913d0407baSopenharmony_ci 923d0407baSopenharmony_ciKBUILD_CFLAGS += $(branch-prot-flags-y) 933d0407baSopenharmony_ci 943d0407baSopenharmony_ciifeq ($(CONFIG_AS_HAS_ARMV8_4), y) 953d0407baSopenharmony_ci# make sure to pass the newest target architecture to -march. 963d0407baSopenharmony_ciasm-arch := armv8.4-a 973d0407baSopenharmony_ciendif 983d0407baSopenharmony_ci 993d0407baSopenharmony_ciifdef asm-arch 1003d0407baSopenharmony_ciKBUILD_CFLAGS += -Wa,-march=$(asm-arch) \ 1013d0407baSopenharmony_ci -DARM64_ASM_ARCH='"$(asm-arch)"' 1023d0407baSopenharmony_ciendif 1033d0407baSopenharmony_ci 1043d0407baSopenharmony_ciifeq ($(CONFIG_SHADOW_CALL_STACK), y) 1053d0407baSopenharmony_ciKBUILD_CFLAGS += -ffixed-x18 1063d0407baSopenharmony_ciendif 1073d0407baSopenharmony_ci 1083d0407baSopenharmony_ciifeq ($(CONFIG_CPU_BIG_ENDIAN), y) 1093d0407baSopenharmony_ciKBUILD_CPPFLAGS += -mbig-endian 1103d0407baSopenharmony_ciCHECKFLAGS += -D__AARCH64EB__ 1113d0407baSopenharmony_ci# Prefer the baremetal ELF build target, but not all toolchains include 1123d0407baSopenharmony_ci# it so fall back to the standard linux version if needed. 1133d0407baSopenharmony_ciKBUILD_LDFLAGS += -EB $(call ld-option, -maarch64elfb, -maarch64linuxb -z norelro) 1143d0407baSopenharmony_ciUTS_MACHINE := aarch64_be 1153d0407baSopenharmony_cielse 1163d0407baSopenharmony_ciKBUILD_CPPFLAGS += -mlittle-endian 1173d0407baSopenharmony_ciCHECKFLAGS += -D__AARCH64EL__ 1183d0407baSopenharmony_ci# Same as above, prefer ELF but fall back to linux target if needed. 1193d0407baSopenharmony_ciKBUILD_LDFLAGS += -EL $(call ld-option, -maarch64elf, -maarch64linux -z norelro) 1203d0407baSopenharmony_ciUTS_MACHINE := aarch64 1213d0407baSopenharmony_ciendif 1223d0407baSopenharmony_ci 1233d0407baSopenharmony_ciifeq ($(CONFIG_LD_IS_LLD), y) 1243d0407baSopenharmony_ciKBUILD_LDFLAGS += -z norelro 1253d0407baSopenharmony_ciendif 1263d0407baSopenharmony_ci 1273d0407baSopenharmony_ciCHECKFLAGS += -D__aarch64__ 1283d0407baSopenharmony_ci 1293d0407baSopenharmony_ciifeq ($(CONFIG_DYNAMIC_FTRACE_WITH_REGS),y) 1303d0407baSopenharmony_ci KBUILD_CPPFLAGS += -DCC_USING_PATCHABLE_FUNCTION_ENTRY 1313d0407baSopenharmony_ci CC_FLAGS_FTRACE := -fpatchable-function-entry=2 1323d0407baSopenharmony_ciendif 1333d0407baSopenharmony_ci 1343d0407baSopenharmony_ci# Default value 1353d0407baSopenharmony_cihead-y := arch/arm64/kernel/head.o 1363d0407baSopenharmony_ci 1373d0407baSopenharmony_ciifeq ($(CONFIG_KASAN_SW_TAGS), y) 1383d0407baSopenharmony_ciKASAN_SHADOW_SCALE_SHIFT := 4 1393d0407baSopenharmony_cielse 1403d0407baSopenharmony_ciKASAN_SHADOW_SCALE_SHIFT := 3 1413d0407baSopenharmony_ciendif 1423d0407baSopenharmony_ci 1433d0407baSopenharmony_ciKBUILD_CFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT) 1443d0407baSopenharmony_ciKBUILD_CPPFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT) 1453d0407baSopenharmony_ciKBUILD_AFLAGS += -DKASAN_SHADOW_SCALE_SHIFT=$(KASAN_SHADOW_SCALE_SHIFT) 1463d0407baSopenharmony_ci 1473d0407baSopenharmony_cicore-y += arch/arm64/ 1483d0407baSopenharmony_cilibs-y := arch/arm64/lib/ $(libs-y) 1493d0407baSopenharmony_cilibs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a 1503d0407baSopenharmony_ci 1513d0407baSopenharmony_ci# Default target when executing plain make 1523d0407baSopenharmony_ciboot := arch/arm64/boot 1533d0407baSopenharmony_ciKBUILD_IMAGE := $(boot)/Image.gz 1543d0407baSopenharmony_ci 1553d0407baSopenharmony_ciall: Image.gz 1563d0407baSopenharmony_ci 1573d0407baSopenharmony_ci 1583d0407baSopenharmony_ciImage: vmlinux 1593d0407baSopenharmony_ci $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ 1603d0407baSopenharmony_ci 1613d0407baSopenharmony_ciImage.%: Image 1623d0407baSopenharmony_ci $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ 1633d0407baSopenharmony_ci 1643d0407baSopenharmony_cizinstall install: 1653d0407baSopenharmony_ci $(Q)$(MAKE) $(build)=$(boot) $@ 1663d0407baSopenharmony_ci 1673d0407baSopenharmony_ciPHONY += vdso_install 1683d0407baSopenharmony_civdso_install: 1693d0407baSopenharmony_ci $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso $@ 1703d0407baSopenharmony_ci $(if $(CONFIG_COMPAT_VDSO), \ 1713d0407baSopenharmony_ci $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso32 $@) 1723d0407baSopenharmony_ci 1733d0407baSopenharmony_ci# We use MRPROPER_FILES and CLEAN_FILES now 1743d0407baSopenharmony_ciarchclean: 1753d0407baSopenharmony_ci $(Q)$(MAKE) $(clean)=$(boot) 1763d0407baSopenharmony_ci 1773d0407baSopenharmony_ciifeq ($(KBUILD_EXTMOD),) 1783d0407baSopenharmony_ci# We need to generate vdso-offsets.h before compiling certain files in kernel/. 1793d0407baSopenharmony_ci# In order to do that, we should use the archprepare target, but we can't since 1803d0407baSopenharmony_ci# asm-offsets.h is included in some files used to generate vdso-offsets.h, and 1813d0407baSopenharmony_ci# asm-offsets.h is built in prepare0, for which archprepare is a dependency. 1823d0407baSopenharmony_ci# Therefore we need to generate the header after prepare0 has been made, hence 1833d0407baSopenharmony_ci# this hack. 1843d0407baSopenharmony_ciprepare: vdso_prepare 1853d0407baSopenharmony_civdso_prepare: prepare0 1863d0407baSopenharmony_ci $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso include/generated/vdso-offsets.h 1873d0407baSopenharmony_ci $(if $(CONFIG_COMPAT_VDSO),$(Q)$(MAKE) \ 1883d0407baSopenharmony_ci $(build)=arch/arm64/kernel/vdso32 \ 1893d0407baSopenharmony_ci include/generated/vdso32-offsets.h) 1903d0407baSopenharmony_ciendif 1913d0407baSopenharmony_ci 1923d0407baSopenharmony_cidefine archhelp 1933d0407baSopenharmony_ci echo '* Image.gz - Compressed kernel image (arch/$(ARCH)/boot/Image.gz)' 1943d0407baSopenharmony_ci echo ' Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)' 1953d0407baSopenharmony_ci echo ' install - Install uncompressed kernel' 1963d0407baSopenharmony_ci echo ' zinstall - Install compressed kernel' 1973d0407baSopenharmony_ci echo ' Install using (your) ~/bin/installkernel or' 1983d0407baSopenharmony_ci echo ' (distribution) /sbin/installkernel or' 1993d0407baSopenharmony_ci echo ' install to $$(INSTALL_PATH) and run lilo' 2003d0407baSopenharmony_ciendef 2013d0407baSopenharmony_ci 2023d0407baSopenharmony_ciMAKE_MODULES ?= y 2033d0407baSopenharmony_ci 2043d0407baSopenharmony_ci%.img: 2053d0407baSopenharmony_ciifeq ("$(CONFIG_MODULES)$(MAKE_MODULES)$(srctree)","yy$(objtree)") 2063d0407baSopenharmony_ci $(Q)$(MAKE) rockchip/$*.dtb Image.lz4 modules 2073d0407baSopenharmony_cielse 2083d0407baSopenharmony_ci $(Q)$(MAKE) rockchip/$*.dtb Image.lz4 2093d0407baSopenharmony_ciendif 2103d0407baSopenharmony_ci $(Q)$(srctree)/scripts/mkimg --dtb $*.dtb 2113d0407baSopenharmony_ci 2123d0407baSopenharmony_ciCLEAN_DIRS += out 2133d0407baSopenharmony_ciCLEAN_FILES += boot.img kernel.img resource.img zboot.img 214