diff options
| author | gerioldman <k.gergo49@gmail.com> | 2024-08-28 02:57:56 +0200 |
|---|---|---|
| committer | gerioldman <k.gergo49@gmail.com> | 2025-01-08 01:52:03 +0100 |
| commit | b95e1777ddbf0f8aebb56b84a6011468088c06ec (patch) | |
| tree | a4b439294301a8cf1a885d6e8fcd597c9bc621c8 /mesonbuild/backend/backends.py | |
| parent | 62c5db2cb3809e584bd4faef5c0a9d112e36a29c (diff) | |
| download | meson-b95e1777ddbf0f8aebb56b84a6011468088c06ec.tar.gz | |
First draft version of Tasking MIL linking with b_lto and prelinking
Diffstat (limited to 'mesonbuild/backend/backends.py')
| -rw-r--r-- | mesonbuild/backend/backends.py | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py index fb912b1d8..18caf7bbe 100644 --- a/mesonbuild/backend/backends.py +++ b/mesonbuild/backend/backends.py @@ -24,10 +24,11 @@ from .. import dependencies from .. import programs from .. import mesonlib from .. import mlog -from ..compilers import LANGUAGES_USING_LDFLAGS, detect +from ..compilers import LANGUAGES_USING_LDFLAGS, detect, lang_suffixes from ..mesonlib import ( File, MachineChoice, MesonException, OrderedSet, - ExecutableSerialisation, classify_unity_sources, + ExecutableSerialisation, EnvironmentException, + classify_unity_sources, get_compiler_for_source ) from ..options import OptionKey @@ -837,7 +838,7 @@ class Backend: fname = fname.replace(ch, '_') return hashed + fname - def object_filename_from_source(self, target: build.BuildTarget, source: 'FileOrString', targetdir: T.Optional[str] = None) -> str: + def object_filename_from_source(self, target: build.BuildTarget, compiler: Compiler, source: 'FileOrString', targetdir: T.Optional[str] = None) -> str: assert isinstance(source, mesonlib.File) if isinstance(target, build.CompileTarget): return target.sources_map[source] @@ -868,7 +869,16 @@ class Backend: gen_source = os.path.relpath(os.path.join(build_dir, rel_src), os.path.join(self.environment.get_source_dir(), target.get_subdir())) machine = self.environment.machines[target.for_machine] - ret = self.canonicalize_filename(gen_source) + '.' + machine.get_object_suffix() + object_suffix = machine.get_object_suffix() + # For the TASKING compiler, in case of LTO or prelinking the object suffix has to be .mil + if compiler.get_id() == 'tasking': + if target.get_option(OptionKey('b_lto')) or (isinstance(target, build.StaticLibrary) and target.prelink): + if not source.rsplit('.', 1)[1] in lang_suffixes['c']: + if isinstance(target, build.StaticLibrary) and not target.prelink: + raise EnvironmentException('Tried using MIL linking for a static library with a assembly file. This can only be done if the static library is prelinked or disable \'b_lto\'.') + else: + object_suffix = 'mil' + ret = self.canonicalize_filename(gen_source) + '.' + object_suffix if targetdir is not None: return os.path.join(targetdir, ret) return ret @@ -924,7 +934,8 @@ class Backend: sources.append(_src) for osrc in sources: - objname = self.object_filename_from_source(extobj.target, osrc, targetdir) + compiler = get_compiler_for_source(extobj.target.compilers.values(), osrc) + objname = self.object_filename_from_source(extobj.target, compiler, osrc, targetdir) objpath = os.path.join(proj_dir_to_build_root, objname) result.append(objpath) |
