From: Bruce Richardson <bruce.richardson@intel.com>
To: Gregory Etelson <getelson@nvidia.com>
Cc: <dev@dpdk.org>, <dsosnowski@nvidia.com>,
<harry.van.haaren@intel.com>, <igootorov@gmail.com>,
<mkashani@nvidia.com>, <stephen@networkplumber.org>,
<thomas@monjalon.net>
Subject: Re: [PATCH v4] rust: support raw DPDK API
Date: Thu, 27 Mar 2025 16:22:42 +0000 [thread overview]
Message-ID: <Z-V7UmCfYEbkWOeY@bricha3-mobl1.ger.corp.intel.com> (raw)
In-Reply-To: <20250322105911.12378-1-getelson@nvidia.com>
On Sat, Mar 22, 2025 at 12:59:11PM +0200, Gregory Etelson wrote:
> The patch converts include files with DPDK API to RUST and binds new
> RUST API files into raw module under dpdk crate.
>
> The RUST files and DPDK libraries build from C sources
> allow creation of DPDK application in RUST.
>
> RUST DPDK application must specify the `dpdk` crate as
> dependency in Cargo.toml file.
>
> RUST `dpdk` crate is installed into
> $MESON_INSTALL_DESTDIR_PREFIX/$libdir/rust directory.
>
> Software requirements:
> - clang
> - RUST installation
> - bindgen-cli crate
>
> RUST dpdk installation instructions:
> 1. Configure DPDK with `-Deanble_rust=true`
> 2. Build and install DPDK. The installation procedure will create
> $MESON_INSTALL_DESTDIR_PREFIX/$libdir/rust crate.
> 3. Update PKG_CONFIG_PATH to point to DPDK installation.
>
> Signed-off-by: Gregory Etelson <getelson@nvidia.com>
Hi Gregory,
some additional thoughts and comments inline below.
/Bruce
> ---
> v2:
> Change rust crate name from dpdklib to dpdk.
> Add raw module for to link with C API.
> Add "cargo:rerun-if-changed=build.rs".
> v3:
> Move init_port_config() to Port.
> Move start_port() to Port.
> Remove Cargo.lock from git repository
> Reformat code.
> v4:
> Blocked bindgen to convert stdlib functions with u128 type.
> Allow compilation of C style symbols.
When using bindgen, are we better to take the approach (as in this patch)
of running it on everything in the headers and just excluding some things,
or taking the opposite conservative approach of just listing the functions
and defines we actually do want exposed (with wildcarding as necessary)?
When playing with rust apps on top of DPDK myself, I've tended toward the
latter scheme, but maybe for this effort we may want the former.
> ---
> buildtools/meson.build | 4 +
> buildtools/rust-env.sh | 96 ++++++++++++
> examples/rust/helloworld/Cargo.toml | 7 +
> examples/rust/helloworld/build.rs | 24 +++
> examples/rust/helloworld/src/main.rs | 219 +++++++++++++++++++++++++++
> meson_options.txt | 2 +
> 6 files changed, 352 insertions(+)
> create mode 100755 buildtools/rust-env.sh
> create mode 100644 examples/rust/helloworld/Cargo.toml
> create mode 100644 examples/rust/helloworld/build.rs
> create mode 100644 examples/rust/helloworld/src/main.rs
>
> diff --git a/buildtools/meson.build b/buildtools/meson.build
> index 4e2c1217a2..b9d0092f07 100644
> --- a/buildtools/meson.build
> +++ b/buildtools/meson.build
> @@ -50,3 +50,7 @@ else
> pmdinfo += 'ar'
> pmdinfogen += 'elf'
> endif
> +
> +if get_option('enable_rust')
> + meson.add_install_script(['rust-env.sh', get_option('libdir')])
> +endif
I'm not convinced by having this done as a post-install script. Instead I'd
tend towards having a rust crate hosted somewhere that does the bindgen as
part of the rust build.
> diff --git a/buildtools/rust-env.sh b/buildtools/rust-env.sh
> new file mode 100755
> index 0000000000..a239432a28
> --- /dev/null
> +++ b/buildtools/rust-env.sh
> @@ -0,0 +1,96 @@
> +#! /bin/sh
> +
> +# Convert DPDK API files into RUST.
> +# DPDK files selection is on demand.
> +#
<snip>
> diff --git a/examples/rust/helloworld/build.rs b/examples/rust/helloworld/build.rs
> new file mode 100644
> index 0000000000..bd5737d209
> --- /dev/null
> +++ b/examples/rust/helloworld/build.rs
> @@ -0,0 +1,24 @@
> +use std::process::Command;
> +
> +pub fn main() {
> + let mut pkgconfig = Command::new("pkg-config");
> +
> + match pkgconfig.args(["--libs", "libdpdk"]).output() {
This work of using pkgconfig should not be necessary in the application
build.rs file. If we switch to actually producing a proper crate, the
pkgconfig handling and linking should be covered there (I would hope,
anyway).
> + Ok(output) => {
> + let stdout = String::from_utf8_lossy(&output.stdout)
> + .trim_end()
> + .to_string();
> + for token in stdout.split_ascii_whitespace().filter(|s| !s.is_empty()) {
> + if token.starts_with("-L") {
> + println!("cargo::rustc-link-search=native={}", &token[2..]);
> + } else if token.starts_with("-l") {
> + println!("cargo::rustc-link-lib={}", &token[2..]);
> + }
> + }
> + println!("cargo:rerun-if-changed=build.rs");
> + }
> + Err(error) => {
> + panic!("failed to read libdpdk package: {:?}", error);
> + }
> + }
> +}
<snip>
next prev parent reply other threads:[~2025-03-27 16:22 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-06 13:37 [PATCH] rust: support " Gregory Etelson
2025-03-06 19:26 ` Van Haaren, Harry
2025-03-07 16:56 ` Etelson, Gregory
2025-03-07 15:54 ` Van Haaren, Harry
2025-03-07 16:20 ` Bruce Richardson
2025-03-07 18:15 ` Etelson, Gregory
2025-03-07 18:00 ` Etelson, Gregory
2025-03-08 14:28 ` Igor Gutorov
2025-03-08 19:14 ` Etelson, Gregory
2025-03-10 15:31 ` Stephen Hemminger
2025-03-12 5:21 ` Etelson, Gregory
2025-03-08 18:50 ` [PATCH v2] rust: support raw " Gregory Etelson
2025-03-10 16:13 ` Van Haaren, Harry
2025-03-10 16:25 ` Bruce Richardson
2025-03-12 17:19 ` Thomas Monjalon
2025-03-14 19:12 ` Etelson, Gregory
2025-03-10 15:00 ` [PATCH] rust: support " Stephen Hemminger
2025-03-12 5:12 ` Etelson, Gregory
2025-03-10 16:18 ` Stephen Hemminger
2025-03-10 16:30 ` Bruce Richardson
2025-03-12 14:30 ` Etelson, Gregory
2025-03-13 7:56 ` Igor Gutorov
2025-03-12 15:29 ` Igor Gutorov
2025-03-12 17:24 ` Thomas Monjalon
2025-03-14 18:38 ` [PATCH v3] rust: support raw " Gregory Etelson
2025-03-18 8:51 ` Dariusz Sosnowski
2025-03-18 9:12 ` Dariusz Sosnowski
2025-03-22 10:59 ` [PATCH v4] " Gregory Etelson
2025-03-22 17:39 ` Bruce Richardson
2025-03-27 5:51 ` Etelson, Gregory
2025-03-27 16:22 ` Bruce Richardson [this message]
2025-03-28 18:30 ` Etelson, Gregory
2025-03-27 8:23 ` DPDK for rust Morten Brørup
2025-03-27 9:00 ` Etelson, Gregory
2025-03-27 16:17 ` Bruce Richardson
2025-03-28 18:09 ` Etelson, Gregory
2025-03-28 19:25 ` Stephen Hemminger
2025-03-31 9:11 ` Bruce Richardson
2025-03-31 10:26 ` Luca Boccassi
2025-04-01 13:08 ` Etelson, Gregory
2025-03-31 9:03 ` Thomas Monjalon
2025-03-31 9:10 ` Bruce Richardson
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=Z-V7UmCfYEbkWOeY@bricha3-mobl1.ger.corp.intel.com \
--to=bruce.richardson@intel.com \
--cc=dev@dpdk.org \
--cc=dsosnowski@nvidia.com \
--cc=getelson@nvidia.com \
--cc=harry.van.haaren@intel.com \
--cc=igootorov@gmail.com \
--cc=mkashani@nvidia.com \
--cc=stephen@networkplumber.org \
--cc=thomas@monjalon.net \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).