aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/backend/ninjabackend.py4
-rw-r--r--mesonbuild/compilers.py5
-rw-r--r--mesonbuild/environment.py3
3 files changed, 12 insertions, 0 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 188823a..b002656 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -257,10 +257,14 @@ int dummy;
# Languages that can mix with C or C++ but don't support unity builds yet
# because the syntax we use for unity builds is specific to C/++/ObjC/++.
+ # Assembly files cannot be unitified and neither can LLVM IR files
langs_cant_unity = ('d', 'fortran')
def get_target_source_can_unity(self, target, source):
if isinstance(source, File):
source = source.fname
+ if self.environment.is_llvm_ir(source) or \
+ self.environment.is_assembly(source):
+ return False
suffix = os.path.splitext(source)[1][1:]
for lang in self.langs_cant_unity:
if not lang in target.compilers:
diff --git a/mesonbuild/compilers.py b/mesonbuild/compilers.py
index 08ebbfb..e474d2e 100644
--- a/mesonbuild/compilers.py
+++ b/mesonbuild/compilers.py
@@ -59,6 +59,11 @@ def is_source(fname):
suffix = fname.split('.')[-1]
return suffix in clike_suffixes
+def is_assembly(fname):
+ if hasattr(fname, 'fname'):
+ fname = fname.fname
+ return fname.split('.')[-1].lower() == 's'
+
def is_llvm_ir(fname):
if hasattr(fname, 'fname'):
fname = fname.fname
diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py
index 0e8364c..44c5965 100644
--- a/mesonbuild/environment.py
+++ b/mesonbuild/environment.py
@@ -271,6 +271,9 @@ class Environment():
def is_source(self, fname):
return is_source(fname)
+ def is_assembly(self, fname):
+ return is_assembly(fname)
+
def is_llvm_ir(self, fname):
return is_llvm_ir(fname)