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.