aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
l---------[-rw-r--r--]etc/shell.nix184
-rw-r--r--[l---------]shell.nix184
2 files changed, 184 insertions, 184 deletions
diff --git a/etc/shell.nix b/etc/shell.nix
index fe91b94bb63..314b0bf3e3f 100644..120000
--- a/etc/shell.nix
+++ b/etc/shell.nix
@@ -1,183 +1 @@
-# This provides a shell with all the necesarry packages required to run mach and build servo
-# NOTE: This does not work offline or for nix-build
-
-{
- buildAndroid ? false
-}:
-with import (builtins.fetchTarball {
- url = "https://github.com/NixOS/nixpkgs/archive/d04953086551086b44b6f3c6b7eeb26294f207da.tar.gz";
-}) {
- overlays = [
- (import (builtins.fetchTarball {
- # Bumped the channel in rust-toolchain.toml? Bump this commit too!
- url = "https://github.com/oxalica/rust-overlay/archive/65e3dc0fe079fe8df087cd38f1fe6836a0373aad.tar.gz";
- }))
- ];
- config = {
- android_sdk.accept_license = buildAndroid;
- allowUnfree = buildAndroid;
- };
-};
-let
- rustToolchain = rust-bin.fromRustupToolchainFile ../rust-toolchain.toml;
- rustPlatform = makeRustPlatform {
- cargo = rustToolchain;
- rustc = rustToolchain;
- };
- pkgs_gnumake_4_3 = import (builtins.fetchTarball {
- url = "https://github.com/NixOS/nixpkgs/archive/6adf48f53d819a7b6e15672817fa1e78e5f4e84f.tar.gz";
- }) {};
-
- # We need clangStdenv with:
- # - clang < 16 (#30587)
- # - clang < 15 (#31059)
- # - glibc 2.38 (#31054)
- llvmPackages = llvmPackages_14;
- stdenv = llvmPackages.stdenv;
-
- buildToolsVersion = "34.0.0";
- androidComposition = androidenv.composeAndroidPackages {
- buildToolsVersions = [ buildToolsVersion ];
- includeEmulator = true;
- platformVersions = [ "33" ];
- includeSources = false;
- includeSystemImages = true;
- systemImageTypes = [ "google_apis" ];
- abiVersions = [ "x86" "armeabi-v7a" ];
- includeNDK = true;
- ndkVersion = "26.2.11394342";
- useGoogleAPIs = false;
- useGoogleTVAddOns = false;
- includeExtras = [
- "extras;google;gcm"
- ];
- };
- androidSdk = androidComposition.androidsdk;
- # Required by ./mach build --android
- androidEnvironment = lib.optionalAttrs buildAndroid rec {
- ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk";
- ANDROID_NDK_ROOT = "${ANDROID_SDK_ROOT}/ndk-bundle";
- GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${ANDROID_SDK_ROOT}/build-tools/${buildToolsVersion}/aapt2";
- };
-in
-stdenv.mkDerivation (androidEnvironment // {
- name = "servo-env";
-
- buildInputs = [
- # Native dependencies
- fontconfig freetype libunwind
- xorg.libxcb
- xorg.libX11
-
- 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
-
- rustup
- taplo
- cargo-deny
- llvmPackages.bintools # provides lld
-
- udev # Needed by libudev-sys for GamePad API.
-
- # Build utilities
- cmake dbus gcc git pkg-config which llvm perl yasm m4
- (python3.withPackages (ps: with ps; [virtualenv pip dbus]))
-
- # This pins gnumake to 4.3 since 4.4 breaks jobserver
- # functionality in mozjs and causes builds to be extremely
- # slow as it behaves as if -j1 was passed.
- # See https://github.com/servo/mozjs/issues/375
- pkgs_gnumake_4_3.gnumake
-
- (rustPlatform.buildRustPackage {
- name = "crown";
- src = ../support/crown;
- doCheck = false;
- cargoLock = {
- # crown is not in our Cargo workspace, so this only pulls crown and crown’s dependencies
- # into the Nix store, not Servo and Servo’s dependencies.
- lockFile = ../support/crown/Cargo.lock;
- };
- RUSTC_BOOTSTRAP = "crown";
- })
- ] ++ (lib.optionals stdenv.isDarwin [
- darwin.apple_sdk.frameworks.AppKit
- ]) ++ (lib.optionals buildAndroid [
- # for android builds
- openjdk17_headless
- androidSdk
- ]);
-
- LIBCLANG_PATH = lib.makeLibraryPath [ llvmPackages.clang-unwrapped.lib ];
-
- # Allow cargo to download crates
- SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
-
- # Enable colored cargo and rustc output
- TERMINFO = "${ncurses.out}/share/terminfo";
-
-
- # Provide libraries that aren’t linked against but somehow required
- LD_LIBRARY_PATH = lib.makeLibraryPath [
- # Fixes missing library errors
- xorg.libXcursor xorg.libXrandr xorg.libXi libxkbcommon
-
- # [WARN script::dom::gpu] Could not get GPUAdapter ("NotFound")
- # TLA Err: Error: Couldn't request WebGPU adapter.
- vulkan-loader
- ];
-
- shellHook = ''
- # Fix invalid option errors during linking
- # https://github.com/mozilla/nixpkgs-mozilla/commit/c72ff151a3e25f14182569679ed4cd22ef352328
- unset AS
-
- # Compiling programs under Nix sets the interpreter (ELF INTERP) and rpath (ELF DT_RUNPATH [1])
- # to ensure that it can find the needed (ELF DT_NEEDED) libraries in the Nix store.
- #
- # This is good on NixOS, but bad everywhere else. Using the Nix interpreter makes the programs
- # dependent on the Nix store, making them impossible to distribute and run on other machines
- # without `nix bundle`. Even on the same machine, the program will crash in a variety of ways
- # because of the “OpenGL problem” [2] and other mismatches in X11 and Wayland libraries. Worse
- # still, it makes everyone else suffer the problems NixOS has, like needing $LD_LIBRARY_PATH
- # (see above) and needing to disable rust-lld (servo#30123).
- #
- # We can make the programs independent of Nix by resetting $NIX_DYNAMIC_LINKER to the system
- # interpreter, setting $NIX_DONT_SET_RPATH to prevent the clang and ld wrappers from adding
- # -rpath options to $NIX_LDFLAGS [3][4], and removing any -rpath options that get added by
- # clangStdenv despite $NIX_DONT_SET_RPATH.
- #
- # This is comparable to fixing target/*/servo after the fact with:
- #
- # patchelf --remove-rpath --set-interpreter $(patchelf --print-interpreter /usr/bin/env)
- #
- # [1] DT_RPATH breaks LD_LIBRARY_PATH and is no longer used
- # https://medium.com/obscure-system/rpath-vs-runpath-883029b17c45
- # [2] “Using Nix on non-NixOS distros, it’s common to see GL application errors:”
- # https://github.com/nix-community/nixGL
- # [3] https://ryantm.github.io/nixpkgs/stdenv/stdenv/#bintools-wrapper
- # [4] https://matklad.github.io/2022/03/14/rpath-or-why-lld-doesnt-work-on-nixos.html
- if ! [ -e /etc/NIXOS ]; then
- set -- $NIX_LDFLAGS
- for i; do
- shift
- if [ "$i" = -rpath ]; then
- shift
- else
- set -- "$@" "$i"
- fi
- done
- export NIX_DYNAMIC_LINKER=$(patchelf --print-interpreter /usr/bin/env)
- export NIX_DONT_SET_RPATH=1
- export NIX_LDFLAGS="$@"
-
- # Don’t pollute ~/.rustup with toolchains installed by nixpkgs rustup, because they
- # get patched in a way that makes them dependent on the Nix store.
- repo_root=$(git rev-parse --show-toplevel)
- export RUSTUP_HOME=$repo_root/.rustup
- fi
- '';
-})
+../shell.nix \ No newline at end of file
diff --git a/shell.nix b/shell.nix
index 16e63ef6389..2576e0e454f 120000..100644
--- a/shell.nix
+++ b/shell.nix
@@ -1 +1,183 @@
-etc/shell.nix \ No newline at end of file
+# This provides a shell with all the necesarry packages required to run mach and build servo
+# NOTE: This does not work offline or for nix-build
+
+{
+ buildAndroid ? false
+}:
+with import (builtins.fetchTarball {
+ url = "https://github.com/NixOS/nixpkgs/archive/d04953086551086b44b6f3c6b7eeb26294f207da.tar.gz";
+}) {
+ overlays = [
+ (import (builtins.fetchTarball {
+ # Bumped the channel in rust-toolchain.toml? Bump this commit too!
+ url = "https://github.com/oxalica/rust-overlay/archive/65e3dc0fe079fe8df087cd38f1fe6836a0373aad.tar.gz";
+ }))
+ ];
+ config = {
+ android_sdk.accept_license = buildAndroid;
+ allowUnfree = buildAndroid;
+ };
+};
+let
+ rustToolchain = rust-bin.fromRustupToolchainFile ./rust-toolchain.toml;
+ rustPlatform = makeRustPlatform {
+ cargo = rustToolchain;
+ rustc = rustToolchain;
+ };
+ pkgs_gnumake_4_3 = import (builtins.fetchTarball {
+ url = "https://github.com/NixOS/nixpkgs/archive/6adf48f53d819a7b6e15672817fa1e78e5f4e84f.tar.gz";
+ }) {};
+
+ # We need clangStdenv with:
+ # - clang < 16 (#30587)
+ # - clang < 15 (#31059)
+ # - glibc 2.38 (#31054)
+ llvmPackages = llvmPackages_14;
+ stdenv = llvmPackages.stdenv;
+
+ buildToolsVersion = "34.0.0";
+ androidComposition = androidenv.composeAndroidPackages {
+ buildToolsVersions = [ buildToolsVersion ];
+ includeEmulator = true;
+ platformVersions = [ "33" ];
+ includeSources = false;
+ includeSystemImages = true;
+ systemImageTypes = [ "google_apis" ];
+ abiVersions = [ "x86" "armeabi-v7a" ];
+ includeNDK = true;
+ ndkVersion = "26.2.11394342";
+ useGoogleAPIs = false;
+ useGoogleTVAddOns = false;
+ includeExtras = [
+ "extras;google;gcm"
+ ];
+ };
+ androidSdk = androidComposition.androidsdk;
+ # Required by ./mach build --android
+ androidEnvironment = lib.optionalAttrs buildAndroid rec {
+ ANDROID_SDK_ROOT = "${androidSdk}/libexec/android-sdk";
+ ANDROID_NDK_ROOT = "${ANDROID_SDK_ROOT}/ndk-bundle";
+ GRADLE_OPTS = "-Dorg.gradle.project.android.aapt2FromMavenOverride=${ANDROID_SDK_ROOT}/build-tools/${buildToolsVersion}/aapt2";
+ };
+in
+stdenv.mkDerivation (androidEnvironment // {
+ name = "servo-env";
+
+ buildInputs = [
+ # Native dependencies
+ fontconfig freetype libunwind
+ xorg.libxcb
+ xorg.libX11
+
+ 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
+
+ rustup
+ taplo
+ cargo-deny
+ llvmPackages.bintools # provides lld
+
+ udev # Needed by libudev-sys for GamePad API.
+
+ # Build utilities
+ cmake dbus gcc git pkg-config which llvm perl yasm m4
+ (python3.withPackages (ps: with ps; [virtualenv pip dbus]))
+
+ # This pins gnumake to 4.3 since 4.4 breaks jobserver
+ # functionality in mozjs and causes builds to be extremely
+ # slow as it behaves as if -j1 was passed.
+ # See https://github.com/servo/mozjs/issues/375
+ pkgs_gnumake_4_3.gnumake
+
+ (rustPlatform.buildRustPackage {
+ name = "crown";
+ src = ./support/crown;
+ doCheck = false;
+ cargoLock = {
+ # crown is not in our Cargo workspace, so this only pulls crown and crown’s dependencies
+ # into the Nix store, not Servo and Servo’s dependencies.
+ lockFile = ./support/crown/Cargo.lock;
+ };
+ RUSTC_BOOTSTRAP = "crown";
+ })
+ ] ++ (lib.optionals stdenv.isDarwin [
+ darwin.apple_sdk.frameworks.AppKit
+ ]) ++ (lib.optionals buildAndroid [
+ # for android builds
+ openjdk17_headless
+ androidSdk
+ ]);
+
+ LIBCLANG_PATH = lib.makeLibraryPath [ llvmPackages.clang-unwrapped.lib ];
+
+ # Allow cargo to download crates
+ SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
+
+ # Enable colored cargo and rustc output
+ TERMINFO = "${ncurses.out}/share/terminfo";
+
+
+ # Provide libraries that aren’t linked against but somehow required
+ LD_LIBRARY_PATH = lib.makeLibraryPath [
+ # Fixes missing library errors
+ xorg.libXcursor xorg.libXrandr xorg.libXi libxkbcommon
+
+ # [WARN script::dom::gpu] Could not get GPUAdapter ("NotFound")
+ # TLA Err: Error: Couldn't request WebGPU adapter.
+ vulkan-loader
+ ];
+
+ shellHook = ''
+ # Fix invalid option errors during linking
+ # https://github.com/mozilla/nixpkgs-mozilla/commit/c72ff151a3e25f14182569679ed4cd22ef352328
+ unset AS
+
+ # Compiling programs under Nix sets the interpreter (ELF INTERP) and rpath (ELF DT_RUNPATH [1])
+ # to ensure that it can find the needed (ELF DT_NEEDED) libraries in the Nix store.
+ #
+ # This is good on NixOS, but bad everywhere else. Using the Nix interpreter makes the programs
+ # dependent on the Nix store, making them impossible to distribute and run on other machines
+ # without `nix bundle`. Even on the same machine, the program will crash in a variety of ways
+ # because of the “OpenGL problem” [2] and other mismatches in X11 and Wayland libraries. Worse
+ # still, it makes everyone else suffer the problems NixOS has, like needing $LD_LIBRARY_PATH
+ # (see above) and needing to disable rust-lld (servo#30123).
+ #
+ # We can make the programs independent of Nix by resetting $NIX_DYNAMIC_LINKER to the system
+ # interpreter, setting $NIX_DONT_SET_RPATH to prevent the clang and ld wrappers from adding
+ # -rpath options to $NIX_LDFLAGS [3][4], and removing any -rpath options that get added by
+ # clangStdenv despite $NIX_DONT_SET_RPATH.
+ #
+ # This is comparable to fixing target/*/servo after the fact with:
+ #
+ # patchelf --remove-rpath --set-interpreter $(patchelf --print-interpreter /usr/bin/env)
+ #
+ # [1] DT_RPATH breaks LD_LIBRARY_PATH and is no longer used
+ # https://medium.com/obscure-system/rpath-vs-runpath-883029b17c45
+ # [2] “Using Nix on non-NixOS distros, it’s common to see GL application errors:”
+ # https://github.com/nix-community/nixGL
+ # [3] https://ryantm.github.io/nixpkgs/stdenv/stdenv/#bintools-wrapper
+ # [4] https://matklad.github.io/2022/03/14/rpath-or-why-lld-doesnt-work-on-nixos.html
+ if ! [ -e /etc/NIXOS ]; then
+ set -- $NIX_LDFLAGS
+ for i; do
+ shift
+ if [ "$i" = -rpath ]; then
+ shift
+ else
+ set -- "$@" "$i"
+ fi
+ done
+ export NIX_DYNAMIC_LINKER=$(patchelf --print-interpreter /usr/bin/env)
+ export NIX_DONT_SET_RPATH=1
+ export NIX_LDFLAGS="$@"
+
+ # Don’t pollute ~/.rustup with toolchains installed by nixpkgs rustup, because they
+ # get patched in a way that makes them dependent on the Nix store.
+ repo_root=$(git rev-parse --show-toplevel)
+ export RUSTUP_HOME=$repo_root/.rustup
+ fi
+ '';
+})