summaryrefslogtreecommitdiff
path: root/flake.nix
diff options
context:
space:
mode:
Diffstat (limited to 'flake.nix')
-rw-r--r--flake.nix106
1 files changed, 101 insertions, 5 deletions
diff --git a/flake.nix b/flake.nix
index 6d946dbc..3cd44ec8 100644
--- a/flake.nix
+++ b/flake.nix
@@ -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
];
};