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
60 lines
2.5 KiB
Markdown
60 lines
2.5 KiB
Markdown
# 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:
|
|
|
|
```sh
|
|
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](https://github.com/abseil/abseil-cpp/pull/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`](../default.nix) merges this directory's overlay fragment
|
|
because it repairs multiple packages. From the repository root, the consumer
|
|
build commands are:
|
|
|
|
```sh
|
|
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.
|