1*5d45950dSMasahiro Yamada# SPDX-License-Identifier: GPL-2.0-only 2*5d45950dSMasahiro Yamada 3*5d45950dSMasahiro YamadaPHONY := __default 4*5d45950dSMasahiro Yamada__default: vmlinux.o 5*5d45950dSMasahiro Yamada 6*5d45950dSMasahiro Yamadainclude include/config/auto.conf 7*5d45950dSMasahiro Yamadainclude $(srctree)/scripts/Kbuild.include 8*5d45950dSMasahiro Yamada 9*5d45950dSMasahiro Yamada# Generate a linker script to ensure correct ordering of initcalls for Clang LTO 10*5d45950dSMasahiro Yamada# --------------------------------------------------------------------------- 11*5d45950dSMasahiro Yamada 12*5d45950dSMasahiro Yamadaquiet_cmd_gen_initcalls_lds = GEN $@ 13*5d45950dSMasahiro Yamada cmd_gen_initcalls_lds = \ 14*5d45950dSMasahiro Yamada $(PYTHON3) $(srctree)/scripts/jobserver-exec \ 15*5d45950dSMasahiro Yamada $(PERL) $(real-prereqs) > $@ 16*5d45950dSMasahiro Yamada 17*5d45950dSMasahiro Yamada.tmp_initcalls.lds: $(srctree)/scripts/generate_initcall_order.pl \ 18*5d45950dSMasahiro Yamada $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS) FORCE 19*5d45950dSMasahiro Yamada $(call if_changed,gen_initcalls_lds) 20*5d45950dSMasahiro Yamada 21*5d45950dSMasahiro Yamadatargets := .tmp_initcalls.lds 22*5d45950dSMasahiro Yamada 23*5d45950dSMasahiro Yamadaifdef CONFIG_LTO_CLANG 24*5d45950dSMasahiro Yamadainitcalls-lds := .tmp_initcalls.lds 25*5d45950dSMasahiro Yamadaendif 26*5d45950dSMasahiro Yamada 27*5d45950dSMasahiro Yamada# Link of vmlinux.o used for section mismatch analysis 28*5d45950dSMasahiro Yamada# --------------------------------------------------------------------------- 29*5d45950dSMasahiro Yamada 30*5d45950dSMasahiro Yamadaquiet_cmd_ld_vmlinux.o = LD $@ 31*5d45950dSMasahiro Yamada cmd_ld_vmlinux.o = \ 32*5d45950dSMasahiro Yamada $(LD) ${KBUILD_LDFLAGS} -r -o $@ \ 33*5d45950dSMasahiro Yamada $(addprefix -T , $(initcalls-lds)) \ 34*5d45950dSMasahiro Yamada --whole-archive $(KBUILD_VMLINUX_OBJS) --no-whole-archive \ 35*5d45950dSMasahiro Yamada --start-group $(KBUILD_VMLINUX_LIBS) --end-group \ 36*5d45950dSMasahiro Yamada 37*5d45950dSMasahiro Yamadadefine rule_ld_vmlinux.o 38*5d45950dSMasahiro Yamada $(call cmd_and_savecmd,ld_vmlinux.o) 39*5d45950dSMasahiro Yamadaendef 40*5d45950dSMasahiro Yamada 41*5d45950dSMasahiro Yamadavmlinux.o: $(initcalls-lds) $(KBUILD_VMLINUX_OBJS) $(KBUILD_VMLINUX_LIBS) FORCE 42*5d45950dSMasahiro Yamada $(call if_changed_rule,ld_vmlinux.o) 43*5d45950dSMasahiro Yamada 44*5d45950dSMasahiro Yamadatargets += vmlinux.o 45*5d45950dSMasahiro Yamada 46*5d45950dSMasahiro Yamada# Add FORCE to the prequisites of a target to force it to be always rebuilt. 47*5d45950dSMasahiro Yamada# --------------------------------------------------------------------------- 48*5d45950dSMasahiro Yamada 49*5d45950dSMasahiro YamadaPHONY += FORCE 50*5d45950dSMasahiro YamadaFORCE: 51*5d45950dSMasahiro Yamada 52*5d45950dSMasahiro Yamada# Read all saved command lines and dependencies for the $(targets) we 53*5d45950dSMasahiro Yamada# may be building above, using $(if_changed{,_dep}). As an 54*5d45950dSMasahiro Yamada# optimization, we don't need to read them if the target does not 55*5d45950dSMasahiro Yamada# exist, we will rebuild anyway in that case. 56*5d45950dSMasahiro Yamada 57*5d45950dSMasahiro Yamadaexisting-targets := $(wildcard $(sort $(targets))) 58*5d45950dSMasahiro Yamada 59*5d45950dSMasahiro Yamada-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd) 60*5d45950dSMasahiro Yamada 61*5d45950dSMasahiro Yamada.PHONY: $(PHONY) 62