diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2025-11-08 11:56:45 +0100 |
|---|---|---|
| committer | Dylan Baker <dylan@pnwbakers.com> | 2025-11-12 14:56:22 -0800 |
| commit | 375154f964d14bde4982a15659fe2df81b571261 (patch) | |
| tree | 0c50e79a41d27a81a5379dfc21e2e49ec48f3897 | |
| parent | c1e91e497ffbe1d795c3bb996f0a6c2e42fd5018 (diff) | |
| download | meson-375154f964d14bde4982a15659fe2df81b571261.tar.gz | |
compilers: pass target and env to sanitizer_*_args
The Rust compiler will need these to check the rust_nightly option.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
| -rw-r--r-- | mesonbuild/backend/vs2010backend.py | 7 | ||||
| -rw-r--r-- | mesonbuild/compilers/compilers.py | 8 | ||||
| -rw-r--r-- | mesonbuild/compilers/cuda.py | 8 | ||||
| -rw-r--r-- | mesonbuild/compilers/mixins/gnu.py | 3 | ||||
| -rw-r--r-- | mesonbuild/compilers/mixins/islinker.py | 2 | ||||
| -rw-r--r-- | mesonbuild/compilers/mixins/microchip.py | 3 | ||||
| -rw-r--r-- | mesonbuild/compilers/mixins/visualstudio.py | 3 | ||||
| -rw-r--r-- | mesonbuild/modules/gnome.py | 4 |
8 files changed, 20 insertions, 18 deletions
diff --git a/mesonbuild/backend/vs2010backend.py b/mesonbuild/backend/vs2010backend.py index 1753ef002..2ee3eaa60 100644 --- a/mesonbuild/backend/vs2010backend.py +++ b/mesonbuild/backend/vs2010backend.py @@ -1148,11 +1148,10 @@ class Vs2010Backend(backends.Backend): return (target_args, file_args), (target_defines, file_defines), (target_inc_dirs, file_inc_dirs) - @staticmethod - def get_build_args(compiler, optimization_level: str, debug: bool, sanitize: str) -> T.List[str]: + def get_build_args(self, target: build.BuildTarget, compiler, optimization_level: str, debug: bool, sanitize: str) -> T.List[str]: build_args = compiler.get_optimization_args(optimization_level) build_args += compiler.get_debug_args(debug) - build_args += compiler.sanitizer_compile_args(sanitize) + build_args += compiler.sanitizer_compile_args(target, self.environment, sanitize) return build_args @@ -1658,7 +1657,7 @@ class Vs2010Backend(backends.Backend): gen_hdrs += custom_hdrs compiler = self._get_cl_compiler(target) - build_args = Vs2010Backend.get_build_args(compiler, self.optimization, self.debug, self.sanitize) + build_args = self.get_build_args(target, compiler, self.optimization, self.debug, self.sanitize) assert isinstance(target, (build.Executable, build.SharedLibrary, build.StaticLibrary, build.SharedModule)), 'for mypy' # Prefix to use to access the build root from the vcxproj dir diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py index 8ee2c1b24..3105adb19 100644 --- a/mesonbuild/compilers/compilers.py +++ b/mesonbuild/compilers/compilers.py @@ -295,7 +295,7 @@ def get_base_compile_args(target: 'BuildTarget', compiler: 'Compiler', env: 'Env assert isinstance(sanitize, list) if sanitize == ['none']: sanitize = [] - sanitize_args = compiler.sanitizer_compile_args(sanitize) + sanitize_args = compiler.sanitizer_compile_args(target, env, sanitize) # We consider that if there are no sanitizer arguments returned, then # the language doesn't support them. if sanitize_args: @@ -369,7 +369,7 @@ def get_base_link_args(target: 'BuildTarget', assert isinstance(sanitizer, list) if sanitizer == ['none']: sanitizer = [] - sanitizer_args = linker.sanitizer_link_args(sanitizer) + sanitizer_args = linker.sanitizer_link_args(target, env, sanitizer) # We consider that if there are no sanitizer arguments returned, then # the language doesn't support them. if sanitizer_args: @@ -1050,10 +1050,10 @@ class Compiler(HoldableObject, metaclass=abc.ABCMeta): def get_lto_obj_cache_path(self, path: str) -> T.List[str]: return self.linker.get_lto_obj_cache_path(path) - def sanitizer_compile_args(self, value: T.List[str]) -> T.List[str]: + def sanitizer_compile_args(self, target: T.Optional[BuildTarget], env: Environment, value: T.List[str]) -> T.List[str]: return [] - def sanitizer_link_args(self, value: T.List[str]) -> T.List[str]: + def sanitizer_link_args(self, target: T.Optional[BuildTarget], env: Environment, value: T.List[str]) -> T.List[str]: return self.linker.sanitizer_args(value) def get_asneeded_args(self) -> T.List[str]: diff --git a/mesonbuild/compilers/cuda.py b/mesonbuild/compilers/cuda.py index 7e050f140..bf80a42ad 100644 --- a/mesonbuild/compilers/cuda.py +++ b/mesonbuild/compilers/cuda.py @@ -698,11 +698,11 @@ class CudaCompiler(Compiler): # return self._to_host_flags(self.host_compiler.get_optimization_args(optimization_level)) return cuda_optimization_args[optimization_level] - def sanitizer_compile_args(self, value: T.List[str]) -> T.List[str]: - return self._to_host_flags(self.host_compiler.sanitizer_compile_args(value)) + def sanitizer_compile_args(self, target: T.Optional[BuildTarget], env: Environment, value: T.List[str]) -> T.List[str]: + return self._to_host_flags(self.host_compiler.sanitizer_compile_args(target, env, value)) - def sanitizer_link_args(self, value: T.List[str]) -> T.List[str]: - return self._to_host_flags(self.host_compiler.sanitizer_link_args(value)) + def sanitizer_link_args(self, target: T.Optional[BuildTarget], env: Environment, value: T.List[str]) -> T.List[str]: + return self._to_host_flags(self.host_compiler.sanitizer_link_args(target, env, value)) def get_debug_args(self, is_debug: bool) -> T.List[str]: return cuda_debug_args[is_debug] diff --git a/mesonbuild/compilers/mixins/gnu.py b/mesonbuild/compilers/mixins/gnu.py index fb97d0278..933d236de 100644 --- a/mesonbuild/compilers/mixins/gnu.py +++ b/mesonbuild/compilers/mixins/gnu.py @@ -21,6 +21,7 @@ from mesonbuild.compilers.compilers import CompileCheckMode if T.TYPE_CHECKING: from ..._typing import ImmutableListProtocol + from ...build import BuildTarget from ...options import MutableKeyedOptionDictType from ...environment import Environment from ..compilers import Compiler @@ -496,7 +497,7 @@ class GnuLikeCompiler(Compiler, metaclass=abc.ABCMeta): # for their specific arguments return ['-flto'] - def sanitizer_compile_args(self, value: T.List[str]) -> T.List[str]: + def sanitizer_compile_args(self, target: T.Optional[BuildTarget], env: Environment, value: T.List[str]) -> T.List[str]: if not value: return value args = ['-fsanitize=' + ','.join(value)] diff --git a/mesonbuild/compilers/mixins/islinker.py b/mesonbuild/compilers/mixins/islinker.py index e359fb353..762b5682e 100644 --- a/mesonbuild/compilers/mixins/islinker.py +++ b/mesonbuild/compilers/mixins/islinker.py @@ -38,7 +38,7 @@ class BasicLinkerIsCompilerMixin(Compiler): functionality itself. """ - def sanitizer_link_args(self, value: T.List[str]) -> T.List[str]: + def sanitizer_link_args(self, target: BuildTarget, env: Environment, value: T.List[str]) -> T.List[str]: return [] def get_lto_link_args(self, *, threads: int = 0, mode: str = 'default', diff --git a/mesonbuild/compilers/mixins/microchip.py b/mesonbuild/compilers/mixins/microchip.py index 6b989cba8..0dc7618a2 100644 --- a/mesonbuild/compilers/mixins/microchip.py +++ b/mesonbuild/compilers/mixins/microchip.py @@ -13,6 +13,7 @@ from ..compilers import Compiler from ...mesonlib import EnvironmentException, version_compare if T.TYPE_CHECKING: + from ...build import BuildTarget from ...envconfig import MachineInfo from ...environment import Environment @@ -152,7 +153,7 @@ class Xc32Compiler(CompilerBase): def get_profile_use_args(self) -> T.List[str]: return Compiler.get_profile_use_args(self) - def sanitizer_compile_args(self, value: T.List[str]) -> T.List[str]: + def sanitizer_compile_args(self, target: T.Optional[BuildTarget], env: Environment, value: T.List[str]) -> T.List[str]: return [] @classmethod diff --git a/mesonbuild/compilers/mixins/visualstudio.py b/mesonbuild/compilers/mixins/visualstudio.py index 4125ed885..746f59395 100644 --- a/mesonbuild/compilers/mixins/visualstudio.py +++ b/mesonbuild/compilers/mixins/visualstudio.py @@ -20,6 +20,7 @@ from ...options import OptionKey from mesonbuild.linkers.linkers import ClangClDynamicLinker if T.TYPE_CHECKING: + from ...build import BuildTarget from ...environment import Environment from ...dependencies import Dependency from .clike import CLikeCompiler as Compiler @@ -162,7 +163,7 @@ class VisualStudioLikeCompiler(Compiler, metaclass=abc.ABCMeta): def get_no_optimization_args(self) -> T.List[str]: return ['/Od', '/Oi-'] - def sanitizer_compile_args(self, value: T.List[str]) -> T.List[str]: + def sanitizer_compile_args(self, target: T.Optional[BuildTarget], env: Environment, value: T.List[str]) -> T.List[str]: if not value: return value return [f'/fsanitize={",".join(value)}'] diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py index 4d38d45c3..d6f56b9fa 100644 --- a/mesonbuild/modules/gnome.py +++ b/mesonbuild/modules/gnome.py @@ -924,7 +924,7 @@ class GnomeModule(ExtensionModule): if OptionKey('b_sanitize') in compiler.base_options: sanitize = state.environment.coredata.optstore.get_value_for('b_sanitize') assert isinstance(sanitize, list) - cflags += compiler.sanitizer_compile_args(sanitize) + cflags += compiler.sanitizer_compile_args(None, state.environment, sanitize) # These must be first in ldflags if 'address' in sanitize: internal_ldflags += ['-lasan'] @@ -934,7 +934,7 @@ class GnomeModule(ExtensionModule): internal_ldflags += ['-lubsan'] # FIXME: Linking directly to lib*san is not recommended but g-ir-scanner # does not understand -f LDFLAGS. https://bugzilla.gnome.org/show_bug.cgi?id=783892 - # ldflags += compiler.sanitizer_link_args(sanitize) + # ldflags += compiler.sanitizer_link_args(None, state.environment, sanitize) return cflags, internal_ldflags, external_ldflags |
