|
|
|
---
|
|
|
|
title: Rust
|
|
|
|
short-description: Working with Rust in Meson
|
|
|
|
...
|
|
|
|
|
|
|
|
# Using Rust with Meson
|
|
|
|
|
|
|
|
## Mixing Rust and non-Rust sources
|
|
|
|
|
|
|
|
Meson currently does not support creating a single target with Rust and non Rust
|
|
|
|
sources mixed together, therefore one must compile multiple libraries and link
|
|
|
|
them.
|
|
|
|
|
|
|
|
```meson
|
|
|
|
rust_lib = static_library(
|
|
|
|
'rust_lib',
|
|
|
|
sources : 'lib.rs',
|
|
|
|
...
|
|
|
|
)
|
|
|
|
|
|
|
|
c_lib = static_library(
|
|
|
|
'c_lib',
|
|
|
|
sources : 'lib.c',
|
|
|
|
link_with : rust_lib,
|
|
|
|
)
|
|
|
|
```
|
|
|
|
This is an implementation detail of Meson, and is subject to change in the future.
|
|
|
|
|
|
|
|
## Mixing Generated and Static sources
|
|
|
|
|
|
|
|
*Note* This feature was added in 0.62
|
|
|
|
|
|
|
|
You can use a [[@structured_src]] for this. Structured sources are a dictionary
|
|
|
|
mapping a string of the directory, to a source or list of sources.
|
|
|
|
When using a structured source all inputs *must* be listed, as Meson may copy
|
|
|
|
the sources from the source tree to the build tree.
|
|
|
|
|
|
|
|
Structured inputs are generally not needed when not using generated sources.
|
|
|
|
|
|
|
|
As an implementation detail, Meson will attempt to determine if it needs to copy
|
|
|
|
files at configure time and will skip copying if it can. Copying is done at
|
|
|
|
build time (when necessary), to avoid reconfiguring when sources change.
|
|
|
|
|
|
|
|
```meson
|
|
|
|
executable(
|
|
|
|
'rust_exe',
|
|
|
|
[[#structured_sources]](
|
|
|
|
'main.rs',
|
|
|
|
{
|
|
|
|
'foo' : ['bar.rs', 'foo/lib.rs', generated_rs],
|
|
|
|
'foo/bar' : [...],
|
|
|
|
'other' : [...],
|
|
|
|
}
|
|
|
|
)
|
|
|
|
)
|
|
|
|
```
|
|
|
|
|
|
|
|
## Use with rust-analyzer
|
|
|
|
|
|
|
|
*Since 0.64.0.*
|
|
|
|
|
|
|
|
Meson will generate a `rust-project.json` file in the root of the build
|
|
|
|
directory if there are any rust targets in the project. Most IDEs will need to
|
|
|
|
be configured to use the file as it's not in the source root (Meson does not
|
|
|
|
write files into the source directory). [See the upstream
|
|
|
|
docs](https://rust-analyzer.github.io/manual.html#non-cargo-based-projects) for
|
|
|
|
more information on how to configure that.
|