diff options
author | Mukilan Thiyagarajan <mukilan@igalia.com> | 2023-08-18 11:48:05 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-18 06:18:05 +0000 |
commit | 1efecf9b50b9ae057f6937acedb448e0a22eed6a (patch) | |
tree | 74238faf4fb03d8b825dd69c7e923510fa88ee07 /python/servo/platform | |
parent | 218ad8f574317846b591784c4c60af07aa72730d (diff) | |
download | servo-1efecf9b50b9ae057f6937acedb448e0a22eed6a.tar.gz servo-1efecf9b50b9ae057f6937acedb448e0a22eed6a.zip |
Use system lld on NixOS instead of rust-lld (#30123)
The -Zgcc-ld=lld flag makes rust use the rust-lld
linker that is distributed as part of rust toolchain.
However, this flag doesn't work on nixos correctly
as
1) rust-lld needs to be patched to have the correct rpath
to find libz.so
2) the bin/gcc-ld/ld.lld wrapper which calls rust-lld also
needs to be patched to use the correct dynamic loader
3) rust-lld doesn't respect NIX_LDFLAGS which contains
the additional search path derived from buildInputs.
The system linkers on nixos are wrapped so that
NIX_LDFLAGS is added as the rpath to the final binary.
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
Diffstat (limited to 'python/servo/platform')
-rw-r--r-- | python/servo/platform/base.py | 5 | ||||
-rw-r--r-- | python/servo/platform/linux.py | 11 |
2 files changed, 15 insertions, 1 deletions
diff --git a/python/servo/platform/base.py b/python/servo/platform/base.py index a1bce7e3bb8..7fde2b60c97 100644 --- a/python/servo/platform/base.py +++ b/python/servo/platform/base.py @@ -67,7 +67,10 @@ class Base: def library_path_variable_name(self): raise NotImplementedError("Do not know how to set library path for platform.") - def executable_suffix(self): + def linker_flag(self) -> str: + return "" + + def executable_suffix(self) -> str: return "" def _platform_bootstrap(self, _force: bool) -> bool: diff --git a/python/servo/platform/linux.py b/python/servo/platform/linux.py index e49154d8ff2..a5d0ea6bce2 100644 --- a/python/servo/platform/linux.py +++ b/python/servo/platform/linux.py @@ -127,6 +127,17 @@ class Linux(Base): installed_something |= self._platform_bootstrap_gstreamer(force) return installed_something + def linker_flag(self) -> str: + # the rust-lld binary downloaded by rustup + # doesn't respect NIX_LDFLAGS and also needs + # other patches to work correctly. Use system + # version of lld for now. See + # https://github.com/NixOS/nixpkgs/issues/220717 + if self.distro.lower() == 'nixos': + return '-C link-arg=-fuse-ld=lld' + else: + return '-Zgcc-ld=lld' + def install_non_gstreamer_dependencies(self, force: bool) -> bool: install = False pkgs = [] |