mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/
synced 2025-04-19 20:58:31 +09:00

The imperative paradigm used to build vmlinux, extract some info from it or perform some checks on it, and subsequently modify it again goes against the declarative paradigm that is usually employed for defining make rules. In particular, the Makefile.postlink files that consume their input via an output rule result in some dodgy logic in the decompressor makefiles for RISC-V and x86, given that the vmlinux.relocs input file needed to generate the arch-specific relocation tables may not exist or be out of date, but cannot be constructed using the ordinary Make dependency based rules, because the info needs to be extracted while vmlinux is in its ephemeral, non-stripped form. So instead, for architectures that require the static relocations that are emitted into vmlinux when passing --emit-relocs to the linker, and are subsequently stripped out again, introduce an intermediate vmlinux target called vmlinux.unstripped, and organize the reset of the build logic accordingly: - vmlinux.unstripped is created only once, and not updated again - build rules under arch/*/boot can depend on vmlinux.unstripped without running the risk of the data disappearing or being out of date - the final vmlinux generated by the build is not bloated with static relocations that are never needed again after the build completes. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
75 lines
1.9 KiB
Makefile
75 lines
1.9 KiB
Makefile
#
|
|
# arch/riscv/boot/Makefile
|
|
#
|
|
# This file is included by the global makefile so that you can add your own
|
|
# architecture-specific flags and dependencies.
|
|
#
|
|
# This file is subject to the terms and conditions of the GNU General Public
|
|
# License. See the file "COPYING" in the main directory of this archive
|
|
# for more details.
|
|
#
|
|
# Copyright (C) 2018, Anup Patel.
|
|
# Author: Anup Patel <anup@brainfault.org>
|
|
#
|
|
# Based on the ia64 and arm64 boot/Makefile.
|
|
#
|
|
|
|
OBJCOPYFLAGS_Image :=-O binary -R .note -R .note.gnu.build-id -R .comment -S
|
|
OBJCOPYFLAGS_loader.bin :=-O binary
|
|
OBJCOPYFLAGS_xipImage :=-O binary -R .note -R .note.gnu.build-id -R .comment -S
|
|
|
|
targets := Image Image.* loader loader.o loader.lds loader.bin xipImage
|
|
|
|
ifeq ($(CONFIG_XIP_KERNEL),y)
|
|
|
|
quiet_cmd_mkxip = $(quiet_cmd_objcopy)
|
|
cmd_mkxip = $(cmd_objcopy)
|
|
|
|
$(obj)/xipImage: vmlinux FORCE
|
|
$(call if_changed,mkxip)
|
|
@$(kecho) ' Physical Address of xipImage: $(CONFIG_XIP_PHYS_ADDR)'
|
|
|
|
endif
|
|
|
|
ifdef CONFIG_RELOCATABLE
|
|
$(obj)/Image: vmlinux.unstripped FORCE
|
|
else
|
|
$(obj)/Image: vmlinux FORCE
|
|
endif
|
|
$(call if_changed,objcopy)
|
|
|
|
$(obj)/Image.gz: $(obj)/Image FORCE
|
|
$(call if_changed,gzip)
|
|
|
|
$(obj)/loader.o: $(src)/loader.S $(obj)/Image
|
|
|
|
$(obj)/loader: $(obj)/loader.o $(obj)/Image $(obj)/loader.lds FORCE
|
|
$(Q)$(LD) -T $(obj)/loader.lds -o $@ $(obj)/loader.o
|
|
|
|
$(obj)/Image.bz2: $(obj)/Image FORCE
|
|
$(call if_changed,bzip2)
|
|
|
|
$(obj)/Image.lz4: $(obj)/Image FORCE
|
|
$(call if_changed,lz4)
|
|
|
|
$(obj)/Image.lzma: $(obj)/Image FORCE
|
|
$(call if_changed,lzma)
|
|
|
|
$(obj)/Image.lzo: $(obj)/Image FORCE
|
|
$(call if_changed,lzo)
|
|
|
|
$(obj)/Image.zst: $(obj)/Image FORCE
|
|
$(call if_changed,zstd)
|
|
|
|
$(obj)/Image.xz: $(obj)/Image FORCE
|
|
$(call if_changed,xzkern)
|
|
|
|
$(obj)/loader.bin: $(obj)/loader FORCE
|
|
$(call if_changed,objcopy)
|
|
|
|
EFI_ZBOOT_PAYLOAD := Image
|
|
EFI_ZBOOT_BFD_TARGET := elf$(BITS)-littleriscv
|
|
EFI_ZBOOT_MACH_TYPE := RISCV$(BITS)
|
|
|
|
include $(srctree)/drivers/firmware/efi/libstub/Makefile.zboot
|