diff options
| -rw-r--r-- | mesonbuild/modules/rust.py | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/mesonbuild/modules/rust.py b/mesonbuild/modules/rust.py index 60a58698c..5072e503e 100644 --- a/mesonbuild/modules/rust.py +++ b/mesonbuild/modules/rust.py @@ -62,6 +62,10 @@ class RustModule(ExtensionModule): def __init__(self, interpreter: Interpreter) -> None: super().__init__(interpreter) self._bindgen_bin: T.Optional[T.Union[ExternalProgram, Executable, OverrideProgram]] = None + if 'rust' in interpreter.compilers.host: + self._bindgen_rust_target: T.Optional[str] = interpreter.compilers.host['rust'].version + else: + self._bindgen_rust_target = None self.methods.update({ 'test': self.test, 'bindgen': self.bindgen, @@ -250,6 +254,15 @@ class RustModule(ExtensionModule): if self._bindgen_bin is None: self._bindgen_bin = state.find_program('bindgen', wanted=kwargs['bindgen_version']) + if self._bindgen_rust_target is not None: + # ExternalCommand.command's type is bonkers + _, _, err = mesonlib.Popen_safe( + T.cast('T.List[str]', self._bindgen_bin.get_command()) + + ['--rust-target', self._bindgen_rust_target]) + # Sometimes this is "invalid Rust target" and sometimes "invalid + # rust target" + if 'Got an invalid' in err: + self._bindgen_rust_target = None name: str if isinstance(header, File): @@ -317,9 +330,13 @@ class RustModule(ExtensionModule): '@INPUT@', '--output', os.path.join(state.environment.build_dir, '@OUTPUT0@') ] + \ - kwargs['args'] + inline_wrapper_args + ['--'] + \ - kwargs['c_args'] + clang_args + \ - ['-MD', '-MQ', '@INPUT@', '-MF', '@DEPFILE@'] + kwargs['args'] + inline_wrapper_args + if self._bindgen_rust_target and '--rust-target' not in cmd: + cmd.extend(['--rust-target', self._bindgen_rust_target]) + cmd.append('--') + cmd.extend(kwargs['c_args']) + cmd.extend(clang_args) + cmd.extend(['-MD', '-MQ', '@INPUT@', '-MF', '@DEPFILE@']) target = CustomTarget( f'rustmod-bindgen-{name}'.replace('/', '_'), |
