diff mbox series

[libgpiod,v2] build: allow building with pre-v5.5 kernel headers

Message ID 20201121144420.13806-1-brgl@bgdev.pl
State Superseded
Headers show
Series [libgpiod,v2] build: allow building with pre-v5.5 kernel headers | expand

Commit Message

Bartosz Golaszewski Nov. 21, 2020, 2:44 p.m. UTC
From: Bartosz Golaszewski <bgolaszewski@baylibre.com>

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.8 and on, let's check the
presence of the new symbols and redefine them if needed.

Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
---
v1 -> v2:
- the minimum kernel version should be v4.8 not v4.6

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(-)

Comments

Bartosz Golaszewski Nov. 30, 2020, 8:29 p.m. UTC | #1
On Sat, Nov 21, 2020 at 3:44 PM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
>

> From: Bartosz Golaszewski <bgolaszewski@baylibre.com>

>

> 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.8 and on, let's check the

> presence of the new symbols and redefine them if needed.

>

> Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>

> ---


I applied this and made a new release: v1.6.2. I sent out a patch to
update the yocto recipe. Feel free to update the buildroot package
now.

Bartosz
diff mbox series

Patch

diff --git a/configure.ac b/configure.ac
index cd337ff..9823359 100644
--- a/configure.ac
+++ b/configure.ac
@@ -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, 8, 0)
+#error
+#endif
+)],
+[], [AC_MSG_ERROR(["libgpiod needs linux headers version >= v4.8.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],
diff --git a/lib/core.c b/lib/core.c
index b964272..f49743b 100644
--- a/lib/core.c
+++ b/lib/core.c
@@ -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,