xref: /linux/scripts/Makefile.modfinal (revision 9b9a3f20cbe0ba9269cde6fff9f9c69907e150cf)
1*9b9a3f20SMasahiro Yamada# SPDX-License-Identifier: GPL-2.0-only
2*9b9a3f20SMasahiro Yamada# ===========================================================================
3*9b9a3f20SMasahiro Yamada# Module final link
4*9b9a3f20SMasahiro Yamada# ===========================================================================
5*9b9a3f20SMasahiro Yamada
6*9b9a3f20SMasahiro YamadaPHONY := __modfinal
7*9b9a3f20SMasahiro Yamada__modfinal:
8*9b9a3f20SMasahiro Yamada
9*9b9a3f20SMasahiro Yamadainclude $(srctree)/scripts/Kbuild.include
10*9b9a3f20SMasahiro Yamada
11*9b9a3f20SMasahiro Yamada# for c_flags
12*9b9a3f20SMasahiro Yamadainclude $(srctree)/scripts/Makefile.lib
13*9b9a3f20SMasahiro Yamada
14*9b9a3f20SMasahiro Yamada# find all modules listed in modules.order
15*9b9a3f20SMasahiro Yamadamodules := $(sort $(shell cat $(MODORDER)))
16*9b9a3f20SMasahiro Yamada
17*9b9a3f20SMasahiro Yamada__modfinal: $(modules)
18*9b9a3f20SMasahiro Yamada	@:
19*9b9a3f20SMasahiro Yamada
20*9b9a3f20SMasahiro Yamada# modname is set to make c_flags define KBUILD_MODNAME
21*9b9a3f20SMasahiro Yamadamodname = $(notdir $(@:.mod.o=))
22*9b9a3f20SMasahiro Yamada
23*9b9a3f20SMasahiro Yamadaquiet_cmd_cc_o_c = CC [M]  $@
24*9b9a3f20SMasahiro Yamada      cmd_cc_o_c = $(CC) $(c_flags) $(KBUILD_CFLAGS_MODULE) $(CFLAGS_MODULE) \
25*9b9a3f20SMasahiro Yamada		   -c -o $@ $<
26*9b9a3f20SMasahiro Yamada
27*9b9a3f20SMasahiro Yamada%.mod.o: %.mod.c FORCE
28*9b9a3f20SMasahiro Yamada	$(call if_changed_dep,cc_o_c)
29*9b9a3f20SMasahiro Yamada
30*9b9a3f20SMasahiro YamadaARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)
31*9b9a3f20SMasahiro Yamada
32*9b9a3f20SMasahiro Yamadaquiet_cmd_ld_ko_o = LD [M]  $@
33*9b9a3f20SMasahiro Yamada      cmd_ld_ko_o =                                                     \
34*9b9a3f20SMasahiro Yamada	$(LD) -r $(KBUILD_LDFLAGS)					\
35*9b9a3f20SMasahiro Yamada		$(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE)		\
36*9b9a3f20SMasahiro Yamada		$(addprefix -T , $(KBUILD_LDS_MODULE))			\
37*9b9a3f20SMasahiro Yamada		-o $@ $(filter %.o, $^);				\
38*9b9a3f20SMasahiro Yamada	$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
39*9b9a3f20SMasahiro Yamada
40*9b9a3f20SMasahiro Yamada$(modules): %.ko: %.o %.mod.o $(KBUILD_LDS_MODULE) FORCE
41*9b9a3f20SMasahiro Yamada	+$(call if_changed,ld_ko_o)
42*9b9a3f20SMasahiro Yamada
43*9b9a3f20SMasahiro Yamadatargets += $(modules) $(modules:.ko=.mod.o)
44*9b9a3f20SMasahiro Yamada
45*9b9a3f20SMasahiro Yamada# Add FORCE to the prequisites of a target to force it to be always rebuilt.
46*9b9a3f20SMasahiro Yamada# ---------------------------------------------------------------------------
47*9b9a3f20SMasahiro Yamada
48*9b9a3f20SMasahiro YamadaPHONY += FORCE
49*9b9a3f20SMasahiro YamadaFORCE:
50*9b9a3f20SMasahiro Yamada
51*9b9a3f20SMasahiro Yamada# Read all saved command lines and dependencies for the $(targets) we
52*9b9a3f20SMasahiro Yamada# may be building above, using $(if_changed{,_dep}). As an
53*9b9a3f20SMasahiro Yamada# optimization, we don't need to read them if the target does not
54*9b9a3f20SMasahiro Yamada# exist, we will rebuild anyway in that case.
55*9b9a3f20SMasahiro Yamada
56*9b9a3f20SMasahiro Yamadaexisting-targets := $(wildcard $(sort $(targets)))
57*9b9a3f20SMasahiro Yamada
58*9b9a3f20SMasahiro Yamada-include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
59*9b9a3f20SMasahiro Yamada
60*9b9a3f20SMasahiro Yamada.PHONY: $(PHONY)
61