rust: repurpose qemu_api -> tests
The crate purpose is only to provide integration tests at this point, that can't easily be moved to a specific crate. It's also often a good practice to have a single integration test crate (see for ex https://github.com/rust-lang/cargo/issues/4867) Drop README.md, use docs/devel/rust.rst instead. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Link: https://lore.kernel.org/r/20250827104147.717203-20-marcandre.lureau@redhat.com Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
966b1c302e
commit
d58fcd05ff
15 changed files with 35 additions and 230 deletions
30
rust/Cargo.lock
generated
30
rust/Cargo.lock
generated
|
|
@ -187,21 +187,6 @@ dependencies = [
|
|||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "qemu_api"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"bql",
|
||||
"chardev",
|
||||
"common",
|
||||
"hwcore",
|
||||
"migration",
|
||||
"qemu_macros",
|
||||
"qom",
|
||||
"system",
|
||||
"util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "qemu_macros"
|
||||
version = "0.1.0"
|
||||
|
|
@ -252,6 +237,21 @@ dependencies = [
|
|||
"util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tests"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"bql",
|
||||
"chardev",
|
||||
"common",
|
||||
"hwcore",
|
||||
"migration",
|
||||
"qemu_macros",
|
||||
"qom",
|
||||
"system",
|
||||
"util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.12"
|
||||
|
|
|
|||
|
|
@ -6,13 +6,13 @@ members = [
|
|||
"common",
|
||||
"migration",
|
||||
"qemu-macros",
|
||||
"qemu-api",
|
||||
"qom",
|
||||
"system",
|
||||
"hw/core",
|
||||
"hw/char/pl011",
|
||||
"hw/timer/hpet",
|
||||
"util",
|
||||
"tests",
|
||||
]
|
||||
|
||||
[workspace.package]
|
||||
|
|
|
|||
|
|
@ -18,8 +18,6 @@ quote_rs_native = dependency('quote-1-rs', native: true)
|
|||
syn_rs_native = dependency('syn-2-rs', native: true)
|
||||
proc_macro2_rs_native = dependency('proc-macro2-1-rs', native: true)
|
||||
|
||||
qemuutil_rs = qemuutil.partial_dependency(link_args: true, links: true)
|
||||
|
||||
genrs = []
|
||||
|
||||
subdir('common')
|
||||
|
|
@ -32,7 +30,7 @@ subdir('qom')
|
|||
subdir('system')
|
||||
subdir('chardev')
|
||||
subdir('hw/core')
|
||||
subdir('qemu-api')
|
||||
subdir('tests')
|
||||
|
||||
subdir('hw')
|
||||
|
||||
|
|
|
|||
2
rust/qemu-api/.gitignore
vendored
2
rust/qemu-api/.gitignore
vendored
|
|
@ -1,2 +0,0 @@
|
|||
# Ignore generated bindings file overrides.
|
||||
/src/bindings.inc.rs
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
# QEMU bindings and API wrappers
|
||||
|
||||
This library exports helper Rust types, Rust macros and C FFI bindings for internal QEMU APIs.
|
||||
|
||||
The C bindings can be generated with `bindgen`, using this build target:
|
||||
|
||||
```console
|
||||
$ make bindings.inc.rs
|
||||
```
|
||||
|
||||
## Generate Rust documentation
|
||||
|
||||
Common Cargo tasks can be performed from the QEMU build directory
|
||||
|
||||
```console
|
||||
$ make clippy
|
||||
$ make rustfmt
|
||||
$ make rustdoc
|
||||
```
|
||||
|
|
@ -1 +0,0 @@
|
|||
../util/build.rs
|
||||
|
|
@ -1,75 +0,0 @@
|
|||
_qemu_api_cfg = run_command(rustc_args,
|
||||
'--config-headers', config_host_h, '--features', files('Cargo.toml'),
|
||||
capture: true, check: true).stdout().strip().splitlines()
|
||||
|
||||
c_enums = [
|
||||
'MemoryDeviceInfoKind',
|
||||
]
|
||||
_qemu_api_bindgen_args = []
|
||||
foreach enum : c_enums
|
||||
_qemu_api_bindgen_args += ['--rustified-enum', enum]
|
||||
endforeach
|
||||
|
||||
blocked_type = [
|
||||
'Chardev',
|
||||
'Error',
|
||||
'MemTxAttrs',
|
||||
'MemoryRegion',
|
||||
'ObjectClass',
|
||||
'VMStateDescription',
|
||||
'device_endian',
|
||||
]
|
||||
foreach type: blocked_type
|
||||
_qemu_api_bindgen_args += ['--blocklist-type', type]
|
||||
endforeach
|
||||
|
||||
# TODO: Remove this comment when the clang/libclang mismatch issue is solved.
|
||||
#
|
||||
# Rust bindings generation with `bindgen` might fail in some cases where the
|
||||
# detected `libclang` does not match the expected `clang` version/target. In
|
||||
# this case you must pass the path to `clang` and `libclang` to your build
|
||||
# command invocation using the environment variables CLANG_PATH and
|
||||
# LIBCLANG_PATH
|
||||
_qemu_api_bindings_inc_rs = rust.bindgen(
|
||||
input: 'wrapper.h',
|
||||
dependencies: common_ss.all_dependencies(),
|
||||
output: 'bindings.inc.rs',
|
||||
include_directories: bindings_incdir,
|
||||
bindgen_version: ['>=0.60.0'],
|
||||
args: bindgen_args_common + _qemu_api_bindgen_args,
|
||||
)
|
||||
|
||||
_qemu_api_rs = static_library(
|
||||
'qemu_api',
|
||||
structured_sources(
|
||||
[
|
||||
'src/lib.rs',
|
||||
'src/bindings.rs',
|
||||
'src/prelude.rs',
|
||||
],
|
||||
{'.' : _qemu_api_bindings_inc_rs},
|
||||
),
|
||||
override_options: ['rust_std=2021', 'build.rust_std=2021'],
|
||||
rust_abi: 'rust',
|
||||
rust_args: _qemu_api_cfg,
|
||||
dependencies: [anyhow_rs, bql_rs, chardev_rs, common_rs, foreign_rs, hwcore_rs, libc_rs, migration_rs, qemu_macros,
|
||||
qom_rs, system_rs, util_rs, hwcore],
|
||||
)
|
||||
|
||||
qemu_api_rs = declare_dependency(link_with: [_qemu_api_rs],
|
||||
dependencies: [qemu_macros, qom, hwcore, chardev, migration])
|
||||
|
||||
test('rust-qemu-api-integration',
|
||||
executable(
|
||||
'rust-qemu-api-integration',
|
||||
files('tests/vmstate_tests.rs'),
|
||||
override_options: ['rust_std=2021', 'build.rust_std=2021'],
|
||||
rust_args: ['--test'],
|
||||
install: false,
|
||||
dependencies: [bql_rs, common_rs, util_rs, migration_rs, qom_rs, qemu_api_rs]),
|
||||
args: [
|
||||
'--test', '--test-threads', '1',
|
||||
'--format', 'pretty',
|
||||
],
|
||||
protocol: 'rust',
|
||||
suite: ['unit', 'rust'])
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
#![allow(
|
||||
dead_code,
|
||||
improper_ctypes_definitions,
|
||||
improper_ctypes,
|
||||
non_camel_case_types,
|
||||
non_snake_case,
|
||||
non_upper_case_globals,
|
||||
unnecessary_transmutes,
|
||||
unsafe_op_in_unsafe_fn,
|
||||
clippy::pedantic,
|
||||
clippy::restriction,
|
||||
clippy::style,
|
||||
clippy::missing_const_for_fn,
|
||||
clippy::ptr_offset_with_cast,
|
||||
clippy::useless_transmute,
|
||||
clippy::missing_safety_doc,
|
||||
clippy::too_many_arguments
|
||||
)]
|
||||
|
||||
//! `bindgen`-generated declarations.
|
||||
|
||||
use chardev::bindings::Chardev;
|
||||
use migration::bindings::VMStateDescription;
|
||||
use qom::bindings::ObjectClass;
|
||||
use system::bindings::{device_endian, MemTxAttrs, MemoryRegion};
|
||||
use util::bindings::Error;
|
||||
|
||||
#[cfg(MESON)]
|
||||
include!("bindings.inc.rs");
|
||||
|
||||
#[cfg(not(MESON))]
|
||||
include!(concat!(env!("OUT_DIR"), "/bindings.inc.rs"));
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
// Copyright 2024, Linaro Limited
|
||||
// Author(s): Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#![cfg_attr(not(MESON), doc = include_str!("../README.md"))]
|
||||
#![deny(clippy::missing_const_for_fn)]
|
||||
|
||||
#[rustfmt::skip]
|
||||
pub mod bindings;
|
||||
|
||||
// preserve one-item-per-"use" syntax, it is clearer
|
||||
// for prelude-like modules
|
||||
#[rustfmt::skip]
|
||||
pub mod prelude;
|
||||
|
||||
// Allow proc-macros to refer to `::qemu_api` inside the `qemu_api` crate (this
|
||||
// crate).
|
||||
extern crate self as qemu_api;
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
// Copyright 2024 Red Hat, Inc.
|
||||
// Author(s): Paolo Bonzini <pbonzini@redhat.com>
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
//! Commonly used traits and types for QEMU.
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
/*
|
||||
* QEMU System Emulator
|
||||
*
|
||||
* Copyright (c) 2024 Linaro Ltd.
|
||||
*
|
||||
* Authors: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* This header file is meant to be used as input to the `bindgen` application
|
||||
* in order to generate C FFI compatible Rust bindings.
|
||||
*/
|
||||
|
||||
#ifndef __CLANG_STDATOMIC_H
|
||||
#define __CLANG_STDATOMIC_H
|
||||
/*
|
||||
* Fix potential missing stdatomic.h error in case bindgen does not insert the
|
||||
* correct libclang header paths on its own. We do not use stdatomic.h symbols
|
||||
* in QEMU code, so it's fine to declare dummy types instead.
|
||||
*/
|
||||
typedef enum memory_order {
|
||||
memory_order_relaxed,
|
||||
memory_order_consume,
|
||||
memory_order_acquire,
|
||||
memory_order_release,
|
||||
memory_order_acq_rel,
|
||||
memory_order_seq_cst,
|
||||
} memory_order;
|
||||
#endif /* __CLANG_STDATOMIC_H */
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu-io.h"
|
||||
#include "exec/memattrs.h"
|
||||
#include "hw/char/pl011.h"
|
||||
|
|
@ -1,12 +1,11 @@
|
|||
[package]
|
||||
name = "qemu_api"
|
||||
name = "tests"
|
||||
version = "0.1.0"
|
||||
authors = ["Manos Pitsidianakis <manos.pitsidianakis@linaro.org>"]
|
||||
description = "Rust bindings for QEMU"
|
||||
readme = "README.md"
|
||||
description = "Rust integration tests for QEMU"
|
||||
resolver = "2"
|
||||
publish = false
|
||||
|
||||
authors.workspace = true
|
||||
edition.workspace = true
|
||||
homepage.workspace = true
|
||||
license.workspace = true
|
||||
14
rust/tests/meson.build
Normal file
14
rust/tests/meson.build
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
test('rust-integration',
|
||||
executable(
|
||||
'rust-integration',
|
||||
files('tests/vmstate_tests.rs'),
|
||||
override_options: ['rust_std=2021', 'build.rust_std=2021'],
|
||||
rust_args: ['--test'],
|
||||
install: false,
|
||||
dependencies: [bql_rs, common_rs, util_rs, migration_rs, qom_rs]),
|
||||
args: [
|
||||
'--test', '--test-threads', '1',
|
||||
'--format', 'pretty',
|
||||
],
|
||||
protocol: 'rust',
|
||||
suite: ['unit', 'rust'])
|
||||
Loading…
Add table
Add a link
Reference in a new issue