flake.nix is getting too big and this makes it easier to understand what
is going on with e.g. callPackage.
---
crane-build.nix | 139 +++++++++++++++++++++++++++++++++++
flake.nix | 189 ++++++------------------------------------------
2 files changed, 163 insertions(+), 165 deletions(-)
create mode 100644 crane-build.nix
diff --git a/crane-build.nix b/crane-build.nix
new file mode 100644
index 00000000..9b764ec9
--- /dev/null
+++ b/crane-build.nix
@@ -0,0 +1,139 @@
+{
+ lib,
+ pkgs,
+
+ # build time
+ pkg-config,
+ rustPlatform,
+
+ # run time
+ fuse3,
+ keyutils,
+ libaio,
+ libsodium,
+ liburcu,
+ libuuid,
+ lz4,
+ udev,
+ zlib,
+ zstd,
+
+ crane,
+ rustVersion ? "latest",
+ version,
+}:
+let
+ craneLib = (crane.mkLib pkgs).overrideToolchain (
+ p: p.rust-bin.stable."${rustVersion}".minimal.override { extensions = [
"clippy" ]; }
+ );
+
+ args = {
+ inherit version;
+ src = ./.;
+ strictDeps = true;
+
+ env = {
+ PKG_CONFIG_SYSTEMD_SYSTEMDSYSTEMUNITDIR = "${placeholder
"out"}/lib/systemd/system";
+ PKG_CONFIG_UDEV_UDEVDIR = "${placeholder "out"}/lib/udev";
+ };
+
+ makeFlags = [
+ "INITRAMFS_DIR=${placeholder "out"}/etc/initramfs-tools"
+ "PREFIX=${placeholder "out"}"
+ "VERSION=${version}"
+ ];
+
+ dontStrip = true;
+
+ nativeBuildInputs = [
+ pkg-config
+ rustPlatform.bindgenHook
+ ];
+
+ buildInputs = [
+ keyutils
+ libaio
+ libsodium
+ liburcu
+ libuuid
+ lz4
+ udev
+ zlib
+ zstd
+ ];
+ };
+
+ cargoArtifacts = craneLib.buildDepsOnly args;
+
+ package = craneLib.buildPackage (
+ args
+ // {
+ inherit cargoArtifacts;
+
+ enableParallelBuilding = true;
+ buildPhaseCargoCommand = ''
+ make ''${enableParallelBuilding:+-j''${NIX_BUILD_CORES}} $makeFlags
+ '';
+ doNotPostBuildInstallCargoBinaries = true;
+ installPhaseCommand = ''
+ make ''${enableParallelBuilding:+-j''${NIX_BUILD_CORES}} $makeFlags
install
+ '';
+
+ doInstallCheck = true;
+ installCheckPhase = ''
+ runHook preInstallCheck
+
+ test "$($out/bin/bcachefs version)" = "${version}"
+
+ runHook postInstallCheck
+ '';
+
+ meta = {
+ description = "Userspace tools for bcachefs";
+ license = lib.licenses.gpl2Only;
+ mainProgram = "bcachefs";
+ };
+ }
+ );
+
+ packageFuse = package.overrideAttrs (
+ final: prev: {
+ makeFlags = prev.makeFlags ++ [ "BCACHEFS_FUSE=1" ];
+ buildInputs = prev.buildInputs ++ [ fuse3 ];
+ }
+ );
+
+ cargo-clippy = craneLib.cargoClippy (
+ args
+ // {
+ inherit cargoArtifacts;
+ cargoClippyExtraArgs = "--all-targets --all-features -- --deny warnings";
+ }
+ );
+
+ # we have to build our own `craneLib.cargoTest`
+ cargo-test = craneLib.mkCargoDerivation (
+ args
+ // {
+ inherit cargoArtifacts;
+ doCheck = true;
+
+ enableParallelChecking = true;
+
+ pnameSuffix = "-test";
+ buildPhaseCargoCommand = "";
+ checkPhaseCargoCommand = ''
+ make ''${enableParallelChecking:+-j''${NIX_BUILD_CORES}} $makeFlags
libbcachefs.a
+ cargo test --profile release -- --nocapture
+ '';
+ }
+ );
+in
+{
+ inherit
+ cargo-clippy
+ cargo-test
+ package
+ packageFuse
+ ;
+}
diff --git a/flake.nix b/flake.nix
index c2ee9fd6..8b38ba19 100644
--- a/flake.nix
+++ b/flake.nix
@@ -74,113 +74,9 @@
rev = self.shortRev or self.dirtyShortRev or (lib.substring 0 8
self.lastModifiedDate);
version = "${cargoToml.package.version}+${rev}";
-
- mkCommon =
- {
- crane,
- pkgs,
- rustVersion ? "latest",
-
- # build time
- buildPackages,
- pkg-config,
- rustPlatform,
-
- # run time
- keyutils,
- libaio,
- libsodium,
- liburcu,
- libuuid,
- lz4,
- udev,
- zlib,
- zstd,
- }:
- let
- craneLib = (crane.mkLib pkgs).overrideToolchain (
- p: p.rust-bin.stable."${rustVersion}".minimal.override {
extensions = [ "clippy" ]; }
- );
-
- args = {
- inherit version;
- src = self;
- strictDeps = true;
-
- env = {
- PKG_CONFIG_SYSTEMD_SYSTEMDSYSTEMUNITDIR = "${placeholder
"out"}/lib/systemd/system";
- PKG_CONFIG_UDEV_UDEVDIR = "${placeholder "out"}/lib/udev";
- };
-
- makeFlags = [
- "INITRAMFS_DIR=${placeholder "out"}/etc/initramfs-tools"
- "PREFIX=${placeholder "out"}"
- "VERSION=${version}"
- ];
-
- dontStrip = true;
-
- nativeBuildInputs = [
- pkg-config
- rustPlatform.bindgenHook
- ];
-
- buildInputs = [
- keyutils
- libaio
- libsodium
- liburcu
- libuuid
- lz4
- udev
- zlib
- zstd
- ];
-
- meta = {
- description = "Userspace tools for bcachefs";
- license = lib.licenses.gpl2Only;
- mainProgram = "bcachefs";
- };
- };
-
- cargoArtifacts = craneLib.buildDepsOnly args;
- in
- {
- inherit args cargoArtifacts craneLib;
- };
- common = pkgs.callPackage mkCommon { inherit crane; };
-
- mkPackage =
- { common, name }:
- common.craneLib.buildPackage (
- common.args
- // {
- inherit (common) cargoArtifacts;
- pname = name;
-
- enableParallelBuilding = true;
- buildPhaseCargoCommand = ''
- make ''${enableParallelBuilding:+-j''${NIX_BUILD_CORES}}
$makeFlags
- '';
- doNotPostBuildInstallCargoBinaries = true;
- installPhaseCommand = ''
- make ''${enableParallelBuilding:+-j''${NIX_BUILD_CORES}}
$makeFlags install
- '';
-
- doInstallCheck = true;
- installCheckPhase = ''
- runHook preInstallCheck
-
- test "$($out/bin/bcachefs version)" = "${version}"
-
- runHook postInstallCheck
- '';
- }
- );
-
- mkPackages =
- name: systems:
+ in
+ {
+ packages =
let
packagesForSystem =
crossSystem:
@@ -190,90 +86,53 @@
inherit crossSystem localSystem;
overlays = [ (import rust-overlay) ];
};
+ withCrossName =
+ set: lib.mapAttrs' (name: value: lib.nameValuePair
"${name}-${crossSystem}" value) set;
- common = pkgs'.callPackage mkCommon { inherit crane; };
- package = pkgs'.callPackage mkPackage { inherit common name;
};
- packageFuse = package.overrideAttrs (
- final: prev: {
- makeFlags = prev.makeFlags ++ [ "BCACHEFS_FUSE=1" ];
- buildInputs = prev.buildInputs ++ [ pkgs'.fuse3 ];
- }
- );
+ craneBuild = pkgs'.callPackage ./crane-build.nix { inherit
crane version; };
+ crossPackages = {
+ "bcachefs-tools" = craneBuild.package;
+ "bcachefs-tools-fuse" = craneBuild.packageFuse;
+ };
in
- [
- (lib.nameValuePair "${name}-${crossSystem}" package)
- (lib.nameValuePair "${name}-fuse-${crossSystem}" packageFuse)
- ];
+ (withCrossName crossPackages) // lib.optionalAttrs
(crossSystem == localSystem) crossPackages;
+ packages = lib.mergeAttrsList (map packagesForSystem systems);
in
- lib.listToAttrs (lib.flatten (map packagesForSystem systems));
- in
- {
- packages =
- let
- inherit (cargoToml.package) name;
- in
- (mkPackages name systems)
+ packages
// {
- ${name} = config.packages."${name}-${system}";
- "${name}-fuse" = config.packages."${name}-fuse-${system}";
- default = config.packages.${name};
+ default = self'.packages.${cargoToml.package.name};
};
checks = {
- inherit (config.packages)
+ inherit (self'.packages)
bcachefs-tools
bcachefs-tools-aarch64-linux
bcachefs-tools-fuse
bcachefs-tools-fuse-i686-linux
;
-
- #cargo-clippy = common.craneLib.cargoClippy (
- # common.args
- # // {
- # inherit (common) cargoArtifacts;
- # cargoClippyExtraArgs = "--all-targets --all-features --
--deny warnings";
- # }
- #);
-
- # we have to build our own `craneLib.cargoTest`
- cargo-test = common.craneLib.mkCargoDerivation (
- common.args
- // {
- inherit (common) cargoArtifacts;
- doCheck = true;
-
- enableParallelChecking = true;
-
- pnameSuffix = "-test";
- buildPhaseCargoCommand = "";
- checkPhaseCargoCommand = ''
- make ''${enableParallelChecking:+-j''${NIX_BUILD_CORES}}
$makeFlags libbcachefs.a
- cargo test --profile release -- --nocapture
- '';
- }
- );
+ inherit (pkgs.callPackage ./crane-build.nix { inherit crane
version; })
+ # cargo-clippy
+ cargo-test
+ ;
# cargo clippy with the current minimum supported rust version
# according to Cargo.toml
msrv =
let
rustVersion = cargoToml.package.rust-version;
- common = pkgs.callPackage mkCommon { inherit crane
rustVersion; };
+ craneBuild = pkgs.callPackage ./crane-build.nix { inherit
crane rustVersion version; };
in
- common.craneLib.cargoClippy (
- common.args
- // {
- pname = "msrv";
- inherit (common) cargoArtifacts;
- cargoClippyExtraArgs = "--all-targets --all-features";
+ craneBuild.cargo-test.overrideAttrs (
+ final: prev: {
+ pname = "${prev.pname}-msrv";
}
);
};
devShells.default = pkgs.mkShell {
inputsFrom = [
- config.packages.default
config.treefmt.build.devShell
+ self'.packages.default
];
# here go packages that aren't required for builds but are used for
--
2.51.0