aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/mesonlib.py
diff options
context:
space:
mode:
authorNirbheek Chauhan <nirbheek@centricular.com>2016-10-21 07:38:32 +0530
committerNirbheek Chauhan <nirbheek@centricular.com>2016-10-21 08:00:39 +0530
commit57ce7d461877b2ad8da4f4712879880148759bc6 (patch)
treef6fcf145a32ad4f7cdc1022e5c441c5b91db9ddb /mesonbuild/mesonlib.py
parent9c9c5ab2a878a32c7f1e2855596caac1122b5bf5 (diff)
downloadmeson-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.py16
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