linkers: Do not use numeric windows subsystems with lld
Fixes:
@@ -587,6 +587,18 @@ class GnuLikeDynamicLinkerMixin:
'custom': [],
} # type: T.Dict[str, T.List[str]]
+ _SUBSYSTEMS = {
+ "native": "1",
+ "windows": "windows",
+ "console": "console",
+ "posix": "7",
+ "efi_application": "10",
+ "efi_boot_service_driver": "11",
+ "efi_runtime_driver": "12",
+ "efi_rom": "13",
+ "boot_application": "16",
+ } # type: T.Dict[str, str]
+
def get_buildtype_args(self, buildtype: str) -> T.List[str]:
# We can override these in children by just overriding the
# _BUILDTYPE_ARGS value.
@@ -720,21 +732,10 @@ class GnuLikeDynamicLinkerMixin:
# as well, and is always accepted, so we manually map the
# other types here. List of all types:
# https://github.com/wine-mirror/wine/blob/3ded60bd1654dc689d24a23305f4a93acce3a6f2/include/winnt.h#L2492-L2507
- subsystems = {
- "native": "1",
- "windows": "windows",
- "console": "console",
- "posix": "7",
- "efi_application": "10",
- "efi_boot_service_driver": "11",
- "efi_runtime_driver": "12",
- "efi_rom": "13",
- "boot_application": "16",
- }
versionsuffix = None
if ',' in value:
value, versionsuffix = value.split(',', 1)
- newvalue = subsystems.get(value)
+ newvalue = self._SUBSYSTEMS.get(value)
if newvalue is not None:
if versionsuffix is not None:
newvalue += f':{versionsuffix}'
@@ -881,6 +882,18 @@ class LLVMDynamicLinker(GnuLikeDynamicLinkerMixin, PosixDynamicLinkerMixin, Dyna
def get_thinlto_cache_args(self, path: str) -> T.List[str]:
return ['-Wl,--thinlto-cache-dir=' + path]
+ def get_win_subsystem_args(self, value: str) -> T.List[str]:
+ # lld does not support a numeric subsystem value
+ version = None
+ if ',' in value:
+ value, version = value.split(',', 1)
+ if value in self._SUBSYSTEMS:
+ if version is not None:
+ value += f':{version}'
+ return self._apply_prefix([f'--subsystem,{value}'])
+ else:
+ raise mesonlib.MesonBugException(f'win_subsystem: {value} not handled in lld linker. This should not be possible.')
+
class WASMDynamicLinker(GnuLikeDynamicLinkerMixin, PosixDynamicLinkerMixin, DynamicLinker):
