Use llvm-lib as an alternative to lib

Detect llvm-lib as an alternative Windows static linker to lib
pull/4250/head
Jon Turney 6 years ago
parent a025c98d30
commit 2993fc4e8a
No known key found for this signature in database
GPG Key ID: C7C86F0370285C81
  1. 9
      mesonbuild/environment.py

@ -363,6 +363,7 @@ class Environment:
self.default_rust = ['rustc'] self.default_rust = ['rustc']
self.default_static_linker = ['ar'] self.default_static_linker = ['ar']
self.vs_static_linker = ['lib'] self.vs_static_linker = ['lib']
self.clang_cl_static_linker = ['llvm-lib']
self.gcc_static_linker = ['gcc-ar'] self.gcc_static_linker = ['gcc-ar']
self.clang_static_linker = ['llvm-ar'] self.clang_static_linker = ['llvm-ar']
@ -919,7 +920,7 @@ This is probably wrong, it should always point to the native compiler.''' % evar
if evar in os.environ: if evar in os.environ:
linkers = [shlex.split(os.environ[evar])] linkers = [shlex.split(os.environ[evar])]
elif isinstance(compiler, compilers.VisualStudioCCompiler): elif isinstance(compiler, compilers.VisualStudioCCompiler):
linkers = [self.vs_static_linker] linkers = [self.vs_static_linker, self.clang_cl_static_linker]
elif isinstance(compiler, compilers.GnuCompiler): elif isinstance(compiler, compilers.GnuCompiler):
# Use gcc-ar if available; needed for LTO # Use gcc-ar if available; needed for LTO
linkers = [self.gcc_static_linker, self.default_static_linker] linkers = [self.gcc_static_linker, self.default_static_linker]
@ -929,14 +930,14 @@ This is probably wrong, it should always point to the native compiler.''' % evar
elif isinstance(compiler, compilers.DCompiler): elif isinstance(compiler, compilers.DCompiler):
# Prefer static linkers over linkers used by D compilers # Prefer static linkers over linkers used by D compilers
if mesonlib.is_windows(): if mesonlib.is_windows():
linkers = [self.vs_static_linker, compiler.get_linker_exelist()] linkers = [self.vs_static_linker, self.clang_cl_static_linker, compiler.get_linker_exelist()]
else: else:
linkers = [self.default_static_linker, compiler.get_linker_exelist()] linkers = [self.default_static_linker, compiler.get_linker_exelist()]
else: else:
linkers = [self.default_static_linker] linkers = [self.default_static_linker]
popen_exceptions = {} popen_exceptions = {}
for linker in linkers: for linker in linkers:
if 'lib' in linker or 'lib.exe' in linker: if not set(['lib', 'lib.exe', 'llvm-lib', 'llvm-lib.exe']).isdisjoint(linker):
arg = '/?' arg = '/?'
else: else:
arg = '--version' arg = '--version'
@ -945,7 +946,7 @@ This is probably wrong, it should always point to the native compiler.''' % evar
except OSError as e: except OSError as e:
popen_exceptions[' '.join(linker + [arg])] = e popen_exceptions[' '.join(linker + [arg])] = e
continue continue
if '/OUT:' in out or '/OUT:' in err: if '/OUT:' in out.upper() or '/OUT:' in err.upper():
return VisualStudioLinker(linker) return VisualStudioLinker(linker)
if p.returncode == 0 and ('armar' in linker or 'armar.exe' in linker): if p.returncode == 0 and ('armar' in linker or 'armar.exe' in linker):
return ArmarLinker(linker) return ArmarLinker(linker)

Loading…
Cancel
Save