| ################################################################################ |
| # |
| # linux-backports |
| # |
| ################################################################################ |
| |
| ifeq ($(BR2_PACKAGE_LINUX_BACKPORTS_5_10_X),y) |
| LINUX_BACKPORTS_VERSION_MAJOR = 5.10.110 |
| LINUX_BACKPORTS_MINIMAL_KVER_MAJOR = 3 |
| LINUX_BACKPORTS_MINIMAL_KVER_MINOR = 10 |
| else |
| # use default the latest version as default |
| LINUX_BACKPORTS_VERSION_MAJOR = 5.15.58 |
| LINUX_BACKPORTS_MINIMAL_KVER_MAJOR = 4 |
| LINUX_BACKPORTS_MINIMAL_KVER_MINOR = 4 |
| endif |
| |
| LINUX_BACKPORTS_VERSION = $(LINUX_BACKPORTS_VERSION_MAJOR)-1 |
| LINUX_BACKPORTS_SOURCE = backports-$(LINUX_BACKPORTS_VERSION).tar.xz |
| LINUX_BACKPORTS_SITE = $(BR2_KERNEL_MIRROR)/linux/kernel/projects/backports/stable/v$(LINUX_BACKPORTS_VERSION_MAJOR) |
| LINUX_BACKPORTS_LICENSE = GPL-2.0 |
| LINUX_BACKPORTS_LICENSE_FILES = \ |
| COPYING \ |
| LICENSES/exceptions/Linux-syscall-note \ |
| LICENSES/preferred/GPL-2.0 |
| |
| # flex and bison are needed to generate kconfig parser. We use the |
| # same logic as the linux kernel (we add host dependencies only if |
| # host does not have them). See linux/linux.mk and |
| # support/dependencies/check-host-bison-flex.mk. |
| LINUX_BACKPORTS_DEPENDENCIES = \ |
| $(BR2_BISON_HOST_DEPENDENCY) \ |
| $(BR2_FLEX_HOST_DEPENDENCY) |
| |
| ifeq ($(BR2_PACKAGE_LINUX_BACKPORTS_USE_DEFCONFIG),y) |
| LINUX_BACKPORTS_KCONFIG_FILE = $(LINUX_BACKPORTS_DIR)/defconfigs/$(call qstrip,$(BR2_PACKAGE_LINUX_BACKPORTS_DEFCONFIG)) |
| else ifeq ($(BR2_PACKAGE_LINUX_BACKPORTS_USE_CUSTOM_CONFIG),y) |
| LINUX_BACKPORTS_KCONFIG_FILE = $(call qstrip,$(BR2_PACKAGE_LINUX_BACKPORTS_CUSTOM_CONFIG_FILE)) |
| endif |
| |
| LINUX_BACKPORTS_KCONFIG_FRAGMENT_FILES = $(call qstrip,$(BR2_PACKAGE_LINUX_BACKPORTS_CONFIG_FRAGMENT_FILES)) |
| LINUX_BACKPORTS_KCONFIG_OPTS = $(LINUX_BACKPORTS_MAKE_OPTS) |
| |
| # linux-backports' build system expects the config options to be present |
| # in the environment, and it is so when using their custom buildsystem, |
| # because they are set in the main Makefile, which then calls a second |
| # Makefile. |
| # |
| # In our case, we do not use that first Makefile. So, we parse the |
| # .config file, filter-out comment lines and put the rest as command |
| # line variables. |
| # |
| # LINUX_BACKPORTS_MAKE_OPTS is used by the kconfig-package infra, while |
| # LINUX_BACKPORTS_MODULE_MAKE_OPTS is used by the kernel-module infra. |
| # |
| LINUX_BACKPORTS_MAKE_OPTS = \ |
| LEX=flex \ |
| YACC=bison \ |
| BACKPORT_DIR=$(@D) \ |
| KLIB_BUILD=$(LINUX_DIR) \ |
| KLIB=$(TARGET_DIR)/lib/modules/$(LINUX_VERSION_PROBED) \ |
| INSTALL_MOD_DIR=backports \ |
| `sed -r -e '/^\#/d;' $(@D)/.config` |
| |
| LINUX_BACKPORTS_MODULE_MAKE_OPTS = $(LINUX_BACKPORTS_MAKE_OPTS) |
| |
| # This file is not automatically generated by 'oldconfig' that we use in |
| # the kconfig-package infrastructure. In the linux buildsystem, it is |
| # generated by running silentoldconfig, but that's not the case for |
| # linux-backports: it uses a hand-crafted rule to generate that file. |
| define LINUX_BACKPORTS_KCONFIG_FIXUP_CMDS |
| $(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(LINUX_BACKPORTS_MAKE_OPTS) backport-include/backport/autoconf.h |
| endef |
| |
| # Checks to give errors that the user can understand |
| ifeq ($(BR_BUILDING),y) |
| |
| ifeq ($(BR2_PACKAGE_LINUX_BACKPORTS_USE_DEFCONFIG),y) |
| ifeq ($(call qstrip,$(BR2_PACKAGE_LINUX_BACKPORTS_DEFCONFIG)),) |
| $(error No linux-backports defconfig name specified, check your BR2_PACKAGE_LINUX_BACKPORTS_DEFCONFIG setting) |
| endif |
| endif |
| |
| ifeq ($(BR2_PACKAGE_LINUX_BACKPORTS_USE_CUSTOM_CONFIG),y) |
| ifeq ($(call qstrip,$(BR2_PACKAGE_LINUX_BACKPORTS_CUSTOM_CONFIG_FILE)),) |
| $(error No linux-backports configuration file specified, check your BR2_PACKAGE_LINUX_BACKPORTS_CUSTOM_CONFIG_FILE setting) |
| endif |
| endif |
| |
| endif # BR_BUILDING |
| |
| $(eval $(kernel-module)) |
| $(eval $(kconfig-package)) |
| |
| # linux-backports' own .config file needs options from the kernel's own |
| # .config file. The dependencies handling in the infrastructure does not |
| # allow to express this kind of dependencies. Besides, linux.mk might |
| # not have been parsed yet, so the Linux build dir LINUX_DIR is not yet |
| # known. Thus, we use a "secondary expansion" so the rule is re-evaluated |
| # after all Makefiles are parsed, and thus at that time we will have the |
| # LINUX_DIR variable set to the proper value. Moreover, since linux-4.19, |
| # the kernel's build system internally touches its .config file, so we |
| # can't use it as a stamp file. We use the LINUX_KCONFIG_STAMP_DOTCONFIG |
| # instead. |
| # |
| # Furthermore, we want to check the kernel version is compatible with |
| # linux-backports. To avoid overriding linux-backports' |
| # KCONFIG_STAMP_DOTCONFIG rule defined in the kconfig-package infra, we |
| # use an intermediate stamp-file. |
| # |
| # Finally, it must also come after the call to kconfig-package, so we get |
| # LINUX_BACKPORTS_DIR properly defined (because the target part of the |
| # rule is not re-evaluated). |
| # |
| $(LINUX_BACKPORTS_DIR)/$(LINUX_BACKPORTS_KCONFIG_STAMP_DOTCONFIG): $(LINUX_BACKPORTS_DIR)/.stamp_check_kernel_version |
| |
| .SECONDEXPANSION: |
| $(LINUX_BACKPORTS_DIR)/.stamp_check_kernel_version: $$(LINUX_DIR)/$$(LINUX_KCONFIG_STAMP_DOTCONFIG) |
| $(Q)KVER=$(LINUX_VERSION_PROBED); \ |
| MIN_KVER_MAJOR=$(LINUX_BACKPORTS_MINIMAL_KVER_MAJOR); \ |
| MIN_KVER_MINOR=$(LINUX_BACKPORTS_MINIMAL_KVER_MINOR); \ |
| KVER_MAJOR=`echo $${KVER} | sed 's/^\([0-9]*\)\..*/\1/'`; \ |
| KVER_MINOR=`echo $${KVER} | sed 's/^[0-9]*\.\([0-9]*\).*/\1/'`; \ |
| if [ $${KVER_MAJOR} -lt $(LINUX_BACKPORTS_MINIMAL_KVER_MAJOR) \ |
| -o \( $${KVER_MAJOR} -eq $(LINUX_BACKPORTS_MINIMAL_KVER_MAJOR) \ |
| -a $${KVER_MINOR} -lt $(LINUX_BACKPORTS_MINIMAL_KVER_MINOR) \ |
| \) ]; then \ |
| printf "Linux version '%s' is too old for linux-backports (needs %s.%s or later)\n" \ |
| "$${KVER}" \ |
| "$(LINUX_BACKPORTS_MINIMAL_KVER_MAJOR)" \ |
| "$(LINUX_BACKPORTS_MINIMAL_KVER_MINOR)"; \ |
| exit 1; \ |
| fi |
| $(Q)touch $(@) |