mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 04:13:53 -06:00

Right now, using cargo with QEMU requires copying by hand the bindings.rs to the source tree. Instead, we can use an include file to escape the cage of cargo's mandated source directory structure. By running cargo within meson's "devenv" and adding a MESON_BUILD_ROOT environment variable, it is easy for build.rs to find the file. However, the file must be symlinked into cargo's output directory for rust-analyzer to find it. Suggested-by: Junjie Mao <junjie.mao@hotmail.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
55 lines
1.5 KiB
Meson
55 lines
1.5 KiB
Meson
_qemu_api_cfg = []
|
|
# _qemu_api_cfg += ['--cfg', 'feature="allocator"']
|
|
if rustc.version().version_compare('>=1.77.0')
|
|
_qemu_api_cfg += ['--cfg', 'has_offset_of']
|
|
endif
|
|
|
|
_qemu_api_rs = static_library(
|
|
'qemu_api',
|
|
structured_sources(
|
|
[
|
|
'src/lib.rs',
|
|
'src/bindings.rs',
|
|
'src/c_str.rs',
|
|
'src/definitions.rs',
|
|
'src/device_class.rs',
|
|
'src/offset_of.rs',
|
|
'src/vmstate.rs',
|
|
'src/zeroable.rs',
|
|
],
|
|
{'.' : bindings_rs},
|
|
),
|
|
override_options: ['rust_std=2021', 'build.rust_std=2021'],
|
|
rust_abi: 'rust',
|
|
rust_args: _qemu_api_cfg,
|
|
)
|
|
|
|
rust.test('rust-qemu-api-tests', _qemu_api_rs,
|
|
suite: ['unit', 'rust'])
|
|
|
|
qemu_api = declare_dependency(
|
|
link_with: _qemu_api_rs,
|
|
dependencies: qemu_api_macros,
|
|
)
|
|
|
|
# Rust executables do not support objects, so add an intermediate step.
|
|
rust_qemu_api_objs = static_library(
|
|
'rust_qemu_api_objs',
|
|
objects: [libqom.extract_all_objects(recursive: false),
|
|
libhwcore.extract_all_objects(recursive: false)])
|
|
|
|
test('rust-qemu-api-integration',
|
|
executable(
|
|
'rust-qemu-api-integration',
|
|
'tests/tests.rs',
|
|
override_options: ['rust_std=2021', 'build.rust_std=2021'],
|
|
rust_args: ['--test'],
|
|
install: false,
|
|
dependencies: [qemu_api, qemu_api_macros],
|
|
link_whole: [rust_qemu_api_objs, libqemuutil]),
|
|
args: [
|
|
'--test',
|
|
'--format', 'pretty',
|
|
],
|
|
protocol: 'rust',
|
|
suite: ['unit', 'rust'])
|