diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2021-09-25 14:42:12 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-25 14:42:12 +0300 |
commit | f6ae82169cd3780d2c9cd0cae7edfea8c427ef35 (patch) | |
tree | c5134832db2202f3c273ff6575a23b5464e0a3fe /mesonbuild/compilers/rust.py | |
parent | c0efa7ab22f8900f6fa1dadf0d306ec375569c8d (diff) | |
parent | 30202a24021587b7d7ddffd8312eb5b425b3e273 (diff) | |
download | meson-f6ae82169cd3780d2c9cd0cae7edfea8c427ef35.zip meson-f6ae82169cd3780d2c9cd0cae7edfea8c427ef35.tar.gz meson-f6ae82169cd3780d2c9cd0cae7edfea8c427ef35.tar.bz2 |
Merge pull request #8773 from dcbaker/submit/rustc-enhancements-clippy
More enhancements for Rust + clippy support
Diffstat (limited to 'mesonbuild/compilers/rust.py')
-rw-r--r-- | mesonbuild/compilers/rust.py | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/mesonbuild/compilers/rust.py b/mesonbuild/compilers/rust.py index 2b566c8..9423b2d 100644 --- a/mesonbuild/compilers/rust.py +++ b/mesonbuild/compilers/rust.py @@ -45,6 +45,13 @@ class RustCompiler(Compiler): # rustc doesn't invoke the compiler itself, it doesn't need a LINKER_PREFIX language = 'rust' + _WARNING_LEVELS: T.Dict[str, T.List[str]] = { + '0': ['-A', 'warnings'], + '1': [], + '2': [], + '3': ['-W', 'warnings'], + } + def __init__(self, exelist: T.List[str], version: str, for_machine: MachineChoice, is_cross: bool, info: 'MachineInfo', exe_wrapper: T.Optional['ExternalProgram'] = None, @@ -168,3 +175,41 @@ class RustCompiler(Compiler): for a in super().get_linker_always_args(): args.extend(['-C', f'link-arg={a}']) return args + + def get_werror_args(self) -> T.List[str]: + # Use -D warnings, which makes every warning not explicitly allowed an + # error + return ['-D', 'warnings'] + + def get_warn_args(self, level: str) -> T.List[str]: + # TODO: I'm not really sure what to put here, Rustc doesn't have warning + return self._WARNING_LEVELS[level] + + def get_no_warn_args(self) -> T.List[str]: + return self._WARNING_LEVELS["0"] + + def get_pic_args(self) -> T.List[str]: + # This defaults to + return ['-C', 'relocation-model=pic'] + + def get_pie_args(self) -> T.List[str]: + # Rustc currently has no way to toggle this, it's controlled by whether + # pic is on by rustc + return [] + + +class ClippyRustCompiler(RustCompiler): + + """Clippy is a linter that wraps Rustc. + + This just provides us a different id + """ + + def __init__(self, exelist: T.List[str], version: str, for_machine: MachineChoice, + is_cross: bool, info: 'MachineInfo', + exe_wrapper: T.Optional['ExternalProgram'] = None, + full_version: T.Optional[str] = None, + linker: T.Optional['DynamicLinker'] = None): + super().__init__(exelist, version, for_machine, is_cross, info, + exe_wrapper, full_version, linker) + self.id = 'clippy-driver rustc' |