From 40eea21c1e7baf2ec02fbc5cf0a58805371c3ef4 Mon Sep 17 00:00:00 2001 From: Ihar Hrachyshka Date: Mon, 27 Oct 2025 21:57:14 -0400 Subject: [PATCH] buildMozillaMach: use llvmPackages_20 on aarch64-darwin There's a bug in llvm 21 that makes Firefox crash on loading a PNG favicon that is being investigated in Mozilla bug tracker: https://bugzilla.mozilla.org/show_bug.cgi?id=1995582 While this is being fixed, switch to llvmPackages_20 for aarch64-darwin. (x86_64-darwin is not affected.) Note: this change will also affect Thunderbird. Though strictly speaking not a required change because we are not aware of a specific issue with Thunderbird (yet), I feel we may want to stick to the same LLVM for both types of Mozilla apps while this is being investigated. It also simplifies the code somewhat. Fixes #453372 --- .../build-mozilla-mach/default.nix | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/pkgs/build-support/build-mozilla-mach/default.nix b/pkgs/build-support/build-mozilla-mach/default.nix index e484f6b0bde2..c192b9eb97f3 100644 --- a/pkgs/build-support/build-mozilla-mach/default.nix +++ b/pkgs/build-support/build-mozilla-mach/default.nix @@ -58,9 +58,7 @@ in pkgsCross, # wasm32 rlbox python3, runCommand, - rustc, rust-cbindgen, - rustPlatform, unzip, which, wrapGAppsHook3, @@ -201,9 +199,25 @@ assert elfhackSupport -> isElfhackPlatform stdenv; let inherit (lib) enableFeature; + rustPackages = + pkgs: + (pkgs.rust.override ( + # aarch64-darwin firefox crashes on loading favicons due to a llvm 21 bug: + # https://github.com/NixOS/nixpkgs/issues/453372 + # https://bugzilla.mozilla.org/show_bug.cgi?id=1995582#c16 + lib.optionalAttrs (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64) { + llvmPackages = pkgs.llvmPackages_20; + } + )).packages.stable; + + toRustC = pkgs: (rustPackages pkgs).rustc; + + rustc = toRustC pkgs; + inherit (rustPackages pkgs) rustPlatform; + # Target the LLVM version that rustc is built with for LTO. llvmPackages0 = rustc.llvmPackages; - llvmPackagesBuildBuild0 = pkgsBuildBuild.rustc.llvmPackages; + llvmPackagesBuildBuild0 = (toRustC pkgsBuildBuild).llvmPackages; # Force the use of lld and other llvm tools for LTO llvmPackages = llvmPackages0.override { @@ -218,7 +232,7 @@ let # LTO requires LLVM bintools including ld.lld and llvm-ar. buildStdenv = overrideCC llvmPackages.stdenv ( llvmPackages.stdenv.cc.override { - bintools = if ltoSupport then buildPackages.rustc.llvmPackages.bintools else stdenv.cc.bintools; + bintools = if ltoSupport then (toRustC buildPackages).llvmPackages.bintools else stdenv.cc.bintools; } );