reducing text exclusions #85
No files matched your search
@@ -0,0 +1,20 @@
|
|||||||
|
Subject: [PATCH] abseil: include BMI2 intrinsics through the public header
|
||||||
|
|
||||||
|
GCC and Clang reject direct inclusion of bmi2intrin.h. Include immintrin.h
|
||||||
|
instead so that the compiler supplies the required intrinsic setup when
|
||||||
|
BMI2 is enabled, including builds targeting x86-64-v3.
|
||||||
|
|
||||||
|
This patch is shared by the vendored Abseil copies in Electron, rusty_v8
|
||||||
|
(Deno), and Signal's WebRTC build.
|
||||||
|
|
||||||
|
--- a/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h
|
||||||
|
+++ b/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h
|
||||||
|
@@ -226,7 +226,7 @@
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __BMI2__
|
||||||
|
-#include <bmi2intrin.h>
|
||||||
|
+#include <immintrin.h>
|
||||||
|
#endif // __BMI2__
|
||||||
|
|
||||||
|
namespace absl {
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# Abseil accepted the upstream fix: https://github.com/abseil/abseil-cpp/pull/2071
|
||||||
|
# Keep this workaround until Electron, Deno's rusty_v8, and Signal's WebRTC
|
||||||
|
# update their bundled Abseil copies to include it.
|
||||||
|
{ prev }:
|
||||||
|
let
|
||||||
|
patchAbseilBmi2Include =
|
||||||
|
package:
|
||||||
|
package.overrideAttrs (old: {
|
||||||
|
# GCC and Clang require the public umbrella header for BMI2 intrinsics.
|
||||||
|
patches = (old.patches or [ ]) ++ [ ./bmi2-public-header.patch ];
|
||||||
|
});
|
||||||
|
|
||||||
|
electron43Unwrapped = patchAbseilBmi2Include prev.electron_43.unwrapped;
|
||||||
|
electron43 = prev.electron_43.override {
|
||||||
|
electron-unwrapped = electron43Unwrapped;
|
||||||
|
};
|
||||||
|
|
||||||
|
signalCallPackage =
|
||||||
|
path: args:
|
||||||
|
let
|
||||||
|
package = prev.callPackage path args;
|
||||||
|
in
|
||||||
|
if builtins.baseNameOf path == "webrtc.nix" then patchAbseilBmi2Include package else package;
|
||||||
|
in
|
||||||
|
prev.lib.optionalAttrs ((prev.stdenv.hostPlatform.gcc.arch or null) == "x86-64-v3") {
|
||||||
|
deno =
|
||||||
|
let
|
||||||
|
librusty_v8 = patchAbseilBmi2Include prev.deno.passthru.librusty_v8;
|
||||||
|
in
|
||||||
|
prev.deno.override { inherit librusty_v8; };
|
||||||
|
|
||||||
|
electron_43 = electron43;
|
||||||
|
|
||||||
|
signal-desktop = prev.signal-desktop.override {
|
||||||
|
electron_43 = electron43;
|
||||||
|
callPackage = signalCallPackage;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,9 +1,12 @@
|
|||||||
_final: prev: {
|
_final: prev:
|
||||||
|
(import ./abseil { inherit prev; })
|
||||||
|
// {
|
||||||
gnutls = import ./gnutls { inherit (prev) gnutls; };
|
gnutls = import ./gnutls { inherit (prev) gnutls; };
|
||||||
|
|
||||||
pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [
|
pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [
|
||||||
(_pythonFinal: pythonPrev: {
|
(_pythonFinal: pythonPrev: {
|
||||||
scipy = import ./scipy { inherit (pythonPrev) scipy; };
|
scipy = import ./scipy { inherit (pythonPrev) scipy; };
|
||||||
|
torchcodec = import ./torchcodec { inherit (pythonPrev) torchcodec; };
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -1,22 +1,6 @@
|
|||||||
# Compatibility fixes for packages rebuilt with x86-64-v3.
|
# Output-validation workarounds for packages rebuilt with x86-64-v3.
|
||||||
#
|
|
||||||
# The v3 baseline enables instructions that expose source assumptions hidden
|
|
||||||
# by the generic x86-64 build. Keep compile fixes here, separate from test
|
|
||||||
# exclusions, until upstream or nixpkgs incorporates them.
|
|
||||||
_final: prev:
|
_final: prev:
|
||||||
let
|
let
|
||||||
patchAbseilBmi2Include =
|
|
||||||
package:
|
|
||||||
package.overrideAttrs (old: {
|
|
||||||
# GCC and Clang prohibit including their internal BMI2 header directly.
|
|
||||||
# The public umbrella provides the same intrinsics with the required
|
|
||||||
# compiler setup.
|
|
||||||
postPatch = (old.postPatch or "") + ''
|
|
||||||
substituteInPlace third_party/abseil-cpp/absl/container/internal/raw_hash_set.h \
|
|
||||||
--replace-fail "#include <bmi2intrin.h>" "#include <immintrin.h>"
|
|
||||||
'';
|
|
||||||
});
|
|
||||||
|
|
||||||
removeSiblingOutputChecks =
|
removeSiblingOutputChecks =
|
||||||
package:
|
package:
|
||||||
package.overrideAttrs (old: {
|
package.overrideAttrs (old: {
|
||||||
@@ -29,32 +13,8 @@ let
|
|||||||
) (old.outputChecks or { });
|
) (old.outputChecks or { });
|
||||||
});
|
});
|
||||||
|
|
||||||
electron43Unwrapped = patchAbseilBmi2Include prev.electron_43.unwrapped;
|
|
||||||
electron43 = prev.electron_43.override {
|
|
||||||
electron-unwrapped = electron43Unwrapped;
|
|
||||||
};
|
|
||||||
|
|
||||||
signalCallPackage =
|
|
||||||
path: args:
|
|
||||||
let
|
|
||||||
package = prev.callPackage path args;
|
|
||||||
in
|
|
||||||
if builtins.baseNameOf path == "webrtc.nix" then patchAbseilBmi2Include package else package;
|
|
||||||
in
|
in
|
||||||
prev.lib.optionalAttrs ((prev.stdenv.hostPlatform.gcc.arch or null) == "x86-64-v3") {
|
prev.lib.optionalAttrs ((prev.stdenv.hostPlatform.gcc.arch or null) == "x86-64-v3") {
|
||||||
deno =
|
|
||||||
let
|
|
||||||
librusty_v8 = patchAbseilBmi2Include prev.deno.passthru.librusty_v8;
|
|
||||||
in
|
|
||||||
prev.deno.override { inherit librusty_v8; };
|
|
||||||
|
|
||||||
electron_43 = electron43;
|
|
||||||
|
|
||||||
postgresql = removeSiblingOutputChecks prev.postgresql;
|
postgresql = removeSiblingOutputChecks prev.postgresql;
|
||||||
postgresql_18 = removeSiblingOutputChecks prev.postgresql_18;
|
postgresql_18 = removeSiblingOutputChecks prev.postgresql_18;
|
||||||
|
|
||||||
signal-desktop = prev.signal-desktop.override {
|
|
||||||
electron_43 = electron43;
|
|
||||||
callPackage = signalCallPackage;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user