# SPDX-License-Identifier: GPL-2.0-only
# ===========================================================================
# Module final link
# ===========================================================================

PHONY := __modfinal
__modfinal:

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

# for c_flags and objtool_args
include $(srctree)/scripts/Makefile.lib

# find all modules listed in modules.order
modules := $(sort $(shell cat $(MODORDER)))

__modfinal: $(modules)
	@:

# modname and part-of-module are set to make c_flags define proper module flags
modname = $(notdir $(@:.mod.o=))
part-of-module = y

quiet_cmd_cc_o_c = CC [M]  $@
      cmd_cc_o_c =							\
		$(CC) $(filter-out $(CC_FLAGS_CFI) $(CC_FLAGS_FTRACE),	\
			$(c_flags)) -c -o $@ $<

%.mod.o: %.mod.c FORCE
	$(call if_changed_dep,cc_o_c)

ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)

ifdef CONFIG_LTO_CLANG
# With CONFIG_LTO_CLANG, reuse the object file we compiled for modpost to
# avoid a second slow LTO link
prelink-ext := .lto

# ELF processing was skipped earlier because we didn't have native code,
# so let's now process the prelinked binary before we link the module.

ifdef CONFIG_STACK_VALIDATION
ifneq ($(SKIP_STACK_VALIDATION),1)
cmd_ld_ko_o +=								\
	$(objtree)/tools/objtool/objtool $(objtool_args)		\
		$(@:.ko=$(prelink-ext).o);

endif # SKIP_STACK_VALIDATION
endif # CONFIG_STACK_VALIDATION

endif # CONFIG_LTO_CLANG

quiet_cmd_ld_ko_o = LD [M]  $@
      cmd_ld_ko_o +=							\
	$(LD) -r $(KBUILD_LDFLAGS)					\
		$(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE)		\
		-T scripts/module.lds -o $@ $(filter %.o, $^);		\
	$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)

ifdef CONFIG_CFI_CLANG
# LLVM can drops jump table symbols from the final binary. Add them
# back to make stack traces and other symbol output readable.
cmd_ld_ko_o += ;							\
	$(srctree)/scripts/generate_cfi_kallsyms.pl --module		\
		$@ > $(@:.ko=.lds);					\
	if [ -s $(@:.ko=.lds) ]; then					\
		$(LD) -r $(KBUILD_LDFLAGS) 				\
			$(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE)	\
			-T $(@:.ko=.lds)				\
			-o $(@:.ko=.tmp.ko) $@;				\
		mv -f $(@:.ko=.tmp.ko) $@;				\
	else								\
		rm -f $(@:.ko=.lds);					\
	fi
endif

$(modules): %.ko: %$(prelink-ext).o %.mod.o scripts/module.lds FORCE
	+$(call if_changed,ld_ko_o)

targets += $(modules) $(modules:.ko=.mod.o)

# Add FORCE to the prequisites 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)
