diff options
Diffstat (limited to 'flake.nix')
-rw-r--r-- | flake.nix | 106 |
1 files changed, 101 insertions, 5 deletions
@@ -11,6 +11,11 @@ inputs.nixpkgs.follows = "nixpkgs"; }; + crane = { + url = "github:ipetkov/crane"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + fenix = { url = "github:nix-community/fenix"; inputs.nixpkgs.follows = "nixpkgs"; @@ -29,7 +34,7 @@ flake-parts, treefmt-nix, fenix, - flake-compat, + crane, ... }: flake-parts.lib.mkFlake { inherit inputs; } { @@ -46,18 +51,110 @@ { self', config, + lib, pkgs, system, ... }: let + cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml); rustfmtToml = builtins.fromTOML (builtins.readFile ./rustfmt.toml); + + craneLib = crane.mkLib pkgs; + + commit = lib.strings.substring 0 7 (builtins.readFile ./.bcachefs_revision); + + commonArgs = { + version = "git-${commit}"; + src = self; + + makeFlags = [ + "DESTDIR=${placeholder "out"}" + "PREFIX=" + "VERSION=${commit}" + ]; + + dontStrip = true; + + nativeBuildInputs = with pkgs; [ + pkg-config + rustPlatform.bindgenHook + ]; + + buildInputs = with pkgs; [ + attr + keyutils + libaio + libsodium + liburcu + libuuid + lz4 + udev + zlib + zstd + ]; + }; + + cargoArtifacts = craneLib.buildDepsOnly (commonArgs // { pname = cargoToml.package.name; }); in { packages.default = config.packages.bcachefs-tools; - packages.bcachefs-tools = pkgs.callPackage ./build.nix { }; + packages.bcachefs-tools = craneLib.buildPackage ( + commonArgs + // { + inherit cargoArtifacts; + + enableParallelBuilding = true; + buildPhaseCargoCommand = '' + make ''${enableParallelBuilding:+-j''${NIX_BUILD_CORES}} $makeFlags + ''; + installPhaseCommand = '' + make ''${enableParallelBuilding:+-j''${NIX_BUILD_CORES}} $makeFlags install + ''; + + doInstallCheck = true; + installCheckPhase = '' + runHook preInstallCheck + + test "$($out/bin/bcachefs version)" = "${commit}" - packages.bcachefs-tools-fuse = config.packages.bcachefs-tools.override { fuseSupport = true; }; + runHook postInstallCheck + ''; + } + ); + + packages.bcachefs-tools-fuse = config.packages.bcachefs-tools.overrideAttrs ( + final: prev: { + makeFlags = prev.makeFlags ++ [ "BCACHEFS_FUSE=1" ]; + buildInputs = prev.buildInputs ++ [ pkgs.fuse3 ]; + } + ); + + checks.cargo-clippy = craneLib.cargoClippy ( + commonArgs + // { + inherit cargoArtifacts; + cargoClippyExtraArgs = "--all-targets -- --deny warnings"; + } + ); + + # we have to build our own `craneLib.cargoTest` + checks.cargo-test = craneLib.mkCargoDerivation ( + commonArgs + // { + inherit cargoArtifacts; + doCheck = true; + + enableParallelChecking = true; + + pnameSuffix = "-test"; + buildPhaseCargoCommand = ""; + checkPhaseCargoCommand = '' + make ''${enableParallelChecking:+-j''${NIX_BUILD_CORES}} $makeFlags libbcachefs.a + cargo test --profile release -- --nocapture + ''; + } + ); devShells.default = pkgs.mkShell { inputsFrom = [ @@ -65,8 +162,6 @@ config.treefmt.build.devShell ]; - LIBCLANG_PATH = "${pkgs.clang.cc.lib}/lib"; - # here go packages that aren't required for builds but are used for # development, and might need to be version matched with build # dependencies (e.g. clippy or rust-analyzer). @@ -76,6 +171,7 @@ clang-tools clippy rust-analyzer + rustc ]; }; |