xref: /linux/scripts/Makefile.vmlinux_o (revision 5d45950dfbb1540bba3e3762a3497de8b4a715d3)
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