mirror of
https://github.com/NixOS/nix.git
synced 2025-11-09 03:56:01 +01:00
packaging: Add withASan,withUBSan options to the scope
This commit is contained in:
parent
199b6ff3fb
commit
a491173369
2 changed files with 36 additions and 13 deletions
|
|
@ -23,16 +23,6 @@ let
|
||||||
packages' = nixFlake.packages.${system};
|
packages' = nixFlake.packages.${system};
|
||||||
stdenv = (getStdenv pkgs);
|
stdenv = (getStdenv pkgs);
|
||||||
|
|
||||||
enableSanitizersLayer = finalAttrs: prevAttrs: {
|
|
||||||
mesonFlags =
|
|
||||||
(prevAttrs.mesonFlags or [ ])
|
|
||||||
++ [ (lib.mesonOption "b_sanitize" "address,undefined") ]
|
|
||||||
++ (lib.optionals stdenv.cc.isClang [
|
|
||||||
# https://www.github.com/mesonbuild/meson/issues/764
|
|
||||||
(lib.mesonBool "b_lundef" false)
|
|
||||||
]);
|
|
||||||
};
|
|
||||||
|
|
||||||
collectCoverageLayer = finalAttrs: prevAttrs: {
|
collectCoverageLayer = finalAttrs: prevAttrs: {
|
||||||
env =
|
env =
|
||||||
let
|
let
|
||||||
|
|
@ -55,14 +45,15 @@ let
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
componentOverrides =
|
componentOverrides = (lib.optional withCoverage collectCoverageLayer);
|
||||||
(lib.optional withSanitizers enableSanitizersLayer)
|
|
||||||
++ (lib.optional withCoverage collectCoverageLayer);
|
|
||||||
in
|
in
|
||||||
|
|
||||||
rec {
|
rec {
|
||||||
nixComponentsInstrumented = nixComponents.overrideScope (
|
nixComponentsInstrumented = nixComponents.overrideScope (
|
||||||
final: prev: {
|
final: prev: {
|
||||||
|
withASan = withSanitizers;
|
||||||
|
withUBSan = withSanitizers;
|
||||||
|
|
||||||
nix-store-tests = prev.nix-store-tests.override { withBenchmarks = true; };
|
nix-store-tests = prev.nix-store-tests.override { withBenchmarks = true; };
|
||||||
# Boehm is incompatible with ASAN.
|
# Boehm is incompatible with ASAN.
|
||||||
nix-expr = prev.nix-expr.override { enableGC = !withSanitizers; };
|
nix-expr = prev.nix-expr.override { enableGC = !withSanitizers; };
|
||||||
|
|
|
||||||
|
|
@ -204,6 +204,25 @@ let
|
||||||
mesonFlags = [ (lib.mesonBool "b_asneeded" false) ] ++ prevAttrs.mesonFlags or [ ];
|
mesonFlags = [ (lib.mesonBool "b_asneeded" false) ] ++ prevAttrs.mesonFlags or [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enableSanitizersLayer =
|
||||||
|
finalAttrs: prevAttrs:
|
||||||
|
let
|
||||||
|
sanitizers = lib.optional scope.withASan "address" ++ lib.optional scope.withUBSan "undefined";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
mesonFlags =
|
||||||
|
(prevAttrs.mesonFlags or [ ])
|
||||||
|
++ lib.optionals (lib.length sanitizers > 0) (
|
||||||
|
[
|
||||||
|
(lib.mesonOption "b_sanitize" (lib.concatStringsSep "," sanitizers))
|
||||||
|
]
|
||||||
|
++ (lib.optionals stdenv.cc.isClang [
|
||||||
|
# https://www.github.com/mesonbuild/meson/issues/764
|
||||||
|
(lib.mesonBool "b_lundef" false)
|
||||||
|
])
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
nixDefaultsLayer = finalAttrs: prevAttrs: {
|
nixDefaultsLayer = finalAttrs: prevAttrs: {
|
||||||
strictDeps = prevAttrs.strictDeps or true;
|
strictDeps = prevAttrs.strictDeps or true;
|
||||||
enableParallelBuilding = true;
|
enableParallelBuilding = true;
|
||||||
|
|
@ -246,6 +265,16 @@ in
|
||||||
|
|
||||||
inherit filesetToSource;
|
inherit filesetToSource;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Whether meson components are built with [AddressSanitizer](https://clang.llvm.org/docs/AddressSanitizer.html).
|
||||||
|
*/
|
||||||
|
withASan = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Whether meson components are built with [UndefinedBehaviorSanitizer](https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html).
|
||||||
|
*/
|
||||||
|
withUBSan = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
A user-provided extension function to apply to each component derivation.
|
A user-provided extension function to apply to each component derivation.
|
||||||
*/
|
*/
|
||||||
|
|
@ -332,6 +361,7 @@ in
|
||||||
setVersionLayer
|
setVersionLayer
|
||||||
mesonLayer
|
mesonLayer
|
||||||
fixupStaticLayer
|
fixupStaticLayer
|
||||||
|
enableSanitizersLayer
|
||||||
scope.mesonComponentOverrides
|
scope.mesonComponentOverrides
|
||||||
];
|
];
|
||||||
mkMesonExecutable = mkPackageBuilder [
|
mkMesonExecutable = mkPackageBuilder [
|
||||||
|
|
@ -342,6 +372,7 @@ in
|
||||||
mesonLayer
|
mesonLayer
|
||||||
mesonBuildLayer
|
mesonBuildLayer
|
||||||
fixupStaticLayer
|
fixupStaticLayer
|
||||||
|
enableSanitizersLayer
|
||||||
scope.mesonComponentOverrides
|
scope.mesonComponentOverrides
|
||||||
];
|
];
|
||||||
mkMesonLibrary = mkPackageBuilder [
|
mkMesonLibrary = mkPackageBuilder [
|
||||||
|
|
@ -353,6 +384,7 @@ in
|
||||||
mesonBuildLayer
|
mesonBuildLayer
|
||||||
mesonLibraryLayer
|
mesonLibraryLayer
|
||||||
fixupStaticLayer
|
fixupStaticLayer
|
||||||
|
enableSanitizersLayer
|
||||||
scope.mesonComponentOverrides
|
scope.mesonComponentOverrides
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue