build: allow building with pre-v5.5 kernel headers
Subsystems (2)
PATCH 1/1 build: allow building with pre-v5.5 kernel headers
From: Bartosz Golaszewski <[email protected]>
libgpiod v1.6 requires at least v5.5 linux kernel headers to build. This is because several new symbols have been defined in linux v5.5. In order to allow building with kernel headers v4.6 and on, let's check the presence of the new symbols and redefine them if needed.
The new features won't work on kernels pre v5.5 but the build won't fail anymore.
---
Downstream complains a lot about libgpiod v1.6 not building with kernel headers pre-v5.5. We've had a discussion on that over at buildroot[1].
For libgpiod v2.0 we need to figure out a better way of dealing with new kernel features added after the release of v2.0 but for v1.6 let's just redefine the symbols if needed.
[1] http://lists.busybox.net/pipermail/buildroot/2020-October/295314.html
configure.ac | 10 +++++++++- lib/core.c | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-)
configure.ac +9 -1
@@ -95,13 +95,21 @@ AC_CHECK_HEADERS([sys/sysmacros.h], [], [HEADER_NOT_FOUND_LIB([sys/sysmacros.h]) AC_CHECK_HEADERS([linux/gpio.h], [], [HEADER_NOT_FOUND_LIB([linux/gpio.h])]) AC_CHECK_HEADERS([linux/version.h], [], [HEADER_NOT_FOUND_LIB([linux/version.h])]) +AC_COMPILE_IFELSE([AC_LANG_SOURCE( +#include <linux/version.h> +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0) +#error +#endif +)], +[], [AC_MSG_ERROR(["libgpiod needs linux headers version >= v4.6.0"])]) + AC_COMPILE_IFELSE([AC_LANG_SOURCE( #include <linux/version.h> #if LINUX_VERSION_CODE < KERNEL_VERSION(5, 5, 0) #error #endif )], -[], [AC_MSG_ERROR(["libgpiod needs linux headers version >= v5.5.0"])]) +[], [AC_DEFINE([KERNEL_PRE_5_5], [], [We need to define symbols added in linux v5.5])]) AC_ARG_ENABLE([tools], [AC_HELP_STRING([--enable-tools],
lib/core.c +18 -0
@@ -22,6 +22,24 @@#include <sys/types.h> #include <unistd.h> +#ifdef KERNEL_PRE_5_5 +#define GPIOLINE_FLAG_BIAS_PULL_UP (1UL << 5) +#define GPIOLINE_FLAG_BIAS_PULL_DOWN (1UL << 6) +#define GPIOLINE_FLAG_BIAS_DISABLE (1UL << 7) + +#define GPIOHANDLE_REQUEST_BIAS_PULL_UP (1UL << 5) +#define GPIOHANDLE_REQUEST_BIAS_PULL_DOWN (1UL << 6) +#define GPIOHANDLE_REQUEST_BIAS_DISABLE (1UL << 7) + +struct gpiohandle_config { +__u32 flags; +__u8 default_values[GPIOHANDLES_MAX ]; +__u32 padding[4 ];/* padding for future use */ +}; + +#define GPIOHANDLE_SET_CONFIG_IOCTL _IOWR(0xB4, 0x0a, struct gpiohandle_config) +#endif /* KERNEL_PRE_5_5 */ +enum {LINE_FREE =0 ,LINE_REQUESTED_VALUES ,
Signature · 1 line
2.29.1
Hi Bartosz,
Quoted 7 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
libgpiod v1.6 requires at least v5.5 linux kernel headers to build. This is because several new symbols have been defined in linux v5.5. In order to allow building with kernel headers v4.6 and on, let's check the presence of the new symbols and redefine them if needed.
In the Buildroot Package (for 1.4.x) you set the dependency for headers to be at least 4.8. [1] Could this then be lowered or is there a mixup?
Regards,
Michael
[1] https://git.busybox.net/buildroot/tree/package/libgpiod/Config.in
Quoted 13 lines · Michael Nosthoff
Hi Bartosz,
Quoted 7 lines · Bartosz Golaszewski
From: Bartosz Golaszewski <[email protected]>
libgpiod v1.6 requires at least v5.5 linux kernel headers to build. This is because several new symbols have been defined in linux v5.5. In order to allow building with kernel headers v4.6 and on, let's check the presence of the new symbols and redefine them if needed.
Quoted 8 lines
In the Buildroot Package (for 1.4.x) you set the dependency for headers to be at least 4.8. [1] Could this then be lowered or is there a mixup?
Regards,
Michael[1] https://git.busybox.net/buildroot/tree/package/libgpiod/Config.in
No, it's my mistake - it should say v4.8 in the patch, not v4.6.
Bartosz