Files
dotfiles/overlays/patches/abseil/README.md
T
Richie 50d4aa383f
treefmt / nix fmt (pull_request) Successful in 3s
test ebook search / test-ebook-search (pull_request) Failing after 8h50m21s
pytest / pytest (pull_request) Failing after 8h50m22s
build_systems / build-rhapsody-in-green (pull_request) Failing after 8h50m23s
build_systems / build-portal-1 (pull_request) Failing after 8h50m24s
build_systems / build-jeeves (pull_request) Failing after 8h50m24s
build_systems / build-brain (pull_request) Failing after 8h50m24s
build_systems / build-bob (pull_request) Failing after 8h50m24s
Clean up overlays and remove obsolete dependencies
2026-09-18 19:59:12 -04:00

2.5 KiB

Abseil BMI2 public header

Vendored Abseil includes bmi2intrin.h directly when __BMI2__ is enabled. Compilers reject that internal header without the umbrella-header setup. bmi2-public-header.patch includes immintrin.h instead, allowing builds that enable BMI2 through -march=x86-64-v3.

Scope and behavior

The patch changes one include in third_party/abseil-cpp/absl/container/internal/raw_hash_set.h. default.nix applies it to Electron 43's unwrapped package, Deno's librusty_v8, and Signal's WebRTC dependency. It also supplies the patched Electron package to Signal. These overrides apply only to x86-64-v3.

The shared file path is relative to each vendoring project's source root, not the root of a standalone Abseil checkout. No hash-table algorithm or test exclusion changes.

Reproduction and focused checks

From this directory, check and apply the patch to each vendored source tree:

patch --dry-run --fuzz=0 -d /path/to/vendor-source -p1 < bmi2-public-header.patch
patch --fuzz=0 -d /path/to/vendor-source -p1 < bmi2-public-header.patch

A small compiler check isolates the header requirement. With GCC or Clang on x86-64, compile #include <bmi2intrin.h> using -march=x86-64-v3; the compiler rejects the direct include. Changing it to #include <immintrin.h> should compile. The full consumer builds below check integration with their actual toolchains.

Upstream status

Abseil addressed this issue through PR #2071, imported by its upstream workflow. That change uses x86gprintrin.h; this local variant uses the public immintrin.h umbrella header for the vendored toolchains. Keep the workaround until all three bundled copies include a compatible fix. This file is a local adaptation, not a verbatim copy of the upstream diff.

Local NixOS integration and build results

../default.nix merges this directory's overlay fragment because it repairs multiple packages. From the repository root, the consumer build commands are:

nix build --no-link -L .#nixosConfigurations.jeeves.pkgs.deno
nix build --no-link -L .#nixosConfigurations.jeeves.pkgs.electron_43
nix build --no-link -L .#nixosConfigurations.jeeves.pkgs.signal-desktop

The earlier extraction checked the vendored header snapshots and evaluated all three patch attachments. Those records do not establish successful full consumer rebuilds. No new compiler or consumer build was run for the layout change; the patch and override are unchanged.