diff options
author | Nirbheek Chauhan <nirbheek@centricular.com> | 2016-10-21 07:38:32 +0530 |
---|---|---|
committer | Nirbheek Chauhan <nirbheek@centricular.com> | 2016-10-21 08:00:39 +0530 |
commit | 57ce7d461877b2ad8da4f4712879880148759bc6 (patch) | |
tree | f6fcf145a32ad4f7cdc1022e5c441c5b91db9ddb /mesonbuild/mesonlib.py | |
parent | 9c9c5ab2a878a32c7f1e2855596caac1122b5bf5 (diff) | |
download | meson-57ce7d461877b2ad8da4f4712879880148759bc6.zip meson-57ce7d461877b2ad8da4f4712879880148759bc6.tar.gz meson-57ce7d461877b2ad8da4f4712879880148759bc6.tar.bz2 |
Add support for extracting objects in unity builds
Not only does extract_all_objects() now work properly again,
extract_objects() also works if you specify a subset of sources all of
which have been compiled into a single unified object.
So, for instance, this allows you to extract all the objects
corresponding to the C sources compiled into a target consisting of
C and C++ sources.
Diffstat (limited to 'mesonbuild/mesonlib.py')
-rw-r--r-- | mesonbuild/mesonlib.py | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/mesonbuild/mesonlib.py b/mesonbuild/mesonlib.py index abb5641..904d10d 100644 --- a/mesonbuild/mesonlib.py +++ b/mesonbuild/mesonlib.py @@ -70,6 +70,22 @@ class File: def __hash__(self): return hash((self.fname, self.subdir, self.is_built)) +def get_compiler_for_source(compilers, src): + for comp in compilers: + if comp.can_compile(src): + return comp + raise RuntimeError('No specified compiler can handle file {!s}'.format(src)) + +def classify_unity_sources(compilers, sources): + compsrclist = {} + for src in sources: + comp = get_compiler_for_source(compilers, src) + if comp not in compsrclist: + compsrclist[comp] = [src] + else: + compsrclist[comp].append(src) + return compsrclist + def flatten(item): if not isinstance(item, list): return item |