diff --git a/ci/gha/tests/default.nix b/ci/gha/tests/default.nix index 39d1502df..ce44d7cf7 100644 --- a/ci/gha/tests/default.nix +++ b/ci/gha/tests/default.nix @@ -59,7 +59,9 @@ in inherit getStdenv; }).overrideScope ( - _: _: { + final: prev: { + nix-store-tests = prev.nix-store-tests.override { withBenchmarks = true; }; + mesonComponentOverrides = finalAttrs: prevAttrs: { mesonFlags = (prevAttrs.mesonFlags or [ ]) diff --git a/src/libstore-tests/derivation-parser-bench.cc b/src/libstore-tests/derivation-parser-bench.cc index d6c1d4551..ef698b205 100644 --- a/src/libstore-tests/derivation-parser-bench.cc +++ b/src/libstore-tests/derivation-parser-bench.cc @@ -2,6 +2,7 @@ #include "nix/store/derivations.hh" #include "nix/store/store-api.hh" #include "nix/util/experimental-features.hh" +#include "nix/util/environment-variables.hh" #include "nix/store/store-open.hh" #include #include @@ -28,5 +29,11 @@ static void BM_ParseRealDerivationFile(benchmark::State & state, const std::stri } // Register benchmarks for actual test derivation files if they exist -BENCHMARK_CAPTURE(BM_ParseRealDerivationFile, hello, std::string(NIX_UNIT_TEST_DATA) + "/derivation/hello.drv"); -BENCHMARK_CAPTURE(BM_ParseRealDerivationFile, firefox, std::string(NIX_UNIT_TEST_DATA) + "/derivation/firefox.drv"); +BENCHMARK_CAPTURE( + BM_ParseRealDerivationFile, + hello, + getEnvNonEmpty("_NIX_TEST_UNIT_DATA").value_or(NIX_UNIT_TEST_DATA) + "/derivation/hello.drv"); +BENCHMARK_CAPTURE( + BM_ParseRealDerivationFile, + firefox, + getEnvNonEmpty("_NIX_TEST_UNIT_DATA").value_or(NIX_UNIT_TEST_DATA) + "/derivation/firefox.drv"); diff --git a/src/libstore-tests/meson.build b/src/libstore-tests/meson.build index 606b8f694..dfb936fef 100644 --- a/src/libstore-tests/meson.build +++ b/src/libstore-tests/meson.build @@ -122,7 +122,7 @@ if get_option('benchmarks') dependencies : deps_private_subproject + deps_private + deps_other + [gbenchmark], include_directories : include_dirs, link_args: linker_export_flags, - install : false, + install : true, cpp_args : ['-DNIX_UNIT_TEST_DATA="' + meson.current_source_dir() + '/data"'], ) diff --git a/src/libstore-tests/package.nix b/src/libstore-tests/package.nix index 93c71a382..00d40365e 100644 --- a/src/libstore-tests/package.nix +++ b/src/libstore-tests/package.nix @@ -12,12 +12,14 @@ rapidcheck, gtest, + gbenchmark, runCommand, # Configuration Options version, filesetToSource, + withBenchmarks ? false, }: let @@ -41,11 +43,15 @@ mkMesonExecutable (finalAttrs: { ]; # Hack for sake of the dev shell - passthru.externalBuildInputs = [ - sqlite - rapidcheck - gtest - ]; + passthru.externalBuildInputs = + [ + sqlite + rapidcheck + gtest + ] + ++ lib.optionals withBenchmarks [ + gbenchmark + ]; buildInputs = finalAttrs.passthru.externalBuildInputs ++ [ nix-store @@ -54,6 +60,7 @@ mkMesonExecutable (finalAttrs: { ]; mesonFlags = [ + (lib.mesonBool "benchmarks" withBenchmarks) ]; passthru = { @@ -75,12 +82,19 @@ mkMesonExecutable (finalAttrs: { meta.broken = !stdenv.hostPlatform.emulatorAvailable buildPackages; buildInputs = [ writableTmpDirAsHomeHook ]; } - ('' - export _NIX_TEST_UNIT_DATA=${data + "/src/libstore-tests/data"} - export NIX_REMOTE=$HOME/store - ${stdenv.hostPlatform.emulator buildPackages} ${lib.getExe finalAttrs.finalPackage} - touch $out - ''); + ( + '' + 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 + '' + ); }; };