All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kent Gibson <warthog618@gmail.com>
To: Viresh Kumar <viresh.kumar@linaro.org>
Cc: "Linus Walleij" <linus.walleij@linaro.org>,
	"Bartosz Golaszewski" <brgl@bgdev.pl>,
	"Vincent Guittot" <vincent.guittot@linaro.org>,
	linux-gpio@vger.kernel.org,
	"Miguel Ojeda" <miguel.ojeda.sandonis@gmail.com>,
	"Wedson Almeida Filho" <wedsonaf@google.com>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	stratos-dev@op-lists.linaro.org,
	"Gerard Ryan" <g.m0n3y.2503@gmail.com>
Subject: Re: [PATCH V4 8/8] libgpiod: Integrate building of rust bindings with make
Date: Wed, 27 Jul 2022 10:59:03 +0800	[thread overview]
Message-ID: <20220727025903.GH88787@sol> (raw)
In-Reply-To: <584910baf342bee3511361c3e486ad4f3e5437f2.1657279685.git.viresh.kumar@linaro.org>

On Fri, Jul 08, 2022 at 05:05:01PM +0530, Viresh Kumar wrote:
> Lets make build rust bindings as well.
> 
> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> ---
>  README                    |  8 +++++---
>  TODO                      |  8 --------
>  bindings/Makefile.am      |  6 ++++++
>  bindings/rust/Makefile.am | 18 ++++++++++++++++++
>  configure.ac              | 16 ++++++++++++++++
>  5 files changed, 45 insertions(+), 11 deletions(-)
>  create mode 100644 bindings/rust/Makefile.am
> 
> diff --git a/README b/README
> index 814a0f161fd2..68b5d69f9b66 100644
> --- a/README
> +++ b/README
> @@ -119,9 +119,9 @@ TOOLS
>  BINDINGS
>  --------
>  
> -High-level, object-oriented bindings for C++ and python3 are provided. They
> -can be enabled by passing --enable-bindings-cxx and --enable-bindings-python
> -arguments respectively to configure.
> +High-level, object-oriented bindings for C++, python3 and Rust are provided.
> +They can be enabled by passing --enable-bindings-cxx, --enable-bindings-python
> +and --enable-bindings-rust arguments respectively to configure.
>  
>  C++ bindings require C++11 support and autoconf-archive collection if building
>  from git.
> @@ -132,6 +132,8 @@ the PYTHON_CPPFLAGS and PYTHON_LIBS variables in order to point the build
>  system to the correct locations. During native builds, the configure script
>  can auto-detect the location of the development files.
>  
> +Rust bindings require cargo support.
> +
>  TESTING
>  -------
>  
> diff --git a/TODO b/TODO
> index 8bb4d8f3ad56..cf4fd7b4a962 100644
> --- a/TODO
> +++ b/TODO
> @@ -28,14 +28,6 @@ and is partially functional.
>  
>  ----------
>  
> -* implement rust bindings
> -
> -With Rust gaining popularity as a low-level system's language and the
> -possibility of it making its way into the linux kernel, it's probably time to
> -provide Rust bindings to libgpiod as part of the project.
> -
> -----------
> -
>  * implement a simple daemon for controlling GPIOs in C together with a client
>    program
>  
> diff --git a/bindings/Makefile.am b/bindings/Makefile.am
> index 8f8c762f254f..004ae23dbc58 100644
> --- a/bindings/Makefile.am
> +++ b/bindings/Makefile.am
> @@ -14,3 +14,9 @@ if WITH_BINDINGS_PYTHON
>  SUBDIRS += python
>  
>  endif
> +
> +if WITH_BINDINGS_RUST
> +
> +SUBDIRS += rust
> +
> +endif
> diff --git a/bindings/rust/Makefile.am b/bindings/rust/Makefile.am
> new file mode 100644
> index 000000000000..79a52bc691ae
> --- /dev/null
> +++ b/bindings/rust/Makefile.am
> @@ -0,0 +1,18 @@
> +# SPDX-License-Identifier: GPL-2.0-or-later
> +# SPDX-FileCopyrightText: 2022 Viresh Kumar <viresh.kumar@linaro.org>
> +
> +command = cargo build --release --lib
> +
> +if WITH_TESTS
> +command += --tests
> +endif
> +
> +if WITH_EXAMPLES
> +command += --examples
> +endif
> +
> +all:
> +	$(command)
> +
> +clean:
> +	cargo clean
> diff --git a/configure.ac b/configure.ac
> index ab03673589e9..8458f734a606 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -211,6 +211,21 @@ then
>  		[AC_SUBST(PYTHON_LIBS, [`$PYTHON-config --libs`])])
>  fi
>  
> +AC_ARG_ENABLE([bindings-rust],
> +	[AS_HELP_STRING([--enable-bindings-rust],[enable rust bindings [default=no]])],
> +	[if test "x$enableval" = xyes; then with_bindings_rust=true; fi],
> +	[with_bindings_rust=false])
> +AM_CONDITIONAL([WITH_BINDINGS_RUST], [test "x$with_bindings_rust" = xtrue])
> +
> +if test "x$with_bindings_rust" = xtrue
> +then
> +	AC_CHECK_PROG([has_cargo], [cargo], [true], [false])
> +	if test "x$has_cargo" = xfalse
> +	then
> +		AC_MSG_ERROR([cargo not found - needed for rust bindings])
> +	fi
> +fi
> +
>  AC_CHECK_PROG([has_doxygen], [doxygen], [true], [false])
>  AM_CONDITIONAL([HAS_DOXYGEN], [test "x$has_doxygen" = xtrue])
>  if test "x$has_doxygen" = xfalse
> @@ -245,6 +260,7 @@ AC_CONFIG_FILES([Makefile
>  		 bindings/python/Makefile
>  		 bindings/python/examples/Makefile
>  		 bindings/python/tests/Makefile
> +		 bindings/rust/Makefile
>  		 man/Makefile])
>  
>  AC_OUTPUT
> -- 
> 2.31.1.272.g89b43f80a514
> 

Wouldn't build for me on a Debian bullseye VM.
Apparently bindgen requires clang to find the system headers [1][2], and
there is no dep check or warning about that.

Also not sure why the build wanted bindgen, as by default it uses the
pre-generated bindings?

Anyway, for reference this was the build error without clang installed:

...
   Compiling thiserror v1.0.31
   Compiling libgpiod-sys v0.1.0 (/home/dev/libgpiod/bindings/rust/libgpiod-sys)
error: failed to run custom build command for `libgpiod-sys v0.1.0 (/home/dev/libgpiod/bindings/rust/libgpiod-sys)`

Caused by:
  process didn't exit successfully: `/home/dev/libgpiod/bindings/rust/target/release/build/libgpiod-sys-0fb8ce8170c88d8f/build-script-build` (exit status: 101)
  --- stdout
  cargo:rerun-if-changed=wrapper.h
  cargo:rerun-if-changed=../../../lib/chip.c
  cargo:rerun-if-changed=../../../lib/chip-info.c
  cargo:rerun-if-changed=../../../lib/edge-event.c
  cargo:rerun-if-changed=../../../lib/info-event.c
  cargo:rerun-if-changed=../../../lib/internal.c
  cargo:rerun-if-changed=../../../lib/line-config.c
  cargo:rerun-if-changed=../../../lib/line-info.c
  cargo:rerun-if-changed=../../../lib/line-request.c
  cargo:rerun-if-changed=../../../lib/misc.c
  cargo:rerun-if-changed=../../../lib/request-config.c
  cargo:rerun-if-changed=../../../tests/gpiosim/gpiosim.c
  cargo:rerun-if-changed=gpiosim_wrapper.h
  cargo:rustc-link-lib=kmod
  cargo:rustc-link-lib=mount

  --- stderr
  /usr/include/string.h:33:10: fatal error: 'stddef.h' file not found
  /usr/include/string.h:33:10: fatal error: 'stddef.h' file not found, err: true
  thread 'main' panicked at 'Unable to generate bindings: ()', libgpiod-sys/build.rs:42:10

Cheers,
Kent.

[1] https://rust-lang.github.io/rust-bindgen/requirements.html
[2] https://github.com/rust-lang/rust-bindgen/issues/242

  reply	other threads:[~2022-07-27  2:59 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-08 11:34 [PATCH V4 0/8] libgpiod: Add Rust bindings Viresh Kumar
2022-07-08 11:34 ` [PATCH V4 1/8] libgpiod: Add libgpiod-sys rust crate Viresh Kumar
2022-07-27  2:57   ` Kent Gibson
2022-07-27  4:51     ` Viresh Kumar
2022-07-27  5:17       ` Kent Gibson
2022-07-27  5:45         ` Viresh Kumar
2022-08-01 12:11         ` Viresh Kumar
2022-08-01 15:56           ` Kent Gibson
2022-08-02  8:50             ` Viresh Kumar
2022-08-02  9:36               ` Kent Gibson
2022-07-08 11:34 ` [PATCH V4 2/8] libgpiod: Add pre generated rust bindings Viresh Kumar
2022-07-27  2:57   ` Kent Gibson
2022-07-27  5:15     ` Viresh Kumar
2022-07-27  5:31       ` Kent Gibson
2022-07-27  6:00         ` Viresh Kumar
2022-07-27  6:06           ` Kent Gibson
2022-07-08 11:34 ` [PATCH V4 3/8] libgpiod-sys: Add support to generate gpiosim bindings Viresh Kumar
2022-07-27  2:57   ` Kent Gibson
2022-07-27  5:30     ` Viresh Kumar
2022-07-08 11:34 ` [PATCH V4 4/8] libgpiod: Add rust wrapper crate Viresh Kumar
2022-07-27  2:57   ` Kent Gibson
2022-07-27  9:07     ` Viresh Kumar
2022-07-27 10:08       ` Kent Gibson
2022-07-27 11:06         ` Miguel Ojeda
2022-07-27 12:40           ` Kent Gibson
2022-07-27 13:02             ` Miguel Ojeda
2022-07-28  3:11               ` Kent Gibson
2022-07-29  4:40                 ` Viresh Kumar
2022-07-28  3:10         ` Kent Gibson
2022-08-01 12:05         ` Viresh Kumar
2022-08-01 13:20           ` Kent Gibson
2022-08-01 13:28             ` Miguel Ojeda
2022-07-28  8:52     ` Viresh Kumar
2022-07-28  9:59       ` Kent Gibson
2022-07-08 11:34 ` [PATCH V4 5/8] libgpiod: Add rust examples Viresh Kumar
2022-07-27  2:58   ` Kent Gibson
2022-07-27  9:23     ` Viresh Kumar
2022-07-27  9:59       ` Kent Gibson
2022-07-27 10:06         ` Viresh Kumar
2022-07-27 10:32           ` Kent Gibson
2022-07-27 10:33             ` Viresh Kumar
2022-07-08 11:34 ` [PATCH V4 6/8] libgpiod: Derive debug traits for few definitions Viresh Kumar
2022-07-27  2:58   ` Kent Gibson
2022-07-27  6:20     ` Viresh Kumar
2022-07-08 11:35 ` [PATCH V4 7/8] libgpiod: Add rust tests Viresh Kumar
2022-07-27  2:58   ` Kent Gibson
2022-07-27  9:59     ` Viresh Kumar
2022-07-27 10:27       ` Kent Gibson
2022-08-01 11:54     ` Viresh Kumar
2022-08-01 12:38       ` Kent Gibson
2022-08-02  5:44         ` Viresh Kumar
2022-08-02  5:47           ` Kent Gibson
2022-07-08 11:35 ` [PATCH V4 8/8] libgpiod: Integrate building of rust bindings with make Viresh Kumar
2022-07-27  2:59   ` Kent Gibson [this message]
2022-07-27  6:18     ` Viresh Kumar
2022-07-27  6:25       ` Kent Gibson
2022-07-27  6:35         ` Viresh Kumar
2022-07-27  6:45           ` Kent Gibson
2022-07-27  6:51             ` Viresh Kumar
2022-07-15 19:07 ` [PATCH V4 0/8] libgpiod: Add Rust bindings Bartosz Golaszewski
2022-07-15 19:17   ` Miguel Ojeda
2022-07-15 19:27     ` Miguel Ojeda
2022-07-16  9:43       ` Miguel Ojeda
2022-07-16 10:43         ` Bartosz Golaszewski
2022-07-16 12:23           ` Kent Gibson
2022-07-16 13:46           ` Miguel Ojeda

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220727025903.GH88787@sol \
    --to=warthog618@gmail.com \
    --cc=alex.bennee@linaro.org \
    --cc=brgl@bgdev.pl \
    --cc=g.m0n3y.2503@gmail.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=miguel.ojeda.sandonis@gmail.com \
    --cc=stratos-dev@op-lists.linaro.org \
    --cc=vincent.guittot@linaro.org \
    --cc=viresh.kumar@linaro.org \
    --cc=wedsonaf@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.