# SPDX-License-Identifier: GPL-2.0-only

PHONY := __default
__default: vmlinux.o modules.builtin.modinfo modules.builtin

include include/config/auto.conf
include $(srctree)/scripts/Kbuild.include

# for objtool
include $(srctree)/scripts/Makefile.lib

# Generate a linker script to ensure correct ordering of initcalls for Clang LTO
# ---------------------------------------------------------------------------

quiet_cmd_gen_initcalls_lds = GEN     $@
      cmd_gen_initcalls_lds = \
	$(PYTHON3) $(srctree)/scripts/jobserver-exec \
	$(PERL) $(real-prereqs) > $@

.tmp_initcalls.lds: $(srctree)/scripts/generate_initcall_order.pl \
		vmlinux.a $(KBUILD_VMLINUX_LIBS) FORCE
	$(call if_changed,gen_initcalls_lds)

targets := .tmp_initcalls.lds

ifdef CONFIG_LTO_CLANG
initcalls-lds := .tmp_initcalls.lds
endif

# objtool for vmlinux.o
# ---------------------------------------------------------------------------
#
# For delay-objtool (IBT or LTO), objtool doesn't run on individual translation
# units.  Instead it runs on vmlinux.o.
#
# For !delay-objtool + CONFIG_NOINSTR_VALIDATION, it runs on both translation
# units and vmlinux.o, with the latter only used for noinstr/unret validation.

objtool-enabled := $(or $(delay-objtool),$(CONFIG_NOINSTR_VALIDATION))

ifeq ($(delay-objtool),y)
vmlinux-objtool-args-y					+= $(objtool-args-y)
else
vmlinux-objtool-args-$(CONFIG_OBJTOOL_WERROR)		+= --Werror
endif

vmlinux-objtool-args-$(CONFIG_NOINSTR_VALIDATION)	+= --noinstr \
							   $(if $(or $(CONFIG_MITIGATION_UNRET_ENTRY),$(CONFIG_MITIGATION_SRSO)), --unret)

objtool-args = $(vmlinux-objtool-args-y) --link

# Link of vmlinux.o used for section mismatch analysis
# ---------------------------------------------------------------------------

vmlinux-o-ld-args-$(CONFIG_BUILTIN_MODULE_RANGES)	+= -Map=$@.map

quiet_cmd_ld_vmlinux.o = LD      $@
      cmd_ld_vmlinux.o = \
	$(LD) ${KBUILD_LDFLAGS} -r -o $@ \
	$(vmlinux-o-ld-args-y) \
	$(addprefix -T , $(initcalls-lds)) \
	--whole-archive vmlinux.a --no-whole-archive \
	--start-group $(KBUILD_VMLINUX_LIBS) --end-group \
	$(cmd_objtool)

define rule_ld_vmlinux.o
	$(call cmd_and_savecmd,ld_vmlinux.o)
	$(call cmd,gen_objtooldep)
endef

vmlinux.o: $(initcalls-lds) vmlinux.a $(KBUILD_VMLINUX_LIBS) FORCE
	$(call if_changed_rule,ld_vmlinux.o)

targets += vmlinux.o

# modules.builtin.modinfo
# ---------------------------------------------------------------------------

# .modinfo in vmlinux.unstripped is aligned to 8 bytes for compatibility with
# tools that expect vmlinux to have sufficiently aligned sections but the
# additional bytes used for padding .modinfo to satisfy this requirement break
# certain versions of kmod with
#
#   depmod: ERROR: kmod_builtin_iter_next: unexpected string without modname prefix
#
# Strip the trailing padding bytes after extracting .modinfo to comply with
# what kmod expects to parse.
quiet_cmd_modules_builtin_modinfo = GEN     $@
      cmd_modules_builtin_modinfo = $(cmd_objcopy); \
                                    sed -i 's/\x00\+$$/\x00/g' $@

OBJCOPYFLAGS_modules.builtin.modinfo := -j .modinfo -O binary

targets += modules.builtin.modinfo
modules.builtin.modinfo: vmlinux.o FORCE
	$(call if_changed,modules_builtin_modinfo)

# modules.builtin
# ---------------------------------------------------------------------------

# The second line aids cases where multiple modules share the same object.

quiet_cmd_modules_builtin = GEN     $@
      cmd_modules_builtin = \
	tr '\0' '\n' < $< | \
	sed -n 's/^[[:alnum:]:_]*\.file=//p' | \
	tr ' ' '\n' | uniq | sed -e 's:^:kernel/:' -e 's/$$/.ko/' > $@

targets += modules.builtin
modules.builtin: modules.builtin.modinfo FORCE
	$(call if_changed,modules_builtin)

# Add FORCE to the prerequisites of a target to force it to be always rebuilt.
# ---------------------------------------------------------------------------

PHONY += FORCE
FORCE:

# Read all saved command lines and dependencies for the $(targets) we
# may be building above, using $(if_changed{,_dep}). As an
# optimization, we don't need to read them if the target does not
# exist, we will rebuild anyway in that case.

existing-targets := $(wildcard $(sort $(targets)))

-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)

.PHONY: $(PHONY)
