aboutsummaryrefslogtreecommitdiffstats
path: root/python/servo/platform
diff options
context:
space:
mode:
authorMukilan Thiyagarajan <mukilan@igalia.com>2023-08-18 11:48:05 +0530
committerGitHub <noreply@github.com>2023-08-18 06:18:05 +0000
commit1efecf9b50b9ae057f6937acedb448e0a22eed6a (patch)
tree74238faf4fb03d8b825dd69c7e923510fa88ee07 /python/servo/platform
parent218ad8f574317846b591784c4c60af07aa72730d (diff)
downloadservo-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.py5
-rw-r--r--python/servo/platform/linux.py11
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 = []