2019-08-14 19:06:23 +03:00
# SPDX-License-Identifier: GPL-2.0-only
# ===========================================================================
# Module final link
# ===========================================================================
PHONY := __modfinal
__modfinal :
i n c l u d e $( srctree ) / s c r i p t s / K b u i l d . i n c l u d e
# for c_flags
i n c l u d e $( srctree ) / s c r i p t s / M a k e f i l e . l i b
# find all modules listed in modules.order
modules := $( sort $( shell cat $( MODORDER) ) )
__modfinal : $( modules )
@:
2019-08-19 11:58:43 +03:00
# modname and part-of-module are set to make c_flags define proper module flags
2019-08-14 19:06:23 +03:00
modname = $( notdir $( @:.mod.o= ) )
2019-08-19 11:58:43 +03:00
part-of-module = y
2019-08-14 19:06:23 +03:00
quiet_cmd_cc_o_c = CC [ M] $@
2019-08-19 11:58:43 +03:00
cmd_cc_o_c = $( CC) $( c_flags) -c -o $@ $<
2019-08-14 19:06:23 +03:00
%.mod.o : %.mod .c FORCE
$( call if_changed_dep,cc_o_c)
ARCH_POSTLINK := $( wildcard $( srctree) /arch/$( SRCARCH) /Makefile.postlink)
quiet_cmd_ld_ko_o = LD [ M] $@
cmd_ld_ko_o = \
$( LD) -r $( KBUILD_LDFLAGS) \
$( KBUILD_LDFLAGS_MODULE) $( LDFLAGS_MODULE) \
2020-09-08 07:27:08 +03:00
-T scripts/module.lds -o $@ $( filter %.o, $^) ; \
2019-08-14 19:06:23 +03:00
$( if $( ARCH_POSTLINK) , $( MAKE) -f $( ARCH_POSTLINK) $@ , true )
2020-09-08 07:27:08 +03:00
$(modules) : %.ko : %.o %.mod .o scripts /module .lds FORCE
2019-08-14 19:06:23 +03:00
+$( 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) ) )
- i n c l u d e $( foreach f ,$ ( existing -targets ) ,$ ( dir $ ( f ) ) .$ ( notdir $ ( f ) ) .cmd )
.PHONY : $( PHONY )