summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2025-11-08 11:56:45 +0100
committerDylan Baker <dylan@pnwbakers.com>2025-11-12 14:56:22 -0800
commit375154f964d14bde4982a15659fe2df81b571261 (patch)
tree0c50e79a41d27a81a5379dfc21e2e49ec48f3897
parentc1e91e497ffbe1d795c3bb996f0a6c2e42fd5018 (diff)
downloadmeson-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.py7
-rw-r--r--mesonbuild/compilers/compilers.py8
-rw-r--r--mesonbuild/compilers/cuda.py8
-rw-r--r--mesonbuild/compilers/mixins/gnu.py3
-rw-r--r--mesonbuild/compilers/mixins/islinker.py2
-rw-r--r--mesonbuild/compilers/mixins/microchip.py3
-rw-r--r--mesonbuild/compilers/mixins/visualstudio.py3
-rw-r--r--mesonbuild/modules/gnome.py4
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