9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 1) # SPDX-License-Identifier: GPL-2.0-only
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 2) # ===========================================================================
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 3) # Module final link
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 4) # ===========================================================================
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 5)
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 6) PHONY := __modfinal
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 7) __modfinal:
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 8)
5f9ae91f7c0db (Andrii Nakryiko 2020-11-09 17:19:30 -0800 9) include include/config/auto.conf
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 10) include $(srctree)/scripts/Kbuild.include
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 11)
850ded46c6429 (Sami Tolvanen 2021-08-16 11:05:19 -0700 12) # for c_flags and mod-prelink-ext
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 13) include $(srctree)/scripts/Makefile.lib
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 14)
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 15) # find all modules listed in modules.order
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 16) modules := $(sort $(shell cat $(MODORDER)))
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 17)
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 18) __modfinal: $(modules)
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 19) @:
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 20)
eb27ea5ce7f36 (Masahiro Yamada 2019-08-19 17:58:43 +0900 21) # modname and part-of-module are set to make c_flags define proper module flags
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 22) modname = $(notdir $(@:.mod.o=))
eb27ea5ce7f36 (Masahiro Yamada 2019-08-19 17:58:43 +0900 23) part-of-module = y
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 24)
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 25) quiet_cmd_cc_o_c = CC [M] $@
cf68fffb66d60 (Sami Tolvanen 2021-04-08 11:28:26 -0700 26) cmd_cc_o_c = $(CC) $(filter-out $(CC_FLAGS_CFI), $(c_flags)) -c -o $@ $<
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 27)
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 28) %.mod.o: %.mod.c FORCE
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 29) $(call if_changed_dep,cc_o_c)
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 30)
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 31) ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 32)
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 33) quiet_cmd_ld_ko_o = LD [M] $@
b1a1a1a09b460 (Sami Tolvanen 2020-04-13 16:10:13 -0700 34) cmd_ld_ko_o += \
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 35) $(LD) -r $(KBUILD_LDFLAGS) \
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 36) $(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE) \
596b0474d3d9b (Masahiro Yamada 2020-09-08 13:27:08 +0900 37) -T scripts/module.lds -o $@ $(filter %.o, $^); \
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 38) $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 39)
5f9ae91f7c0db (Andrii Nakryiko 2020-11-09 17:19:30 -0800 40) quiet_cmd_btf_ko = BTF [M] $@
e732b538f4557 (Andrii Nakryiko 2020-11-20 23:08:28 -0800 41) cmd_btf_ko = \
e732b538f4557 (Andrii Nakryiko 2020-11-20 23:08:28 -0800 42) if [ -f vmlinux ]; then \
ff2e6efda0d5c (Javier Martinez Canillas 2021-05-26 23:52:28 +0200 43) LLVM_OBJCOPY="$(OBJCOPY)" $(PAHOLE) -J --btf_base vmlinux $@; \
e732b538f4557 (Andrii Nakryiko 2020-11-20 23:08:28 -0800 44) else \
e732b538f4557 (Andrii Nakryiko 2020-11-20 23:08:28 -0800 45) printf "Skipping BTF generation for %s due to unavailability of vmlinux\n" $@ 1>&2; \
e732b538f4557 (Andrii Nakryiko 2020-11-20 23:08:28 -0800 46) fi;
5f9ae91f7c0db (Andrii Nakryiko 2020-11-09 17:19:30 -0800 47)
5f9ae91f7c0db (Andrii Nakryiko 2020-11-09 17:19:30 -0800 48) # Same as newer-prereqs, but allows to exclude specified extra dependencies
5f9ae91f7c0db (Andrii Nakryiko 2020-11-09 17:19:30 -0800 49) newer_prereqs_except = $(filter-out $(PHONY) $(1),$?)
5f9ae91f7c0db (Andrii Nakryiko 2020-11-09 17:19:30 -0800 50)
5f9ae91f7c0db (Andrii Nakryiko 2020-11-09 17:19:30 -0800 51) # Same as if_changed, but allows to exclude specified extra dependencies
5f9ae91f7c0db (Andrii Nakryiko 2020-11-09 17:19:30 -0800 52) if_changed_except = $(if $(call newer_prereqs_except,$(2))$(cmd-check), \
5f9ae91f7c0db (Andrii Nakryiko 2020-11-09 17:19:30 -0800 53) $(cmd); \
5f9ae91f7c0db (Andrii Nakryiko 2020-11-09 17:19:30 -0800 54) printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd, @:)
5f9ae91f7c0db (Andrii Nakryiko 2020-11-09 17:19:30 -0800 55)
dc5723b02e523 (Sami Tolvanen 2020-12-11 10:46:19 -0800 56)
5f9ae91f7c0db (Andrii Nakryiko 2020-11-09 17:19:30 -0800 57) # Re-generate module BTFs if either module's .ko or vmlinux changed
850ded46c6429 (Sami Tolvanen 2021-08-16 11:05:19 -0700 58) $(modules): %.ko: %$(mod-prelink-ext).o %.mod.o scripts/module.lds $(if $(KBUILD_BUILTIN),vmlinux) FORCE
5f9ae91f7c0db (Andrii Nakryiko 2020-11-09 17:19:30 -0800 59) +$(call if_changed_except,ld_ko_o,vmlinux)
5f9ae91f7c0db (Andrii Nakryiko 2020-11-09 17:19:30 -0800 60) ifdef CONFIG_DEBUG_INFO_BTF_MODULES
5f9ae91f7c0db (Andrii Nakryiko 2020-11-09 17:19:30 -0800 61) +$(if $(newer-prereqs),$(call cmd,btf_ko))
5f9ae91f7c0db (Andrii Nakryiko 2020-11-09 17:19:30 -0800 62) endif
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 63)
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 64) targets += $(modules) $(modules:.ko=.mod.o)
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 65)
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 66) # Add FORCE to the prequisites of a target to force it to be always rebuilt.
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 67) # ---------------------------------------------------------------------------
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 68)
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 69) PHONY += FORCE
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 70) FORCE:
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 71)
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 72) # Read all saved command lines and dependencies for the $(targets) we
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 73) # may be building above, using $(if_changed{,_dep}). As an
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 74) # optimization, we don't need to read them if the target does not
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 75) # exist, we will rebuild anyway in that case.
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 76)
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 77) existing-targets := $(wildcard $(sort $(targets)))
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 78)
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 79) -include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 80)
9b9a3f20cbe0b (Masahiro Yamada 2019-08-15 01:06:23 +0900 81) .PHONY: $(PHONY)