8df95d926e
Test the configuration of the kernel to see if loadable module support is enabled, and error out otherwise. This makes build failures of external kernel modules less confusing. [Thomas: tweak the commit log.] Signed-off-by: Noé Rubinstein <nrubinstein@aldebaran.com> Acked-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
101 lines
3.7 KiB
Makefile
101 lines
3.7 KiB
Makefile
################################################################################
|
|
# kernel module infrastructure for building Linux kernel modules
|
|
#
|
|
# This file implements an infrastructure that eases development of package
|
|
# .mk files for out-of-tree Linux kernel modules. It should be used for all
|
|
# packages that build a Linux kernel module using the kernel's out-of-tree
|
|
# buildsystem, unless they use a complex custom buildsystem.
|
|
#
|
|
# The kernel-module infrastructure requires the packages that use it to also
|
|
# use another package infrastructure. kernel-module only defines post-build
|
|
# and post-install hooks. This allows the package to build both kernel
|
|
# modules and/or user-space components (with any of the other *-package
|
|
# infra).
|
|
#
|
|
# As such, it is to be used in conjunction with another *-package infra,
|
|
# like so:
|
|
#
|
|
# $(eval $(kernel-module))
|
|
# $(eval $(generic-package))
|
|
#
|
|
# Note: if the caller needs access to the kernel modules (either after they
|
|
# are built or after they are installed), it will have to define its own
|
|
# post-build/install hooks *after* calling kernel-module, but *before*
|
|
# calling the other *-package infra, like so:
|
|
#
|
|
# $(eval $(kernel-module))
|
|
# define FOO_MOD_TWEAK
|
|
# # do something
|
|
# endef
|
|
# FOO_POST_BUILD_HOOKS += FOO_MOD_TWEAK
|
|
# $(eval $(generic-package))
|
|
#
|
|
# Note: this infra does not check that the kernel is enabled; it is expected
|
|
# to be enforced at the Kconfig level with proper 'depends on'.
|
|
################################################################################
|
|
|
|
################################################################################
|
|
# inner-kernel-module -- generates the make targets needed to support building
|
|
# a kernel module
|
|
#
|
|
# argument 1 is the lowercase package name
|
|
# argument 2 is the uppercase package name
|
|
################################################################################
|
|
|
|
define inner-kernel-module
|
|
|
|
# The kernel must be built first.
|
|
$(2)_DEPENDENCIES += linux
|
|
|
|
# This is only defined in some infrastructures (e.g. autotools, cmake),
|
|
# but not in others (e.g. generic). So define it here as well.
|
|
$(2)_MAKE ?= $$(MAKE)
|
|
|
|
# If not specified, consider the source of the kernel module to be at
|
|
# the root of the package.
|
|
$(2)_MODULE_SUBDIRS ?= .
|
|
|
|
# Build the kernel module(s)
|
|
# Force PWD for those packages that want to use it to find their
|
|
# includes and other support files (Booo!)
|
|
define $(2)_KERNEL_MODULES_BUILD
|
|
@$$(call MESSAGE,"Building kernel module(s)")
|
|
@if ! grep -Fqx 'CONFIG_MODULES=y' $(LINUX_DIR)/.config; then \
|
|
echo "ERROR: Kernel does not support loadable modules"; \
|
|
exit 1; \
|
|
fi
|
|
$$(foreach d,$$($(2)_MODULE_SUBDIRS), \
|
|
$$(LINUX_MAKE_ENV) $$($$(PKG)_MAKE) \
|
|
-C $$(LINUX_DIR) \
|
|
$$(LINUX_MAKE_FLAGS) \
|
|
$$($(2)_MODULE_MAKE_OPTS) \
|
|
PWD=$$(@D)/$$(d) \
|
|
M=$$(@D)/$$(d) \
|
|
modules$$(sep))
|
|
endef
|
|
$(2)_POST_BUILD_HOOKS += $(2)_KERNEL_MODULES_BUILD
|
|
|
|
# Install the kernel module(s)
|
|
# Force PWD for those packages that want to use it to find their
|
|
# includes and other support files (Booo!)
|
|
define $(2)_KERNEL_MODULES_INSTALL
|
|
@$$(call MESSAGE,"Installing kernel module(s)")
|
|
$$(foreach d,$$($(2)_MODULE_SUBDIRS), \
|
|
$$(LINUX_MAKE_ENV) $$($$(PKG)_MAKE) \
|
|
-C $$(LINUX_DIR) \
|
|
$$(LINUX_MAKE_FLAGS) \
|
|
$$($(2)_MODULE_MAKE_OPTS) \
|
|
PWD=$$(@D)/$$(d) \
|
|
M=$$(@D)/$$(d) \
|
|
modules_install$$(sep))
|
|
endef
|
|
$(2)_POST_INSTALL_TARGET_HOOKS += $(2)_KERNEL_MODULES_INSTALL
|
|
|
|
endef
|
|
|
|
################################################################################
|
|
# kernel-module -- the target generator macro for kernel module packages
|
|
################################################################################
|
|
|
|
kernel-module = $(call inner-kernel-module,$(pkgname),$(call UPPERCASE,$(pkgname)))
|