xref: /OK3568_Linux_fs/buildroot/package/pkg-kernel-module.mk (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1################################################################################
2# kernel module infrastructure for building Linux kernel modules
3#
4# This file implements an infrastructure that eases development of package
5# .mk files for out-of-tree Linux kernel modules. It should be used for all
6# packages that build a Linux kernel module using the kernel's out-of-tree
7# buildsystem, unless they use a complex custom buildsystem.
8#
9# The kernel-module infrastructure requires the packages that use it to also
10# use another package infrastructure. kernel-module only defines post-build
11# and post-install hooks. This allows the package to build both kernel
12# modules and/or user-space components (with any of the other *-package
13# infra).
14#
15# As such, it is to be used in conjunction with another *-package infra,
16# like so:
17#
18#   $(eval $(kernel-module))
19#   $(eval $(generic-package))
20#
21# Note: if the caller needs access to the kernel modules (either after they
22# are built or after they are installed), it will have to define its own
23# post-build/install hooks *after* calling kernel-module, but *before*
24# calling the other *-package infra, like so:
25#
26#   $(eval $(kernel-module))
27#   define FOO_MOD_TWEAK
28#       # do something
29#   endef
30#   FOO_POST_BUILD_HOOKS += FOO_MOD_TWEAK
31#   $(eval $(generic-package))
32#
33# Note: this infra does not check that the kernel is enabled; it is expected
34# to be enforced at the Kconfig level with proper 'depends on'.
35################################################################################
36
37################################################################################
38# inner-kernel-module -- generates the make targets needed to support building
39# a kernel module
40#
41#  argument 1 is the lowercase package name
42#  argument 2 is the uppercase package name
43################################################################################
44
45define inner-kernel-module
46
47# If the package is enabled, ensure the kernel will support modules
48ifeq ($$(BR2_PACKAGE_$(2)),y)
49LINUX_NEEDS_MODULES = y
50endif
51
52# The kernel must be built first.
53$(2)_DEPENDENCIES += linux
54
55# This is only defined in some infrastructures (e.g. autotools, cmake),
56# but not in others (e.g. generic). So define it here as well.
57$(2)_MAKE ?= $$(MAKE)
58
59# If not specified, consider the source of the kernel module to be at
60# the root of the package.
61$(2)_MODULE_SUBDIRS ?= .
62
63# Build the kernel module(s)
64# Force PWD for those packages that want to use it to find their
65# includes and other support files (Booo!)
66define $(2)_KERNEL_MODULES_BUILD
67	@$$(call MESSAGE,"Building kernel module(s)")
68	$$(foreach d,$$($(2)_MODULE_SUBDIRS), \
69		$$(LINUX_MAKE_ENV) $$($$(PKG)_MAKE) \
70			-C $$(LINUX_DIR) \
71			$$(LINUX_MAKE_FLAGS) \
72			$$($(2)_MODULE_MAKE_OPTS) \
73			PWD=$$(@D)/$$(d) \
74			M=$$(@D)/$$(d) \
75			modules$$(sep))
76endef
77$(2)_POST_BUILD_HOOKS += $(2)_KERNEL_MODULES_BUILD
78
79# Install the kernel module(s)
80# Force PWD for those packages that want to use it to find their
81# includes and other support files (Booo!)
82define $(2)_KERNEL_MODULES_INSTALL
83	@$$(call MESSAGE,"Installing kernel module(s)")
84	$$(foreach d,$$($(2)_MODULE_SUBDIRS), \
85		$$(LINUX_MAKE_ENV) $$($$(PKG)_MAKE) \
86			-C $$(LINUX_DIR) \
87			$$(LINUX_MAKE_FLAGS) \
88			$$($(2)_MODULE_MAKE_OPTS) \
89			PWD=$$(@D)/$$(d) \
90			M=$$(@D)/$$(d) \
91			modules_install$$(sep))
92endef
93$(2)_POST_INSTALL_TARGET_HOOKS += $(2)_KERNEL_MODULES_INSTALL
94
95endef
96
97################################################################################
98# kernel-module -- the target generator macro for kernel module packages
99################################################################################
100
101kernel-module = $(call inner-kernel-module,$(pkgname),$(call UPPERCASE,$(pkgname)))
102