From: Marc-André Lureau <marcandre.lur...@redhat.com> Meson doesn't integrate very smoothly with Cargo. Use the cargo-wrapper script as a custom_target() always stale to build the Rust code. The "build-lib" command will produce a static library in the meson expected output directory, as well as link flags that must be employed to do the final link.
Those link flags can't be queried during configure time (Cargo doesn't have a user-queriable configure step), so we pass them to the linker thanks to @file argument support at build time. Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> --- tests/Cargo.toml | 4 ++++ tests/lib.rs | 2 ++ tests/meson.build | 20 +++++++++++++++++++- tests/qapi.rs | 11 +++++++++++ 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 tests/lib.rs create mode 100644 tests/qapi.rs diff --git a/tests/Cargo.toml b/tests/Cargo.toml index 7a4f6060b1..8a014dff89 100644 --- a/tests/Cargo.toml +++ b/tests/Cargo.toml @@ -7,6 +7,10 @@ publish = false [dependencies] common = { path = "../rust/common" } +[lib] +path = "lib.rs" +crate-type = ["staticlib"] + [[bin]] name = "qapi-cabi-rs" path = "qapi-cabi.rs" diff --git a/tests/lib.rs b/tests/lib.rs new file mode 100644 index 0000000000..e6fdf60a55 --- /dev/null +++ b/tests/lib.rs @@ -0,0 +1,2 @@ +mod qapi_ffi; +mod qapi; diff --git a/tests/meson.build b/tests/meson.build index f9af42caba..09aa2bdf55 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -45,7 +45,10 @@ test_qapi_files = custom_target('Test QAPI files', depend_files: qapi_gen_depends) if with_rust - test_qapi_rs_outputs = ['test-qapi-ffi-types.rs'] + test_qapi_rs_outputs = [ + 'test-qapi-ffi-types.rs', + 'test-qapi-types.rs', + ] test_qapi_rs = custom_target('Test QAPI Rust binding', output: test_qapi_rs_outputs, input: test_qapi_inputs, @@ -65,6 +68,21 @@ if with_rust 'build-bin', 'qapi-cabi-rs', '--', '--cfg', 'QAPI_CABI']) + libtest_rs = custom_target('Test Rust library', + build_by_default: true, + output: ['libqemu_tests.args', 'libqemu_tests.a'], + build_always_stale: true, + depends: [test_qapi_rs], + command: [cargo_wrapper, + meson.current_build_dir(), + meson.current_source_dir(), + meson.build_root(), + rs_build_type, + rust_target_triple, + 'build-lib']) + libtest_rs = declare_dependency( + link_args: '@' + libtest_rs[0].full_path(), + sources: libtest_rs) endif # meson doesn't like generated output in other directories diff --git a/tests/qapi.rs b/tests/qapi.rs new file mode 100644 index 0000000000..93e3e714e7 --- /dev/null +++ b/tests/qapi.rs @@ -0,0 +1,11 @@ +#![allow(dead_code)] +#![allow(non_camel_case_types)] + +use common::*; + +new_ptr!(); + +include!(concat!( + env!("MESON_BUILD_ROOT"), + "/tests/test-qapi-types.rs" +)); -- 2.33.0.113.g6c40894d24