123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- ################################################################################
- # 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
- # If the package is enabled, ensure the kernel will support modules
- ifeq ($$(BR2_PACKAGE_$(2)),y)
- LINUX_NEEDS_MODULES = y
- endif
- # 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)")
- $$(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)))
|