diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2025-11-08 16:37:19 +0100 |
|---|---|---|
| committer | Dylan Baker <dylan@pnwbakers.com> | 2025-11-12 14:56:22 -0800 |
| commit | 572c6986b886bec90ce21adde9d15d4b12a22909 (patch) | |
| tree | bbdf6bdd54671e8d64e7334d6f341dd1a6f2ab2d /mesonbuild/compilers | |
| parent | 351eda4dbb2eb630d20e63ed58452df559817b3c (diff) | |
| download | meson-572c6986b886bec90ce21adde9d15d4b12a22909.tar.gz | |
compilers: generalize -fembed-bitcode
Produce -Cembed-bitcode for Rust, and also disable bitcode
generation when LTO is not enabled.
Diffstat (limited to 'mesonbuild/compilers')
| -rw-r--r-- | mesonbuild/compilers/compilers.py | 9 | ||||
| -rw-r--r-- | mesonbuild/compilers/mixins/clang.py | 3 | ||||
| -rw-r--r-- | mesonbuild/compilers/rust.py | 8 |
3 files changed, 18 insertions, 2 deletions
diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py index bd283ed32..8ee2c1b24 100644 --- a/mesonbuild/compilers/compilers.py +++ b/mesonbuild/compilers/compilers.py @@ -273,6 +273,7 @@ def are_asserts_disabled_for_subproject(subproject: str, env: 'Environment') -> def get_base_compile_args(target: 'BuildTarget', compiler: 'Compiler', env: 'Environment') -> T.List[str]: args: T.List[str] = [] + lto = False try: if env.coredata.get_option_for_target(target, 'b_lto'): num_threads = get_option_value_for_target(env, target, OptionKey('b_lto_threads'), 0) @@ -280,6 +281,7 @@ def get_base_compile_args(target: 'BuildTarget', compiler: 'Compiler', env: 'Env args.extend(compiler.get_lto_compile_args( threads=num_threads, mode=ltomode)) + lto = True except (KeyError, AttributeError): pass try: @@ -320,8 +322,8 @@ def get_base_compile_args(target: 'BuildTarget', compiler: 'Compiler', env: 'Env except KeyError: pass # This does not need a try...except - if option_enabled(compiler.base_options, target, env, 'b_bitcode'): - args.append('-fembed-bitcode') + bitcode = option_enabled(compiler.base_options, target, env, 'b_bitcode') + args.extend(compiler.get_embed_bitcode_args(bitcode, lto)) try: crt_val = env.coredata.get_option_for_target(target, 'b_vscrt') assert isinstance(crt_val, str) @@ -1035,6 +1037,9 @@ class Compiler(HoldableObject, metaclass=abc.ABCMeta): ret.append(arg) return ret + def get_embed_bitcode_args(self, bitcode: bool, lto: bool) -> T.List[str]: + return [] + def get_lto_compile_args(self, *, threads: int = 0, mode: str = 'default') -> T.List[str]: return [] diff --git a/mesonbuild/compilers/mixins/clang.py b/mesonbuild/compilers/mixins/clang.py index 2c1e326bd..5c3310062 100644 --- a/mesonbuild/compilers/mixins/clang.py +++ b/mesonbuild/compilers/mixins/clang.py @@ -216,6 +216,9 @@ class ClangCompiler(GnuLikeCompiler): def get_coverage_link_args(self) -> T.List[str]: return ['--coverage'] + def get_embed_bitcode_args(self, bitcode: bool, lto: bool) -> T.List[str]: + return ['-fembed-bitcode'] if bitcode else [] + def get_lto_compile_args(self, *, threads: int = 0, mode: str = 'default') -> T.List[str]: args: T.List[str] = [] if mode == 'thin': diff --git a/mesonbuild/compilers/rust.py b/mesonbuild/compilers/rust.py index 54b3da91a..54b917f7a 100644 --- a/mesonbuild/compilers/rust.py +++ b/mesonbuild/compilers/rust.py @@ -341,6 +341,14 @@ class RustCompiler(Compiler): args.extend(['-C', f'link-arg={a}']) return args + def get_embed_bitcode_args(self, bitcode: bool, lto: bool) -> T.List[str]: + if bitcode: + return ['-C', 'embed-bitcode=yes'] + elif lto: + return [] + else: + return ['-C', 'embed-bitcode=no'] + def get_lto_compile_args(self, *, threads: int = 0, mode: str = 'default') -> T.List[str]: # TODO: what about -Clinker-plugin-lto? rustc_lto = 'lto=thin' if mode == 'thin' else 'lto' |
