Skip to content

build: add infrastructure for rust #392

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 9 commits into from
Closed

Conversation

dvdhrm
Copy link
Member

@dvdhrm dvdhrm commented Apr 30, 2025

Extend the Meson build system to compile an internal Rust library and link that into libbus.a, our internal utility library that is linked into all dbus-broker binaries.

The individual commits have extensive information on, and background for, the individual changes. To summarize, we now use the builtin Rust support of Meson to compile a static library that uses no external dependencies but standard Rust core and alloc, as well as the runtime-integration of std. This avoids the previous dance via meson-cargo, and it makes the build fully independent of Cargo.

This series merely extends the build system, but adds no meaningful Rust code. This will be added in other PRs.

@dvdhrm dvdhrm force-pushed the wip/rbuild branch 3 times, most recently from 6364d9b to 95dd7e9 Compare May 5, 2025 13:40
dvdhrm added 3 commits May 9, 2025 16:16
Switch the base image again from Fedora to Arch Linux. This requires us
to disable SELINUX in the unit-tests, but those will be run by the
packit integration, so we should be fine.

The advantages are:

 * Image builds take *significantly* less time: 10min for Fedora, 3min
   for Arch Linux (on the same infrastructure).

 * Images are significantly smaller in size: 6GiB for Fedora, 3GiB for
   ArchLinux (with the same packages).

We also get rolling releases, allowing us to control at which point we
can update. We do not expose the CI system to untrusted inputs, anyway
(nor do we pass sensitive data to it).

Signed-off-by: David Rheinsberg <[email protected]>
Extend the build system to compile Rust sources in our tree into an
internal, static library. This is then linked into `libbus.a`, which
itself is our static library that contains everything but the
entrypoints.

This does not add any Rust code, but merely extends the build-system to
support adding Rust code.

Additionally, we add infrastructure to call `rust-bindgen` on our own C
headers, so we get clean access to it from Rust.

Note that this significantly bumps the build-time requirements of the
project:

- Meson 1.7.0 (January 2025): Needed for support of Rust Edition 2024
- Rust 1.85 (February 2025): Needed for support of Rust Edition 2024
- rust-bindgen 0.71 (December 2024): Needed for `--rust-edition` and
  `--rust-target` configuration.

Signed-off-by: David Rheinsberg <[email protected]>
Instead of one static library with all Rust code, split it into two:

1) An rlib Rust library with all Rust code.
2) A staticlib Rust library that links the rlib and provides C stubs.

This split allows us to link the Rust library to other Rust code, like
doctests or unittests. It also keeps the C-API separate from the Rust
code and provides a clean path forward.

Signed-off-by: David Rheinsberg <[email protected]>
dvdhrm added 6 commits May 9, 2025 16:49
Export the generated symbols from our rlib, to ensure the C API can use
them as well. While at it, ensure we suppress common warnings with the C
naming scheme we use.

Signed-off-by: David Rheinsberg <[email protected]>
Ensure that we do not use assignments in the bindgen options. Meson
parses these options to avoid adding duplicates, so lets provide them
cleanly.

Additionally, add `--use-core` now that we have rlib as `no_std`.

Signed-off-by: David Rheinsberg <[email protected]>
Ensure that we generate doctest targets with the new Meson version. This
will test-run all Rust code in the documentation.

Signed-off-by: David Rheinsberg <[email protected]>
With everything settled, we can now reduce the build requirements and
turn some features into optional additions:

- Use Rust-2021 over Rust-2024, since we do not benefit much from the
  new edition.

- Reduce meson requirements to 1.3 and guard `mod_rust` additions by a
  version check.

- Reduce Rust MSV to 1.74.

- Reduce Bindgen MSV to 0.60 to at least get --allowlist-file.

Signed-off-by: David Rheinsberg <[email protected]>
Use plain version numbers in MSVs and require all call-sites to add
comparators, if necessary.

Signed-off-by: David Rheinsberg <[email protected]>
Ensure that we do not run doctests when cross-compiling. This can easily
fail and there is no suitable way for us to check whether `rustdoc` is
available:

    mesonbuild/meson#14583

Signed-off-by: David Rheinsberg <[email protected]>
@dvdhrm
Copy link
Member Author

dvdhrm commented May 9, 2025

(replaced by #399)

@dvdhrm dvdhrm closed this May 9, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant