mirror of
https://github.com/NixOS/nix.git
synced 2025-12-09 18:41:03 +01:00
Enables builds with ASAN to catch memory corruption
bugs faster and in CI. This is an incredibly valuable
instrument that must be used as much as possible.
Somewhat based on jade's work from Lix, though there's a lot that
we have to do differently:
19ae87e5ce
Co-authored-by: Jade Lovelace <lix@jade.fyi>
106 lines
2.4 KiB
Nix
106 lines
2.4 KiB
Nix
{
|
|
lib,
|
|
buildPackages,
|
|
stdenv,
|
|
mkMesonExecutable,
|
|
writableTmpDirAsHomeHook,
|
|
|
|
nix-store,
|
|
nix-store-c,
|
|
nix-store-test-support,
|
|
sqlite,
|
|
|
|
rapidcheck,
|
|
gtest,
|
|
gbenchmark,
|
|
runCommand,
|
|
|
|
# Configuration Options
|
|
|
|
version,
|
|
filesetToSource,
|
|
withBenchmarks ? false,
|
|
}:
|
|
|
|
let
|
|
inherit (lib) fileset;
|
|
in
|
|
|
|
mkMesonExecutable (finalAttrs: {
|
|
pname = "nix-store-tests";
|
|
inherit version;
|
|
|
|
workDir = ./.;
|
|
fileset = fileset.unions [
|
|
../../nix-meson-build-support
|
|
./nix-meson-build-support
|
|
../../.version
|
|
./.version
|
|
./meson.build
|
|
./meson.options
|
|
(fileset.fileFilter (file: file.hasExt "cc") ./.)
|
|
(fileset.fileFilter (file: file.hasExt "hh") ./.)
|
|
];
|
|
|
|
# Hack for sake of the dev shell
|
|
passthru.externalBuildInputs = [
|
|
sqlite
|
|
rapidcheck
|
|
gtest
|
|
]
|
|
++ lib.optionals withBenchmarks [
|
|
gbenchmark
|
|
];
|
|
|
|
buildInputs = finalAttrs.passthru.externalBuildInputs ++ [
|
|
nix-store
|
|
nix-store-c
|
|
nix-store-test-support
|
|
];
|
|
|
|
mesonFlags = [
|
|
(lib.mesonBool "benchmarks" withBenchmarks)
|
|
];
|
|
|
|
passthru = {
|
|
tests = {
|
|
run =
|
|
let
|
|
# Some data is shared with the functional tests: they create it,
|
|
# we consume it.
|
|
data = filesetToSource {
|
|
root = ../..;
|
|
fileset = lib.fileset.unions [
|
|
./data
|
|
../../tests/functional/derivation
|
|
];
|
|
};
|
|
in
|
|
runCommand "${finalAttrs.pname}-run"
|
|
{
|
|
meta.broken = !stdenv.hostPlatform.emulatorAvailable buildPackages;
|
|
buildInputs = [ writableTmpDirAsHomeHook ];
|
|
}
|
|
(
|
|
''
|
|
export ASAN_OPTIONS=abort_on_error=1:print_summary=1:detect_leaks=0
|
|
export _NIX_TEST_UNIT_DATA=${data + "/src/libstore-tests/data"}
|
|
export NIX_REMOTE=$HOME/store
|
|
${stdenv.hostPlatform.emulator buildPackages} ${lib.getExe finalAttrs.finalPackage}
|
|
''
|
|
+ lib.optionalString withBenchmarks ''
|
|
${stdenv.hostPlatform.emulator buildPackages} ${lib.getExe' finalAttrs.finalPackage "nix-store-benchmarks"}
|
|
''
|
|
+ ''
|
|
touch $out
|
|
''
|
|
);
|
|
};
|
|
};
|
|
|
|
meta = {
|
|
platforms = lib.platforms.unix ++ lib.platforms.windows;
|
|
mainProgram = finalAttrs.pname + stdenv.hostPlatform.extensions.executable;
|
|
};
|
|
|
|
})
|