1*fa96b57cSHuacai Chen# SPDX-License-Identifier: GPL-2.0 2*fa96b57cSHuacai Chen# 3*fa96b57cSHuacai Chen# Author: Huacai Chen <chenhuacai@loongson.cn> 4*fa96b57cSHuacai Chen# Copyright (C) 2020-2022 Loongson Technology Corporation Limited 5*fa96b57cSHuacai Chen 6*fa96b57cSHuacai Chenboot := arch/loongarch/boot 7*fa96b57cSHuacai Chen 8*fa96b57cSHuacai ChenKBUILD_IMAGE = $(boot)/vmlinux 9*fa96b57cSHuacai Chen 10*fa96b57cSHuacai Chen# 11*fa96b57cSHuacai Chen# Select the object file format to substitute into the linker script. 12*fa96b57cSHuacai Chen# 13*fa96b57cSHuacai Chen64bit-tool-archpref = loongarch64 14*fa96b57cSHuacai Chen32bit-bfd = elf32-loongarch 15*fa96b57cSHuacai Chen64bit-bfd = elf64-loongarch 16*fa96b57cSHuacai Chen32bit-emul = elf32loongarch 17*fa96b57cSHuacai Chen64bit-emul = elf64loongarch 18*fa96b57cSHuacai Chen 19*fa96b57cSHuacai Chenifdef CONFIG_64BIT 20*fa96b57cSHuacai Chentool-archpref = $(64bit-tool-archpref) 21*fa96b57cSHuacai ChenUTS_MACHINE := loongarch64 22*fa96b57cSHuacai Chenendif 23*fa96b57cSHuacai Chen 24*fa96b57cSHuacai Chenifneq ($(SUBARCH),$(ARCH)) 25*fa96b57cSHuacai Chen ifeq ($(CROSS_COMPILE),) 26*fa96b57cSHuacai Chen CROSS_COMPILE := $(call cc-cross-prefix, $(tool-archpref)-linux- $(tool-archpref)-linux-gnu- $(tool-archpref)-unknown-linux-gnu-) 27*fa96b57cSHuacai Chen endif 28*fa96b57cSHuacai Chenendif 29*fa96b57cSHuacai Chen 30*fa96b57cSHuacai Chenifdef CONFIG_64BIT 31*fa96b57cSHuacai Chenld-emul = $(64bit-emul) 32*fa96b57cSHuacai Chencflags-y += -mabi=lp64s 33*fa96b57cSHuacai Chenendif 34*fa96b57cSHuacai Chen 35*fa96b57cSHuacai Chencflags-y += -G0 -pipe -msoft-float 36*fa96b57cSHuacai ChenLDFLAGS_vmlinux += -G0 -static -n -nostdlib 37*fa96b57cSHuacai ChenKBUILD_AFLAGS_KERNEL += -Wa,-mla-global-with-pcrel 38*fa96b57cSHuacai ChenKBUILD_CFLAGS_KERNEL += -Wa,-mla-global-with-pcrel 39*fa96b57cSHuacai ChenKBUILD_AFLAGS_MODULE += -Wa,-mla-global-with-abs 40*fa96b57cSHuacai ChenKBUILD_CFLAGS_MODULE += -fplt -Wa,-mla-global-with-abs,-mla-local-with-abs 41*fa96b57cSHuacai Chen 42*fa96b57cSHuacai Chencflags-y += -ffreestanding 43*fa96b57cSHuacai Chencflags-y += $(call cc-option, -mno-check-zero-division) 44*fa96b57cSHuacai Chen 45*fa96b57cSHuacai Chenload-y = 0x9000000000200000 46*fa96b57cSHuacai Chenbootvars-y = VMLINUX_LOAD_ADDRESS=$(load-y) 47*fa96b57cSHuacai Chen 48*fa96b57cSHuacai ChenKBUILD_AFLAGS += $(cflags-y) 49*fa96b57cSHuacai ChenKBUILD_CFLAGS += $(cflags-y) 50*fa96b57cSHuacai ChenKBUILD_CPPFLAGS += -DVMLINUX_LOAD_ADDRESS=$(load-y) 51*fa96b57cSHuacai Chen 52*fa96b57cSHuacai Chen# This is required to get dwarf unwinding tables into .debug_frame 53*fa96b57cSHuacai Chen# instead of .eh_frame so we don't discard them. 54*fa96b57cSHuacai ChenKBUILD_CFLAGS += -fno-asynchronous-unwind-tables 55*fa96b57cSHuacai Chen 56*fa96b57cSHuacai Chen# Don't emit unaligned accesses. 57*fa96b57cSHuacai Chen# Not all LoongArch cores support unaligned access, and as kernel we can't 58*fa96b57cSHuacai Chen# rely on others to provide emulation for these accesses. 59*fa96b57cSHuacai ChenKBUILD_CFLAGS += $(call cc-option,-mstrict-align) 60*fa96b57cSHuacai Chen 61*fa96b57cSHuacai ChenKBUILD_CFLAGS += -isystem $(shell $(CC) -print-file-name=include) 62*fa96b57cSHuacai Chen 63*fa96b57cSHuacai ChenKBUILD_LDFLAGS += -m $(ld-emul) 64*fa96b57cSHuacai Chen 65*fa96b57cSHuacai Chenifdef CONFIG_LOONGARCH 66*fa96b57cSHuacai ChenCHECKFLAGS += $(shell $(CC) $(KBUILD_CFLAGS) -dM -E -x c /dev/null | \ 67*fa96b57cSHuacai Chen egrep -vw '__GNUC_(MINOR_|PATCHLEVEL_)?_' | \ 68*fa96b57cSHuacai Chen sed -e "s/^\#define /-D'/" -e "s/ /'='/" -e "s/$$/'/" -e 's/\$$/&&/g') 69*fa96b57cSHuacai Chenendif 70*fa96b57cSHuacai Chen 71*fa96b57cSHuacai Chenhead-y := arch/loongarch/kernel/head.o 72*fa96b57cSHuacai Chen 73*fa96b57cSHuacai Chenlibs-y += arch/loongarch/lib/ 74*fa96b57cSHuacai Chen 75*fa96b57cSHuacai Chenifeq ($(KBUILD_EXTMOD),) 76*fa96b57cSHuacai Chenprepare: vdso_prepare 77*fa96b57cSHuacai Chenvdso_prepare: prepare0 78*fa96b57cSHuacai Chen $(Q)$(MAKE) $(build)=arch/loongarch/vdso include/generated/vdso-offsets.h 79*fa96b57cSHuacai Chenendif 80*fa96b57cSHuacai Chen 81*fa96b57cSHuacai ChenPHONY += vdso_install 82*fa96b57cSHuacai Chenvdso_install: 83*fa96b57cSHuacai Chen $(Q)$(MAKE) $(build)=arch/loongarch/vdso $@ 84*fa96b57cSHuacai Chen 85*fa96b57cSHuacai Chenall: $(KBUILD_IMAGE) 86*fa96b57cSHuacai Chen 87*fa96b57cSHuacai Chen$(KBUILD_IMAGE): vmlinux 88*fa96b57cSHuacai Chen $(Q)$(MAKE) $(build)=$(boot) $(bootvars-y) $@ 89*fa96b57cSHuacai Chen 90*fa96b57cSHuacai Cheninstall: 91*fa96b57cSHuacai Chen $(Q)install -D -m 755 $(KBUILD_IMAGE) $(INSTALL_PATH)/vmlinux-$(KERNELRELEASE) 92*fa96b57cSHuacai Chen $(Q)install -D -m 644 .config $(INSTALL_PATH)/config-$(KERNELRELEASE) 93*fa96b57cSHuacai Chen $(Q)install -D -m 644 System.map $(INSTALL_PATH)/System.map-$(KERNELRELEASE) 94*fa96b57cSHuacai Chen 95*fa96b57cSHuacai Chendefine archhelp 96*fa96b57cSHuacai Chen echo ' install - install kernel into $(INSTALL_PATH)' 97*fa96b57cSHuacai Chen echo 98*fa96b57cSHuacai Chenendef 99