1 # SPDX-License-Identifier: GPL-2.0 2 # 3 # Author: Huacai Chen <chenhuacai@loongson.cn> 4 # Copyright (C) 2020-2022 Loongson Technology Corporation Limited 5 6 boot := arch/loongarch/boot 7 8 KBUILD_DEFCONFIG := loongson3_defconfig 9 KBUILD_DTBS := dtbs 10 11 image-name-y := vmlinux 12 image-name-$(CONFIG_EFI_ZBOOT) := vmlinuz 13 14 ifndef CONFIG_EFI_STUB 15 KBUILD_IMAGE := $(boot)/vmlinux.elf 16 else 17 KBUILD_IMAGE := $(boot)/$(image-name-y).efi 18 endif 19 20 # 21 # Select the object file format to substitute into the linker script. 22 # 23 64bit-tool-archpref = loongarch64 24 32bit-bfd = elf32-loongarch 25 64bit-bfd = elf64-loongarch 26 32bit-emul = elf32loongarch 27 64bit-emul = elf64loongarch 28 29 CC_FLAGS_FPU := -mfpu=64 30 CC_FLAGS_NO_FPU := -msoft-float 31 32 ifdef CONFIG_UNWINDER_ORC 33 orc_hash_h := arch/$(SRCARCH)/include/generated/asm/orc_hash.h 34 orc_hash_sh := $(srctree)/scripts/orc_hash.sh 35 targets += $(orc_hash_h) 36 quiet_cmd_orc_hash = GEN $@ 37 cmd_orc_hash = mkdir -p $(dir $@); \ 38 $(CONFIG_SHELL) $(orc_hash_sh) < $< > $@ 39 $(orc_hash_h): $(srctree)/arch/loongarch/include/asm/orc_types.h $(orc_hash_sh) FORCE 40 $(call if_changed,orc_hash) 41 archprepare: $(orc_hash_h) 42 endif 43 44 ifdef CONFIG_DYNAMIC_FTRACE 45 KBUILD_CPPFLAGS += -DCC_USING_PATCHABLE_FUNCTION_ENTRY 46 CC_FLAGS_FTRACE := -fpatchable-function-entry=2 47 endif 48 49 ifdef CONFIG_64BIT 50 tool-archpref = $(64bit-tool-archpref) 51 UTS_MACHINE := loongarch64 52 endif 53 54 ifneq ($(SUBARCH),$(ARCH)) 55 ifeq ($(CROSS_COMPILE),) 56 CROSS_COMPILE := $(call cc-cross-prefix, $(tool-archpref)-linux- $(tool-archpref)-linux-gnu- $(tool-archpref)-unknown-linux-gnu-) 57 endif 58 endif 59 60 ifdef CONFIG_64BIT 61 ld-emul = $(64bit-emul) 62 cflags-y += -mabi=lp64s 63 endif 64 65 cflags-y += -pipe $(CC_FLAGS_NO_FPU) 66 LDFLAGS_vmlinux += -static -n -nostdlib 67 68 # When the assembler supports explicit relocation hint, we must use it. 69 # GCC may have -mexplicit-relocs off by default if it was built with an old 70 # assembler, so we force it via an option. 71 # 72 # When the assembler does not supports explicit relocation hint, we can't use 73 # it. Disable it if the compiler supports it. 74 # 75 # The combination of a "new" assembler and "old" GCC is not supported, given 76 # the rarity of this combo and the extra complexity needed to make it work. 77 # Either upgrade the compiler or downgrade the assembler; the build will error 78 # out if it is the case (by probing for the model attribute; all supported 79 # compilers in this case would have support). 80 # 81 # Also, -mdirect-extern-access is useful in case of building with explicit 82 # relocs, for avoiding unnecessary GOT accesses. It is harmless to not have 83 # support though. 84 ifdef CONFIG_AS_HAS_EXPLICIT_RELOCS 85 cflags-y += $(call cc-option,-mexplicit-relocs) 86 KBUILD_CFLAGS_KERNEL += $(call cc-option,-mdirect-extern-access) 87 KBUILD_CFLAGS_KERNEL += $(call cc-option,-fdirect-access-external-data) 88 KBUILD_AFLAGS_MODULE += $(call cc-option,-fno-direct-access-external-data) 89 KBUILD_CFLAGS_MODULE += $(call cc-option,-fno-direct-access-external-data) 90 else 91 cflags-y += $(call cc-option,-mno-explicit-relocs) 92 KBUILD_AFLAGS_KERNEL += -Wa,-mla-global-with-pcrel 93 KBUILD_CFLAGS_KERNEL += -Wa,-mla-global-with-pcrel 94 KBUILD_AFLAGS_MODULE += -Wa,-mla-global-with-abs 95 KBUILD_CFLAGS_MODULE += -fplt -Wa,-mla-global-with-abs,-mla-local-with-abs 96 endif 97 98 KBUILD_AFLAGS += $(call cc-option,-mno-relax) $(call cc-option,-Wa$(comma)-mno-relax) 99 KBUILD_CFLAGS += $(call cc-option,-mno-relax) $(call cc-option,-Wa$(comma)-mno-relax) 100 KBUILD_AFLAGS += $(call cc-option,-mthin-add-sub) $(call cc-option,-Wa$(comma)-mthin-add-sub) 101 KBUILD_CFLAGS += $(call cc-option,-mthin-add-sub) $(call cc-option,-Wa$(comma)-mthin-add-sub) 102 103 ifdef CONFIG_OBJTOOL 104 KBUILD_CFLAGS += -fno-jump-tables 105 endif 106 107 KBUILD_RUSTFLAGS += --target=loongarch64-unknown-none-softfloat 108 KBUILD_RUSTFLAGS_KERNEL += -Zdirect-access-external-data=yes 109 KBUILD_RUSTFLAGS_MODULE += -Zdirect-access-external-data=no 110 111 ifeq ($(CONFIG_RELOCATABLE),y) 112 KBUILD_CFLAGS_KERNEL += -fPIE 113 KBUILD_RUSTFLAGS_KERNEL += -Crelocation-model=pie 114 LDFLAGS_vmlinux += -static -pie --no-dynamic-linker -z notext $(call ld-option, --apply-dynamic-relocs) 115 endif 116 117 cflags-y += $(call cc-option, -mno-check-zero-division) 118 119 ifndef CONFIG_KASAN 120 cflags-y += -fno-builtin-memcpy -fno-builtin-memmove -fno-builtin-memset 121 endif 122 123 load-y = 0x9000000000200000 124 bootvars-y = VMLINUX_LOAD_ADDRESS=$(load-y) 125 126 drivers-$(CONFIG_PCI) += arch/loongarch/pci/ 127 128 KBUILD_AFLAGS += $(cflags-y) 129 KBUILD_CFLAGS += $(cflags-y) 130 KBUILD_CPPFLAGS += -DVMLINUX_LOAD_ADDRESS=$(load-y) 131 132 # This is required to get dwarf unwinding tables into .debug_frame 133 # instead of .eh_frame so we don't discard them. 134 KBUILD_CFLAGS += -fno-asynchronous-unwind-tables 135 136 ifdef CONFIG_ARCH_STRICT_ALIGN 137 # Don't emit unaligned accesses. 138 # Not all LoongArch cores support unaligned access, and as kernel we can't 139 # rely on others to provide emulation for these accesses. 140 KBUILD_CFLAGS += $(call cc-option,-mstrict-align) 141 else 142 # Optimise for performance on hardware supports unaligned access. 143 KBUILD_CFLAGS += $(call cc-option,-mno-strict-align) 144 endif 145 146 KBUILD_CFLAGS += -isystem $(shell $(CC) -print-file-name=include) 147 148 KBUILD_LDFLAGS += -m $(ld-emul) 149 150 ifdef need-compiler 151 CHECKFLAGS += $(shell $(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -dM -E -x c /dev/null | \ 152 grep -E -vw '__GNUC_(MINOR_|PATCHLEVEL_)?_' | \ 153 sed -e "s/^\#define /-D'/" -e "s/ /'='/" -e "s/$$/'/" -e 's/\$$/&&/g') 154 endif 155 156 libs-y += arch/loongarch/lib/ 157 libs-$(CONFIG_EFI_STUB) += $(objtree)/drivers/firmware/efi/libstub/lib.a 158 159 drivers-y += arch/loongarch/crypto/ 160 161 # suspend and hibernation support 162 drivers-$(CONFIG_PM) += arch/loongarch/power/ 163 164 ifeq ($(KBUILD_EXTMOD),) 165 prepare: vdso_prepare 166 vdso_prepare: prepare0 167 $(Q)$(MAKE) $(build)=arch/loongarch/vdso include/generated/vdso-offsets.h 168 endif 169 170 vdso-install-y += arch/loongarch/vdso/vdso.so.dbg 171 172 all: $(notdir $(KBUILD_IMAGE)) $(KBUILD_DTBS) 173 174 vmlinuz.efi: vmlinux.efi 175 176 vmlinux.elf vmlinux.efi vmlinuz.efi: vmlinux 177 $(Q)$(MAKE) $(build)=$(boot) $(bootvars-y) $(boot)/$@ 178 179 install: 180 $(Q)install -D -m 755 $(KBUILD_IMAGE) $(INSTALL_PATH)/$(image-name-y)-$(KERNELRELEASE) 181 $(Q)install -D -m 644 .config $(INSTALL_PATH)/config-$(KERNELRELEASE) 182 $(Q)install -D -m 644 System.map $(INSTALL_PATH)/System.map-$(KERNELRELEASE) 183 184 define archhelp 185 echo ' install - install kernel into $(INSTALL_PATH)' 186 echo 187 endef
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.