mirror of
https://github.com/koverstreet/bcachefs-tools.git
synced 2025-12-19 00:00:10 +03:00
refactor(nix): move out build into separate file
flake.nix is getting too big and this makes it easier to understand what is going on with e.g. callPackage. Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
126829decf
commit
9eb3e6c076
139
crane-build.nix
Normal file
139
crane-build.nix
Normal file
@ -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
|
||||||
|
;
|
||||||
|
}
|
||||||
185
flake.nix
185
flake.nix
@ -74,113 +74,9 @@
|
|||||||
|
|
||||||
rev = self.shortRev or self.dirtyShortRev or (lib.substring 0 8 self.lastModifiedDate);
|
rev = self.shortRev or self.dirtyShortRev or (lib.substring 0 8 self.lastModifiedDate);
|
||||||
version = "${cargoToml.package.version}+${rev}";
|
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
|
in
|
||||||
{
|
{
|
||||||
inherit args cargoArtifacts craneLib;
|
packages =
|
||||||
};
|
|
||||||
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:
|
|
||||||
let
|
let
|
||||||
packagesForSystem =
|
packagesForSystem =
|
||||||
crossSystem:
|
crossSystem:
|
||||||
@ -190,90 +86,53 @@
|
|||||||
inherit crossSystem localSystem;
|
inherit crossSystem localSystem;
|
||||||
overlays = [ (import rust-overlay) ];
|
overlays = [ (import rust-overlay) ];
|
||||||
};
|
};
|
||||||
|
withCrossName =
|
||||||
|
set: lib.mapAttrs' (name: value: lib.nameValuePair "${name}-${crossSystem}" value) set;
|
||||||
|
|
||||||
common = pkgs'.callPackage mkCommon { inherit crane; };
|
craneBuild = pkgs'.callPackage ./crane-build.nix { inherit crane version; };
|
||||||
package = pkgs'.callPackage mkPackage { inherit common name; };
|
crossPackages = {
|
||||||
packageFuse = package.overrideAttrs (
|
"bcachefs-tools" = craneBuild.package;
|
||||||
final: prev: {
|
"bcachefs-tools-fuse" = craneBuild.packageFuse;
|
||||||
makeFlags = prev.makeFlags ++ [ "BCACHEFS_FUSE=1" ];
|
};
|
||||||
buildInputs = prev.buildInputs ++ [ pkgs'.fuse3 ];
|
|
||||||
}
|
|
||||||
);
|
|
||||||
in
|
in
|
||||||
[
|
(withCrossName crossPackages) // lib.optionalAttrs (crossSystem == localSystem) crossPackages;
|
||||||
(lib.nameValuePair "${name}-${crossSystem}" package)
|
packages = lib.mergeAttrsList (map packagesForSystem systems);
|
||||||
(lib.nameValuePair "${name}-fuse-${crossSystem}" packageFuse)
|
|
||||||
];
|
|
||||||
in
|
in
|
||||||
lib.listToAttrs (lib.flatten (map packagesForSystem systems));
|
packages
|
||||||
in
|
|
||||||
{
|
|
||||||
packages =
|
|
||||||
let
|
|
||||||
inherit (cargoToml.package) name;
|
|
||||||
in
|
|
||||||
(mkPackages name systems)
|
|
||||||
// {
|
// {
|
||||||
${name} = config.packages."${name}-${system}";
|
default = self'.packages.${cargoToml.package.name};
|
||||||
"${name}-fuse" = config.packages."${name}-fuse-${system}";
|
|
||||||
default = config.packages.${name};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
checks = {
|
checks = {
|
||||||
inherit (config.packages)
|
inherit (self'.packages)
|
||||||
bcachefs-tools
|
bcachefs-tools
|
||||||
bcachefs-tools-aarch64-linux
|
bcachefs-tools-aarch64-linux
|
||||||
bcachefs-tools-fuse
|
bcachefs-tools-fuse
|
||||||
bcachefs-tools-fuse-i686-linux
|
bcachefs-tools-fuse-i686-linux
|
||||||
;
|
;
|
||||||
|
inherit (pkgs.callPackage ./crane-build.nix { inherit crane version; })
|
||||||
#cargo-clippy = common.craneLib.cargoClippy (
|
# cargo-clippy
|
||||||
# common.args
|
cargo-test
|
||||||
# // {
|
;
|
||||||
# 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
|
|
||||||
'';
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
# cargo clippy with the current minimum supported rust version
|
# cargo clippy with the current minimum supported rust version
|
||||||
# according to Cargo.toml
|
# according to Cargo.toml
|
||||||
msrv =
|
msrv =
|
||||||
let
|
let
|
||||||
rustVersion = cargoToml.package.rust-version;
|
rustVersion = cargoToml.package.rust-version;
|
||||||
common = pkgs.callPackage mkCommon { inherit crane rustVersion; };
|
craneBuild = pkgs.callPackage ./crane-build.nix { inherit crane rustVersion version; };
|
||||||
in
|
in
|
||||||
common.craneLib.cargoClippy (
|
craneBuild.cargo-test.overrideAttrs (
|
||||||
common.args
|
final: prev: {
|
||||||
// {
|
pname = "${prev.pname}-msrv";
|
||||||
pname = "msrv";
|
|
||||||
inherit (common) cargoArtifacts;
|
|
||||||
cargoClippyExtraArgs = "--all-targets --all-features";
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
devShells.default = pkgs.mkShell {
|
devShells.default = pkgs.mkShell {
|
||||||
inputsFrom = [
|
inputsFrom = [
|
||||||
config.packages.default
|
|
||||||
config.treefmt.build.devShell
|
config.treefmt.build.devShell
|
||||||
|
self'.packages.default
|
||||||
];
|
];
|
||||||
|
|
||||||
# here go packages that aren't required for builds but are used for
|
# here go packages that aren't required for builds but are used for
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user