From c514f72fb9726e9f209e3eb11e456a1552d29cb8 Mon Sep 17 00:00:00 2001 From: Colin Date: Sun, 6 Jul 2025 04:56:53 +0000 Subject: [PATCH 1/4] signal-desktop.webrtc: fix cross compilation all the new flags here were copied from nixpkgs' chromium package, at pkgs/applications/networking/browsers/chromium/common.nix. --- pkgs/by-name/si/signal-desktop/webrtc.nix | 38 ++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/pkgs/by-name/si/signal-desktop/webrtc.nix b/pkgs/by-name/si/signal-desktop/webrtc.nix index 51cdca0cfde5..fb40b250e1f5 100644 --- a/pkgs/by-name/si/signal-desktop/webrtc.nix +++ b/pkgs/by-name/si/signal-desktop/webrtc.nix @@ -1,6 +1,7 @@ { stdenv, lib, + buildPackages, ninja, gn, python3, @@ -13,6 +14,24 @@ rustc, }: +let + chromiumRosettaStone = { + cpu = + platform: + let + name = platform.parsed.cpu.name; + in + ( + { + "x86_64" = "x64"; + "i686" = "x86"; + "arm" = "arm"; + "aarch64" = "arm64"; + } + .${name} or (throw "no chromium Rosetta Stone entry for cpu: ${name}") + ); + }; +in stdenv.mkDerivation (finalAttrs: { pname = "signal-webrtc"; version = finalAttrs.gclientDeps."src".path.rev; @@ -59,7 +78,11 @@ stdenv.mkDerivation (finalAttrs: { ''; gnFlags = [ + # webrtc uses chromium's `src/build/BUILDCONFIG.gn`. many of these flags + # are copied from pkgs/applications/networking/browsers/chromium/common.nix. ''target_os="linux"'' + ''target_cpu="${chromiumRosettaStone.cpu stdenv.hostPlatform}"'' + ''pkg_config="${stdenv.cc.targetPrefix}pkg-config"'' "use_sysroot=false" "is_clang=false" "treat_warnings_as_errors=false" @@ -78,7 +101,20 @@ stdenv.mkDerivation (finalAttrs: { "rtc_include_tests=false" "rtc_enable_protobuf=false" - ''rust_sysroot_absolute="${rustc}"'' + ''rust_sysroot_absolute="${buildPackages.rustc}"'' + + # Build using the system toolchain (for Linux distributions): + # + # What you would expect to be called "target_toolchain" is + # actually called either "default_toolchain" or "custom_toolchain", + # depending on which part of the codebase you are in; see: + # https://chromium.googlesource.com/chromium/src/build/+/3c4595444cc6d514600414e468db432e0f05b40f/config/BUILDCONFIG.gn#17 + ''custom_toolchain="//build/toolchain/linux/unbundle:default"'' + ''host_toolchain="//build/toolchain/linux/unbundle:default"'' + ] + ++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [ + ''host_toolchain="//build/toolchain/linux/unbundle:host"'' + ''v8_snapshot_toolchain="//build/toolchain/linux/unbundle:host"'' ]; ninjaFlags = [ "webrtc" ]; From a6612a54c8c4feb0c41391fcaf3fb9241fc366f7 Mon Sep 17 00:00:00 2001 From: Colin Date: Sun, 6 Jul 2025 06:07:55 +0000 Subject: [PATCH 2/4] signal-desktop.libsignal-node: fix cross compilation --- pkgs/by-name/si/signal-desktop/libsignal-node.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/by-name/si/signal-desktop/libsignal-node.nix b/pkgs/by-name/si/signal-desktop/libsignal-node.nix index bf3b6ecf3536..b3b13c42c954 100644 --- a/pkgs/by-name/si/signal-desktop/libsignal-node.nix +++ b/pkgs/by-name/si/signal-desktop/libsignal-node.nix @@ -70,7 +70,9 @@ rustPlatform.buildRustPackage (finalAttrs: { substituteInPlace node/build_node_bridge.py \ --replace-fail "dst_base = 'libsignal_client_%s_%s' % (node_os_name, node_arch)" \ - "dst_base = '@signalapp+libsignal-client'" + "dst_base = '@signalapp+libsignal-client'" \ + --replace-fail "objcopy = shutil.which('%s-linux-gnu-objcopy' % cargo_target.split('-')[0]) or 'objcopy'" \ + "objcopy = os.getenv('OBJCOPY', 'objcopy')" ''; buildPhase = '' From 335dffc2bd5b9268f9f0cc263d12b5092603a996 Mon Sep 17 00:00:00 2001 From: Colin Date: Sun, 6 Jul 2025 07:01:07 +0000 Subject: [PATCH 3/4] signal-desktop.signal-sqlcipher: fix cross compilation --- pkgs/by-name/si/signal-desktop/signal-sqlcipher.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/by-name/si/signal-desktop/signal-sqlcipher.nix b/pkgs/by-name/si/signal-desktop/signal-sqlcipher.nix index 99a8b79b90a1..98f05e16a1f9 100644 --- a/pkgs/by-name/si/signal-desktop/signal-sqlcipher.nix +++ b/pkgs/by-name/si/signal-desktop/signal-sqlcipher.nix @@ -47,7 +47,7 @@ stdenv.mkDerivation (finalAttrs: { runHook preBuild export npm_config_nodedir=${nodejs} - pnpm run prebuildify + pnpm run prebuildify --strip false --arch "${stdenv.hostPlatform.node.arch}" --platform "${stdenv.hostPlatform.node.platform}" pnpm run build runHook postBuild From 88660079433d66ae42d6f1c5c781153e1a07e1ed Mon Sep 17 00:00:00 2001 From: Colin Date: Mon, 7 Jul 2025 09:22:34 +0000 Subject: [PATCH 4/4] signal-desktop: fix cross compilation --- pkgs/by-name/si/signal-desktop/package.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/by-name/si/signal-desktop/package.nix b/pkgs/by-name/si/signal-desktop/package.nix index 0df70c12eafb..cf16b334b8a9 100644 --- a/pkgs/by-name/si/signal-desktop/package.nix +++ b/pkgs/by-name/si/signal-desktop/package.nix @@ -199,7 +199,7 @@ stdenv.mkDerivation (finalAttrs: { pnpm run generate pnpm exec electron-builder \ - --dir \ + --linux "dir:${stdenv.hostPlatform.node.arch}" \ --config.extraMetadata.environment=$SIGNAL_ENV \ -c.electronDist=electron-dist \ -c.electronVersion=${electron.version}