Rust モジュール

(0.57.0で追加) (1.0.0から安定版)

Rustモジュールは、MesonにRustコードを統合するためのヘルパーを提供します。目標は、MesonでのRustの使用をより快適にする一方で、Mesonicのままであることです。これは、RustをMesonにより近づけることを試みることを意味し、MesonをRustにより近づけることではありません。

関数

test()

rustmod.test(name, target, ...)

この関数は、既存のRustベースのターゲット(ライブラリまたは実行可能ファイル)から新しいRust単体テストターゲットを作成します。これは、元のターゲットに渡されたソースと引数をコピーし、コンパイルに`--test`引数を追加し、その実行可能ファイルを呼び出す新しいテストターゲットを作成することで、Rustテストプロトコルを使用します。

この関数は2つの位置引数を取ります。最初の引数はテストの名前、2番目の引数はRustベースのターゲットであるライブラリまたは実行可能ファイルです。また、次のキーワード引数も取ります。

  • dependencies: テスト専用の依存関係のリスト
  • link_with: さらにリンクするビルドターゲットのリスト (1.2.0から)
  • rust_args: Rustコンパイラに渡される追加の引数のリスト (1.2.0から)

この関数は、protocolを除くtest()関数で受け入れられるすべてのキーワード引数も受け入れます。これは自動的に設定されます。

bindgen()

この関数はbindgenをラップして、Cライブラリ周りのRustバインディングの作成を簡素化します。これには、generatorまたはcustom_targetを使用してbindgenを呼び出すよりも2つの利点があります。

  • include_directoriesを処理するため、手動で-I...に変換する必要がありません。
  • 依存ファイルが自動的に設定されるため、結果がより信頼性が高くなります。
  • アサーションを自動的に処理し、RustとC/C++が同じ動作をするように同期します。

次のキーワード引数を取ります。

  • input: ファイル、文字列、またはCustomTargetのリスト。最初の要素はbindgenが解析するヘッダーで、追加の要素は依存関係です。
  • output: 出力Rustファイルの名前
  • output_inline_wrapper: 静的インライン関数のラッパーを含むオプションの出力Cファイルの名前。これにはbindgen-0.65以降が必要です (1.3.0から)。
  • include_directories: include_directoriesまたはstringオブジェクトのリスト。これらはclangに-I引数として渡されます (1.0.0から文字列)
  • c_args: clangにそのまま渡す文字列引数のリスト
  • args: bindgenにそのまま渡す文字列引数のリスト。
  • dependencies: 基になるclang呼び出しに渡すDependencyオブジェクトのリスト (1.0.0から)
  • language: cまたはcppのリテラル文字列値。設定すると、ソースを指定された言語として強制的に扱います。入力ファイルの拡張子に基づいてチェックするデフォルト値です。(1.4.0から)
  • bindgen_version: 文字列のバージョン値のリスト。設定すると、検出されたbindgenバイナリはこれらの制約に準拠する必要があります。(1.4.0から)
rust = import('unstable-rust')

inc = include_directories('..'¸ '../../foo')

generated = rust.bindgen(
    input : 'myheader.h',
    output : 'generated.rs',
    include_directories : [inc, include_directories('foo')],
    args : ['--no-rustfmt-bindings'],
    c_args : ['-DFOO=1'],
)

ヘッダーが生成されたヘッダーに依存している場合、適切な依存関係の順序を確保するために、それらのヘッダーもbindgenに渡す必要があります。適切な依存ファイルが生成されるため、静的ヘッダーを渡す必要はありません。

h1 = custom_target(...)
h2 = custom_target(...)

r1 = rust.bindgen(
  input : [h1, h2],  # h1 includes h2,
  output : 'out.rs',
)

1.1.0から b_ndebugオプション(C/C++では-DNDEBUG、Rustでは-C debug-assertions=on)が設定されている場合、MesonはRustとC/C++のアサーションを同期し、-DNDEBUGをclangに追加の引数として渡します。これにより、#[cfg(debug_asserions)]cfg!()を使用して、-DNDEBUGで制御される動作を確実にラップできます。1.1.0以前は、RustのアサーションはMesonによって有効化されませんでした。

1.2.0から clangに渡す追加の引数は、プロパティセクションのマシンファイルで指定できます。

[properties]
bindgen_clang_arguments = ['-target', 'x86_64-linux-gnu']

proc_macro()

rustmod.proc_macro(name, sources, ...)

1.3.0から

この関数は、次のようなRust`proc-macro`クレートを作成します。

shared_library()(name, sources,
  rust_crate_type: 'proc-macro',
  native: true)

proc-macroターゲットは、他のRustターゲットのlink_withキーワード引数に渡すことができます。

shared_library()キーワード引数のサブセットのみが許可されます。

  • rust_args
  • rust_dependency_map
  • sources
  • dependencies
  • extra_files
  • link_args
  • link_depends
  • link_with
  • override_options

検索結果は次のとおりです。