1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
{
lib,
stdenv,
rustPlatform,
fetchFromGitHub,
# build deps
cargo-deny,
cmake,
dbus,
gcc,
git,
gnumake,
libxkbcommon,
llvm,
llvmPackages,
m4,
makeWrapper,
perl,
pkg-config,
python3,
taplo,
vulkan-loader,
which,
yasm,
zlib,
# runtime deps
darwin,
fontconfig,
freetype,
gst_all_1,
libGL,
libunwind,
udev,
wayland,
xorg,
}:
let
customPython = python3.withPackages (
ps: with ps; [
dbus
packaging
pip
six
virtualenv
]
);
runtimePaths = lib.makeLibraryPath [
xorg.libXcursor
xorg.libXrandr
xorg.libXi
libxkbcommon
vulkan-loader
wayland
libGL
];
in
rustPlatform.buildRustPackage {
pname = "servo";
version = "0-unstable-2024-09-09";
src = fetchFromGitHub {
owner = "servo";
repo = "servo";
rev = "938fd8c12fc2489303e12538d3e3585bd771141f";
hash = "sha256-CrpEBFYd8Qd0rxSnT81IvtxxEuYG0jWGJeHISvxalyY=";
};
# need to use a `Cargo.lock` as there are git dependencies
cargoLock = {
lockFile = ./Cargo.lock;
outputHashes = {
"derive_common-0.0.1" = "sha256-z0I2fQQlbUqaFU1EX45eYDy5IbZJ4SIget7WHzq4St0=";
"fontsan-0.5.2" = "sha256-4id66xxQ8iu0+OvJKH77WYPUE0eoVa9oUHmr6lRFPa8=";
"gilrs-0.10.6" = "sha256-RIfowFShWTPqgVWliK8Fc4cJw0YKITLvmexmTC0SwQk=";
"mozjs-0.14.1" = "sha256-RMM28Rd0r58VLfNEJzjWw3Ze6oKEi5lC1Edv03tJbfY=";
"peek-poke-0.3.0" = "sha256-WCZYX68vZrPhaAZwpx9/lUp3bVsLMwtmlJSW8wNb2ks=";
"servo-media-0.1.0" = "sha256-+J/6ZJPM9eus6YHJA6ENJD63CBiJTtKZdfORq9n6Nf8=";
"signpost-0.1.0" = "sha256-xRVXwW3Gynace9Yk5r1q7xA60yy6xhC5wLAyMJ6rPRs=";
"webxr-0.0.1" = "sha256-HZ8oWm5BaBLBXo4dS2CbWjpExry7dzeB2ddRLh7+98w=";
"naga-22.0.0" = "sha256-Xi2lWZCv4V2mUbQmwV1aw3pcvIIcyltKvv/C+LVqqDI=";
"raqote-0.8.5" = "sha256-WLsz5q08VNmYBxUhQ0hOn0K0RVFnnjaWF/MuQGkO/Rg=";
};
};
# Remap absolute path between modules to include SEMVER
# set `HOME` to a temp dir for write access
# Fix invalid option errors during linking (https://github.com/mozilla/nixpkgs-mozilla/commit/c72ff151a3e25f14182569679ed4cd22ef352328)
preConfigure = ''
sed -i -e 's/\/style\//\/style-0.0.1\//g' ../cargo-vendor-dir/servo_atoms-0.0.1/build.rs
export HOME=$TMPDIR
unset AS
'';
nativeBuildInputs = [
cargo-deny
cmake
customPython
dbus
gcc
git
gnumake
llvm
llvmPackages.libstdcxxClang
m4
makeWrapper
perl
pkg-config
python3
taplo
which
yasm
zlib
];
buildInputs = [
fontconfig
freetype
gst_all_1.gstreamer
gst_all_1.gst-plugins-base
gst_all_1.gst-plugins-good
gst_all_1.gst-plugins-bad
gst_all_1.gst-plugins-ugly
libunwind
udev
wayland
libGL
xorg.libX11
xorg.libxcb
] ++ (lib.optionals stdenv.hostPlatform.isDarwin [ darwin.apple_sdk.frameworks.AppKit ]);
# copy resources into `$out` to be used during runtime
# link runtime libraries
postFixup = ''
mkdir -p $out/resources
cp -r ./resources $out/
wrapProgram $out/bin/servo \
--prefix LD_LIBRARY_PATH : ${runtimePaths}
'';
LIBCLANG_PATH = "${lib.getLib llvmPackages.libclang}/lib";
meta = {
description = "The embeddable, independent, memory-safe, modular, parallel web rendering engine";
homepage = "https://servo.org";
license = lib.licenses.mpl20;
maintainers = with lib.maintainers; [ supinie ];
mainProgram = "servo";
platforms = lib.platforms.linux ++ lib.platforms.darwin;
};
}
|