aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/compilers/mixins/clang.py5
-rw-r--r--mesonbuild/environment.py8
-rw-r--r--mesonbuild/linkers.py6
3 files changed, 17 insertions, 2 deletions
diff --git a/mesonbuild/compilers/mixins/clang.py b/mesonbuild/compilers/mixins/clang.py
index ecfbc64..7525c12 100644
--- a/mesonbuild/compilers/mixins/clang.py
+++ b/mesonbuild/compilers/mixins/clang.py
@@ -113,6 +113,11 @@ class ClangCompiler(GnuLikeCompiler):
# (and other gcc-like compilers) cannot. This is becuse clang (being
# llvm based) is retargetable, while GCC is not.
#
+
+ # qcld: Qualcomm Snapdragon linker, based on LLVM
+ if linker == 'qcld':
+ return ['-fuse-ld=qcld']
+
if shutil.which(linker):
if not shutil.which(linker):
raise mesonlib.MesonException(
diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py
index 9830b45..bf75c80 100644
--- a/mesonbuild/environment.py
+++ b/mesonbuild/environment.py
@@ -55,6 +55,7 @@ from .linkers import (
GnuBFDDynamicLinker,
GnuGoldDynamicLinker,
LLVMDynamicLinker,
+ QualcommLLVMDynamicLinker,
MSVCDynamicLinker,
OptlinkDynamicLinker,
PGIDynamicLinker,
@@ -1028,10 +1029,13 @@ class Environment:
check_args += override
_, o, e = Popen_safe(compiler + check_args)
- v = search_version(o)
+ v = search_version(o + e)
if o.startswith('LLD'):
linker = LLVMDynamicLinker(
compiler, for_machine, comp_class.LINKER_PREFIX, override, version=v) # type: DynamicLinker
+ elif 'Snapdragon' in e and 'LLVM' in e:
+ linker = QualcommLLVMDynamicLinker(
+ compiler, for_machine, comp_class.LINKER_PREFIX, override, version=v) # type: DynamicLinker
elif e.startswith('lld-link: '):
# The LLD MinGW frontend didn't respond to --version before version 9.0.0,
# and produced an error message about failing to link (when no object
@@ -1227,7 +1231,7 @@ class Environment:
return cls(
compiler, version, for_machine, is_cross, info, exe_wrap,
target, linker=linker)
- if 'clang' in out:
+ if 'clang' in out or 'Clang' in out:
linker = None
defines = self.get_clang_compiler_defines(compiler)
diff --git a/mesonbuild/linkers.py b/mesonbuild/linkers.py
index fa30b9a..3ce7111 100644
--- a/mesonbuild/linkers.py
+++ b/mesonbuild/linkers.py
@@ -927,6 +927,12 @@ class ArmClangDynamicLinker(ArmDynamicLinker):
def import_library_args(self, implibname: str) -> T.List[str]:
return ['--symdefs=' + implibname]
+class QualcommLLVMDynamicLinker(LLVMDynamicLinker):
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+
+ # ARM Linker from Snapdragon LLVM ARM Compiler
+ self.id = 'ld.qcld'
class PGIDynamicLinker(PosixDynamicLinkerMixin, DynamicLinker):