summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/compilers/detect.py44
-rw-r--r--mesonbuild/linkers/linkers.py43
2 files changed, 44 insertions, 43 deletions
diff --git a/mesonbuild/compilers/detect.py b/mesonbuild/compilers/detect.py
index 2a7944a81..ff6eb2631 100644
--- a/mesonbuild/compilers/detect.py
+++ b/mesonbuild/compilers/detect.py
@@ -213,55 +213,55 @@ def detect_static_linker(env: 'Environment', compiler: Compiler) -> StaticLinker
popen_exceptions[join_args(linker + [arg])] = e
continue
if "xilib: executing 'lib'" in err:
- return linkers.IntelVisualStudioLinker(linker, getattr(compiler, 'machine', None))
+ return linkers.IntelVisualStudioLinker(linker, env, getattr(compiler, 'machine', None))
if '/OUT:' in out.upper() or '/OUT:' in err.upper():
- return linkers.VisualStudioLinker(linker, getattr(compiler, 'machine', None))
+ return linkers.VisualStudioLinker(linker, env, getattr(compiler, 'machine', None))
if 'ar-Error-Unknown switch: --version' in err:
- return linkers.PGIStaticLinker(linker)
+ return linkers.PGIStaticLinker(linker, env)
if p.returncode == 0 and 'armar' in linker_name:
- return linkers.ArmarLinker(linker)
+ return linkers.ArmarLinker(linker, env)
if 'DMD32 D Compiler' in out or 'DMD64 D Compiler' in out:
assert isinstance(compiler, d.DCompiler)
- return linkers.DLinker(linker, compiler.arch)
+ return linkers.DLinker(linker, env, compiler.arch)
if 'LDC - the LLVM D compiler' in out:
assert isinstance(compiler, d.DCompiler)
- return linkers.DLinker(linker, compiler.arch, rsp_syntax=compiler.rsp_file_syntax())
+ return linkers.DLinker(linker, env, compiler.arch, rsp_syntax=compiler.rsp_file_syntax())
if 'GDC' in out and ' based on D ' in out:
assert isinstance(compiler, d.DCompiler)
- return linkers.DLinker(linker, compiler.arch)
+ return linkers.DLinker(linker, env, compiler.arch)
if err.startswith('Renesas') and 'rlink' in linker_name:
- return linkers.CcrxLinker(linker)
+ return linkers.CcrxLinker(linker, env)
if out.startswith('GNU ar'):
if 'xc16-ar' in linker_name:
- return linkers.Xc16Linker(linker)
+ return linkers.Xc16Linker(linker, env)
elif 'xc32-ar' in linker_name:
- return linkers.Xc32ArLinker(compiler.for_machine, linker)
+ return linkers.Xc32ArLinker(compiler.for_machine, linker, env)
if 'Texas Instruments Incorporated' in out:
if 'ar2000' in linker_name:
- return linkers.C2000Linker(linker)
+ return linkers.C2000Linker(linker, env)
elif 'ar6000' in linker_name:
- return linkers.C6000Linker(linker)
+ return linkers.C6000Linker(linker, env)
else:
- return linkers.TILinker(linker)
+ return linkers.TILinker(linker, env)
if out.startswith('The CompCert'):
- return linkers.CompCertLinker(linker)
+ return linkers.CompCertLinker(linker, env)
if out.strip().startswith('Metrowerks') or out.strip().startswith('Freescale'):
if 'ARM' in out:
- return linkers.MetrowerksStaticLinkerARM(linker)
+ return linkers.MetrowerksStaticLinkerARM(linker, env)
else:
- return linkers.MetrowerksStaticLinkerEmbeddedPowerPC(linker)
+ return linkers.MetrowerksStaticLinkerEmbeddedPowerPC(linker, env)
if 'TASKING VX-toolset' in err:
- return linkers.TaskingStaticLinker(linker)
+ return linkers.TaskingStaticLinker(linker, env)
if p.returncode == 0:
- return linkers.ArLinker(compiler.for_machine, linker)
+ return linkers.ArLinker(compiler.for_machine, linker, env)
if p.returncode == 1 and err.startswith('usage'): # OSX
- return linkers.AppleArLinker(compiler.for_machine, linker)
+ return linkers.AppleArLinker(compiler.for_machine, linker, env)
if p.returncode == 1 and err.startswith('Usage'): # AIX
- return linkers.AIXArLinker(linker)
+ return linkers.AIXArLinker(linker, env)
if p.returncode == 1 and err.startswith('ar: bad option: --'): # Solaris
- return linkers.ArLinker(compiler.for_machine, linker)
+ return linkers.ArLinker(compiler.for_machine, linker, env)
if p.returncode == 1 and err.startswith('emxomfar'):
- return linkers.EmxomfArLinker(compiler.for_machine, linker)
+ return linkers.EmxomfArLinker(compiler.for_machine, linker, env)
_handle_exceptions(popen_exceptions, trials, 'linker')
raise EnvironmentException('Unreachable code (exception to make mypy happy)')
diff --git a/mesonbuild/linkers/linkers.py b/mesonbuild/linkers/linkers.py
index ce9ca4f37..efb151bea 100644
--- a/mesonbuild/linkers/linkers.py
+++ b/mesonbuild/linkers/linkers.py
@@ -25,8 +25,9 @@ class StaticLinker:
id: str
- def __init__(self, exelist: T.List[str]):
+ def __init__(self, exelist: T.List[str], env: Environment):
self.exelist = exelist
+ self.environment = env
def get_id(self) -> str:
return self.id
@@ -362,8 +363,8 @@ class VisualStudioLinker(VisualStudioLikeLinker, StaticLinker):
id = 'lib'
- def __init__(self, exelist: T.List[str], machine: str):
- StaticLinker.__init__(self, exelist)
+ def __init__(self, exelist: T.List[str], env: Environment, machine: str):
+ StaticLinker.__init__(self, exelist, env)
VisualStudioLikeLinker.__init__(self, machine)
@@ -373,16 +374,16 @@ class IntelVisualStudioLinker(VisualStudioLikeLinker, StaticLinker):
id = 'xilib'
- def __init__(self, exelist: T.List[str], machine: str):
- StaticLinker.__init__(self, exelist)
+ def __init__(self, exelist: T.List[str], env: Environment, machine: str):
+ StaticLinker.__init__(self, exelist, env)
VisualStudioLikeLinker.__init__(self, machine)
class ArLinker(ArLikeLinker, StaticLinker):
id = 'ar'
- def __init__(self, for_machine: mesonlib.MachineChoice, exelist: T.List[str]):
- super().__init__(exelist)
+ def __init__(self, for_machine: mesonlib.MachineChoice, exelist: T.List[str], env: Environment):
+ super().__init__(exelist, env)
stdo = mesonlib.Popen_safe(self.exelist + ['-h'])[1]
# Enable deterministic builds if they are available.
stdargs = 'csr'
@@ -425,8 +426,8 @@ class ArmarLinker(ArLikeLinker, StaticLinker):
class DLinker(StaticLinker):
- def __init__(self, exelist: T.List[str], arch: str, *, rsp_syntax: RSPFileSyntax = RSPFileSyntax.GCC):
- super().__init__(exelist)
+ def __init__(self, exelist: T.List[str], env: Environment, arch: str, *, rsp_syntax: RSPFileSyntax = RSPFileSyntax.GCC):
+ super().__init__(exelist, env)
self.id = exelist[0]
self.arch = arch
self.__rsp_syntax = rsp_syntax
@@ -452,8 +453,8 @@ class DLinker(StaticLinker):
class CcrxLinker(StaticLinker):
- def __init__(self, exelist: T.List[str]):
- super().__init__(exelist)
+ def __init__(self, exelist: T.List[str], env: Environment):
+ super().__init__(exelist, env)
self.id = 'rlink'
def can_linker_accept_rsp(self) -> bool:
@@ -468,8 +469,8 @@ class CcrxLinker(StaticLinker):
class Xc16Linker(StaticLinker):
- def __init__(self, exelist: T.List[str]):
- super().__init__(exelist)
+ def __init__(self, exelist: T.List[str], env: Environment):
+ super().__init__(exelist, env)
self.id = 'xc16-ar'
def can_linker_accept_rsp(self) -> bool:
@@ -491,8 +492,8 @@ class Xc32ArLinker(ArLinker):
class CompCertLinker(StaticLinker):
- def __init__(self, exelist: T.List[str]):
- super().__init__(exelist)
+ def __init__(self, exelist: T.List[str], env: Environment):
+ super().__init__(exelist, env)
self.id = 'ccomp'
def can_linker_accept_rsp(self) -> bool:
@@ -504,8 +505,8 @@ class CompCertLinker(StaticLinker):
class TILinker(StaticLinker):
- def __init__(self, exelist: T.List[str]):
- super().__init__(exelist)
+ def __init__(self, exelist: T.List[str], env: Environment):
+ super().__init__(exelist, env)
self.id = 'ti-ar'
def can_linker_accept_rsp(self) -> bool:
@@ -556,8 +557,8 @@ class MetrowerksStaticLinkerEmbeddedPowerPC(MetrowerksStaticLinker):
class TaskingStaticLinker(StaticLinker):
id = 'tasking'
- def __init__(self, exelist: T.List[str]):
- super().__init__(exelist)
+ def __init__(self, exelist: T.List[str], env: Environment):
+ super().__init__(exelist, env)
def can_linker_accept_rsp(self) -> bool:
return True
@@ -1358,8 +1359,8 @@ NvidiaHPC_DynamicLinker = PGIDynamicLinker
class PGIStaticLinker(StaticLinker):
- def __init__(self, exelist: T.List[str]):
- super().__init__(exelist)
+ def __init__(self, exelist: T.List[str], env: Environment):
+ super().__init__(exelist, env)
self.id = 'ar'
self.std_args = ['-r']