This is used to hide/show some packages that have strict
requirements on the version of kernel headers.
+ If your kernel headers are more recent than the latest version
+ in the choice, then select the latest version.
+
config BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_4
- bool "5.4.x"
+ bool "5.4.x or later"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_4
config BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_3
endef
ifeq ($(BR2_KERNEL_HEADERS_VERSION)$(BR2_KERNEL_HEADERS_AS_KERNEL)$(BR2_KERNEL_HEADERS_CUSTOM_TARBALL)$(BR2_KERNEL_HEADERS_CUSTOM_GIT),y)
+# In this case, we must always do a 'loose' test, because they are all
+# custom versions which may be later than what we know right now.
define LINUX_HEADERS_CHECK_VERSION
$(call check_kernel_headers_version,\
$(BUILD_DIR),\
$(STAGING_DIR),\
- $(call qstrip,$(BR2_TOOLCHAIN_HEADERS_AT_LEAST)))
+ $(call qstrip,$(BR2_TOOLCHAIN_HEADERS_AT_LEAST)),\
+ loose)
endef
LINUX_HEADERS_POST_INSTALL_STAGING_HOOKS += LINUX_HEADERS_CHECK_VERSION
endif
#!/bin/sh
+# This script (and the embedded C code) will check that the actual
+# headers version match the user told us they were:
+#
+# - if both versions are the same, all is well.
+#
+# - if the actual headers are older than the user told us, this is
+# an error.
+#
+# - if the actual headers are more recent than the user told us, and
+# we are doing a strict check, then this is an error.
+#
+# - if the actual headers are more recent than the user told us, and
+# we are doing a loose check, then a warning is printed, but this is
+# not an error.
+
BUILDDIR="${1}"
SYSROOT="${2}"
# Make sure we have enough version components
HDR_VER="${3}.0.0"
+CHECK="${4}" # 'strict' or 'loose'
HDR_M="${HDR_VER%%.*}"
HDR_V="${HDR_VER#*.}"
-x c -o "${EXEC}" - <<_EOF_
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
int main(int argc __attribute__((unused)),
char** argv __attribute__((unused)))
{
- if((LINUX_VERSION_CODE & ~0xFF)
- != KERNEL_VERSION(${HDR_M},${HDR_m},0))
+ int ret = 0;
+ int l = LINUX_VERSION_CODE & ~0xFF;
+ int h = KERNEL_VERSION(${HDR_M},${HDR_m},0);
+
+ if(l != h)
{
printf("Incorrect selection of kernel headers: ");
printf("expected %d.%d.x, got %d.%d.x\n", ${HDR_M}, ${HDR_m},
((LINUX_VERSION_CODE>>16) & 0xFF),
((LINUX_VERSION_CODE>>8) & 0xFF));
- return 1;
+ ret = ((l >= h) && !strcmp("${CHECK}", "loose")) ? 0 : 1;
}
- return 0;
+ return ret;
}
_EOF_
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_4
bool
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_3
+ select BR2_TOOLCHAIN_HEADERS_LATEST
+
+# This should be selected by the latest version, above, to indicate that
+# Buildroot does not know of more recent headers than the ones selected.
+# This allows using toolchains with headers more recent than Buildroot
+# knows about, while still enforcing strict check for older headers.
+config BR2_TOOLCHAIN_HEADERS_LATEST
+ bool
# This order guarantees that the highest version is set, as kconfig
# stops affecting a value on the first matching default.
# $1: build directory
# $2: sysroot directory
# $3: kernel version string, in the form: X.Y
+# $4: test to do for the latest kernel version, 'strict' or 'loose'
+# always 'strict' if this is not the latest version.
#
check_kernel_headers_version = \
- if ! support/scripts/check-kernel-headers.sh $(1) $(2) $(3); then \
+ if ! support/scripts/check-kernel-headers.sh $(1) $(2) $(3) \
+ $(if $(BR2_TOOLCHAIN_HEADERS_LATEST),$(4),strict); \
+ then \
exit 1; \
fi
$$(call check_kernel_headers_version,\
$$(BUILD_DIR)\
$$(call toolchain_find_sysroot,$$(TOOLCHAIN_EXTERNAL_CC)),\
- $$(call qstrip,$$(BR2_TOOLCHAIN_HEADERS_AT_LEAST))); \
+ $$(call qstrip,$$(BR2_TOOLCHAIN_HEADERS_AT_LEAST)),\
+ $$(if $$(BR2_TOOLCHAIN_EXTERNAL_CUSTOM),loose,strict)); \
$$(call check_gcc_version,$$(TOOLCHAIN_EXTERNAL_CC),\
$$(call qstrip,$$(BR2_TOOLCHAIN_GCC_AT_LEAST))); \
if test "$$(BR2_arm)" = "y" ; then \
m = ( LINUX_VERSION_CODE >> 8 ) & 0xFF
p = ( LINUX_VERSION_CODE >> 0 ) & 0xFF
+ If your toolchain uses headers newer than the latest version
+ in the choice, then select the latest version.
+
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_4
- bool "5.4.x"
+ bool "5.4.x or later"
select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_4
config BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_3