nix: simplify malloc outputs

Signed-off-by: strawberry <strawberry@puppygock.gay>
This commit is contained in:
strawberry 2024-04-10 23:03:40 -04:00 committed by June
parent 354487fa10
commit 89c22435d5

134
flake.nix
View file

@ -36,6 +36,7 @@
}: flake-utils.lib.eachDefaultSystem (system: }: flake-utils.lib.eachDefaultSystem (system:
let let
pkgsHost = nixpkgs.legacyPackages.${system}; pkgsHost = nixpkgs.legacyPackages.${system};
allocator = null;
rocksdb' = pkgs: rocksdb' = pkgs:
let let
@ -74,8 +75,6 @@
env = pkgs: { env = pkgs: {
CONDUIT_VERSION_EXTRA = self.shortRev or self.dirtyShortRev; CONDUIT_VERSION_EXTRA = self.shortRev or self.dirtyShortRev;
# Debian makes builds reproducible through using the HEAD commit's date
TIMESTAMP = self.lastModified;
ROCKSDB_INCLUDE_DIR = "${rocksdb' pkgs}/include"; ROCKSDB_INCLUDE_DIR = "${rocksdb' pkgs}/include";
ROCKSDB_LIB_DIR = "${rocksdb' pkgs}/lib"; ROCKSDB_LIB_DIR = "${rocksdb' pkgs}/lib";
} }
@ -168,7 +167,7 @@
) )
); );
package = pkgs: builder pkgs { mkPackage = pkgs: allocator: builder pkgs {
src = nix-filter { src = nix-filter {
root = ./.; root = ./.;
include = [ include = [
@ -178,6 +177,13 @@
]; ];
}; };
buildFeatures = [ ]
++ (if allocator == "jemalloc" then [ "jemalloc" ] else [ ])
++ (if allocator == "hmalloc" then [ "hardened_malloc" ] else [ ])
;
rocksdb' = (if allocator == "jemalloc" then (pkgs.rocksdb.override { enableJemalloc = true; }) else (rocksdb' pkgs));
# This is redundant with CI # This is redundant with CI
doCheck = false; doCheck = false;
@ -187,55 +193,12 @@
meta.mainProgram = cargoToml.package.name; meta.mainProgram = cargoToml.package.name;
}; };
packageJemalloc = pkgs: builder pkgs { mkOciImage = pkgs: package: allocator:
src = nix-filter {
root = ./.;
include = [
"src"
"Cargo.toml"
"Cargo.lock"
];
};
rocksdb' = pkgs.rocksdb.override { enableJemalloc = true; };
# This is redundant with CI
doCheck = false;
env = env pkgs;
nativeBuildInputs = nativeBuildInputs pkgs;
meta.mainProgram = cargoToml.package.name;
buildFeatures = [ "jemalloc" ];
};
packageHMalloc = pkgs: builder pkgs {
src = nix-filter {
root = ./.;
include = [
"src"
"Cargo.toml"
"Cargo.lock"
];
};
# This is redundant with CI
doCheck = false;
env = env pkgs;
nativeBuildInputs = nativeBuildInputs pkgs;
meta.mainProgram = cargoToml.package.name;
buildFeatures = [ "hardened_malloc" ];
};
mkOciImage = pkgs: package:
pkgs.dockerTools.buildImage { pkgs.dockerTools.buildImage {
name = package.pname; name = package.pname;
tag = "main"; tag = "main";
created = "${env.TIMESTAMP}"; # Debian makes builds reproducible through using the HEAD commit's date
created = self.lastModified;
copyToRoot = [ copyToRoot = [
pkgs.dockerTools.caCertificates pkgs.dockerTools.caCertificates
]; ];
@ -251,57 +214,15 @@
]; ];
}; };
}; };
mkOciImageJemalloc = pkgs: packageJemalloc:
pkgs.dockerTools.buildImage {
name = "${package.pname}-jemalloc";
tag = "main";
created = "${env.TIMESTAMP}";
copyToRoot = [
pkgs.dockerTools.caCertificates
];
config = {
# Use the `tini` init system so that signals (e.g. ctrl+c/SIGINT)
# are handled as expected
Entrypoint = [
"${pkgs.lib.getExe' pkgs.tini "tini"}"
"--"
];
Cmd = [
"${pkgs.lib.getExe package}"
];
};
};
mkOciImageHMalloc = pkgs: packageHMalloc:
pkgs.dockerTools.buildImage {
name = "${package.pname}-hmalloc";
tag = "main";
created = "${env.TIMESTAMP}";
copyToRoot = [
pkgs.dockerTools.caCertificates
];
config = {
# Use the `tini` init system so that signals (e.g. ctrl+c/SIGINT)
# are handled as expected
Entrypoint = [
"${pkgs.lib.getExe' pkgs.tini "tini"}"
"--"
];
Cmd = [
"${pkgs.lib.getExe package}"
];
};
};
in in
{ {
packages = { packages = {
default = package pkgsHost; default = mkPackage pkgsHost null;
jemalloc = packageJemalloc pkgsHost; jemalloc = mkPackage pkgsHost "jemalloc";
hmalloc = packageHMalloc pkgsHost; hmalloc = mkPackage pkgsHost "hmalloc";
oci-image = mkOciImage pkgsHost self.packages.${system}.default; oci-image = mkOciImage pkgsHost self.packages.${system}.default null;
oci-image-jemalloc = mkOciImageJemalloc pkgsHost self.packages.${system}.default; oci-image-jemalloc = mkOciImage pkgsHost self.packages.${system}.default "jemalloc";
oci-image-hmalloc = mkOciImageHMalloc pkgsHost self.packages.${system}.default; oci-image-hmalloc = mkOciImage pkgsHost self.packages.${system}.default "hmalloc";
book = book =
let let
@ -351,19 +272,19 @@
# An output for a statically-linked binary # An output for a statically-linked binary
{ {
name = binaryName; name = binaryName;
value = package pkgsCrossStatic; value = mkPackage pkgsCrossStatic null;
} }
# An output for a statically-linked binary with jemalloc # An output for a statically-linked binary with jemalloc
{ {
name = "${binaryName}-jemalloc"; name = "${binaryName}-jemalloc";
value = packageJemalloc pkgsCrossStatic; value = mkPackage pkgsCrossStatic "jemalloc";
} }
# An output for a statically-linked binary with hardened_malloc # An output for a statically-linked binary with hardened_malloc
{ {
name = "${binaryName}-hmalloc"; name = "${binaryName}-hmalloc";
value = packageHMalloc pkgsCrossStatic; value = mkPackage pkgsCrossStatic "hmalloc";
} }
# An output for an OCI image based on that binary # An output for an OCI image based on that binary
@ -371,23 +292,26 @@
name = "oci-image-${crossSystem}"; name = "oci-image-${crossSystem}";
value = mkOciImage value = mkOciImage
pkgsCrossStatic pkgsCrossStatic
self.packages.${system}.${binaryName}; self.packages.${system}.${binaryName}
null;
} }
# An output for an OCI image based on that binary with jemalloc # An output for an OCI image based on that binary with jemalloc
{ {
name = "oci-image-${crossSystem}-jemalloc"; name = "oci-image-${crossSystem}-jemalloc";
value = mkOciImageJemalloc value = mkOciImage
pkgsCrossStatic pkgsCrossStatic
self.packages.${system}.${binaryName}; self.packages.${system}.${binaryName}
"jemalloc";
} }
# An output for an OCI image based on that binary with hardened_malloc # An output for an OCI image based on that binary with hardened_malloc
{ {
name = "oci-image-${crossSystem}-hmalloc"; name = "oci-image-${crossSystem}-hmalloc";
value = mkOciImageHMalloc value = mkOciImage
pkgsCrossStatic pkgsCrossStatic
self.packages.${system}.${binaryName}; self.packages.${system}.${binaryName}
"hmalloc";
} }
] ]
) )