mirror of
https://github.com/rosenpass/rosenpass.git
synced 2025-12-05 20:40:02 -08:00
refactor(flake.nix): externalize pkgs, add overlay
This splits the complexity of the `flake.nix` into multiple files. At cross-compiled and static builds at the benefit of simpler nix expressions and generally better cross compilation compatibility. the same time, naersk is removed; causing much slower builds for cross- compiled packages. This partially addresses the points mentioned in #412.
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
.direnv/
|
.direnv/
|
||||||
|
flake.lock
|
||||||
papers/whitepaper.md
|
papers/whitepaper.md
|
||||||
target/
|
|
||||||
src/usage.md
|
src/usage.md
|
||||||
|
target/
|
||||||
|
|||||||
49
flake.lock
generated
49
flake.lock
generated
@@ -2,15 +2,17 @@
|
|||||||
"nodes": {
|
"nodes": {
|
||||||
"fenix": {
|
"fenix": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": ["nixpkgs"],
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
"rust-analyzer-src": "rust-analyzer-src"
|
"rust-analyzer-src": "rust-analyzer-src"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1712298178,
|
"lastModified": 1728282832,
|
||||||
"narHash": "sha256-590fpCPXYAkaAeBz/V91GX4/KGzPObdYtqsTWzT6AhI=",
|
"narHash": "sha256-I7AbcwGggf+CHqpyd/9PiAjpIBGTGx5woYHqtwxaV7I=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "fenix",
|
"repo": "fenix",
|
||||||
"rev": "569b5b5781395da08e7064e825953c548c26af76",
|
"rev": "1ec71be1f4b8f3105c5d38da339cb061fefc43f4",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -24,11 +26,11 @@
|
|||||||
"systems": "systems"
|
"systems": "systems"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1710146030,
|
"lastModified": 1726560853,
|
||||||
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
"narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
|
||||||
"owner": "numtide",
|
"owner": "numtide",
|
||||||
"repo": "flake-utils",
|
"repo": "flake-utils",
|
||||||
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
"rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -37,36 +39,18 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"naersk": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": ["nixpkgs"]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1698420672,
|
|
||||||
"narHash": "sha256-/TdeHMPRjjdJub7p7+w55vyABrsJlt5QkznPYy55vKA=",
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "naersk",
|
|
||||||
"rev": "aeb58d5e8faead8980a807c840232697982d47b9",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "nix-community",
|
|
||||||
"repo": "naersk",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1712168706,
|
"lastModified": 1728193676,
|
||||||
"narHash": "sha256-XP24tOobf6GGElMd0ux90FEBalUtw6NkBSVh/RlA6ik=",
|
"narHash": "sha256-PbDWAIjKJdlVg+qQRhzdSor04bAPApDqIv2DofTyynk=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "1487bdea619e4a7a53a4590c475deabb5a9d1bfb",
|
"rev": "ecbc1ca8ffd6aea8372ad16be9ebbb39889e55b6",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"ref": "nixos-23.11",
|
"ref": "nixos-24.05",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
@@ -75,18 +59,17 @@
|
|||||||
"inputs": {
|
"inputs": {
|
||||||
"fenix": "fenix",
|
"fenix": "fenix",
|
||||||
"flake-utils": "flake-utils",
|
"flake-utils": "flake-utils",
|
||||||
"naersk": "naersk",
|
|
||||||
"nixpkgs": "nixpkgs"
|
"nixpkgs": "nixpkgs"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"rust-analyzer-src": {
|
"rust-analyzer-src": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1712156296,
|
"lastModified": 1728249780,
|
||||||
"narHash": "sha256-St7ZQrkrr5lmQX9wC1ZJAFxL8W7alswnyZk9d1se3Us=",
|
"narHash": "sha256-J269DvCI5dzBmPrXhAAtj566qt0b22TJtF3TIK+tMsI=",
|
||||||
"owner": "rust-lang",
|
"owner": "rust-lang",
|
||||||
"repo": "rust-analyzer",
|
"repo": "rust-analyzer",
|
||||||
"rev": "8e581ac348e223488622f4d3003cb2bd412bf27e",
|
"rev": "2b750da1a1a2c1d2c70896108d7096089842d877",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|||||||
410
flake.nix
410
flake.nix
@@ -1,12 +1,8 @@
|
|||||||
{
|
{
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.11";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05";
|
||||||
flake-utils.url = "github:numtide/flake-utils";
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
|
|
||||||
# for quicker rust builds
|
|
||||||
naersk.url = "github:nix-community/naersk";
|
|
||||||
naersk.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
|
|
||||||
# for rust nightly with llvm-tools-preview
|
# for rust nightly with llvm-tools-preview
|
||||||
fenix.url = "github:nix-community/fenix";
|
fenix.url = "github:nix-community/fenix";
|
||||||
fenix.inputs.nixpkgs.follows = "nixpkgs";
|
fenix.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
@@ -15,6 +11,15 @@
|
|||||||
outputs = { self, nixpkgs, flake-utils, ... }@inputs:
|
outputs = { self, nixpkgs, flake-utils, ... }@inputs:
|
||||||
nixpkgs.lib.foldl (a: b: nixpkgs.lib.recursiveUpdate a b) { } [
|
nixpkgs.lib.foldl (a: b: nixpkgs.lib.recursiveUpdate a b) { } [
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
### Export the overlay.nix from this flake ###
|
||||||
|
#
|
||||||
|
{
|
||||||
|
overlays.default = import ./overlay.nix;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
### Actual Rosenpass Package and Docker Container Images ###
|
### Actual Rosenpass Package and Docker Container Images ###
|
||||||
#
|
#
|
||||||
@@ -30,310 +35,39 @@
|
|||||||
]
|
]
|
||||||
(system:
|
(system:
|
||||||
let
|
let
|
||||||
scoped = (scope: scope.result);
|
|
||||||
lib = nixpkgs.lib;
|
|
||||||
|
|
||||||
# normal nixpkgs
|
# normal nixpkgs
|
||||||
pkgs = import nixpkgs {
|
pkgs = import nixpkgs {
|
||||||
inherit system;
|
inherit system;
|
||||||
};
|
|
||||||
|
|
||||||
# parsed Cargo.toml
|
# apply our own overlay, overriding/inserting our packages as defined in ./pkgs
|
||||||
cargoToml = builtins.fromTOML (builtins.readFile ./rosenpass/Cargo.toml);
|
overlays = [ self.overlays.default ];
|
||||||
|
|
||||||
# source files relevant for rust
|
|
||||||
src = scoped rec {
|
|
||||||
# File suffices to include
|
|
||||||
extensions = [
|
|
||||||
"lock"
|
|
||||||
"rs"
|
|
||||||
"toml"
|
|
||||||
];
|
|
||||||
# Files to explicitly include
|
|
||||||
files = [
|
|
||||||
"to/README.md"
|
|
||||||
];
|
|
||||||
|
|
||||||
src = ./.;
|
|
||||||
filter = (path: type: scoped rec {
|
|
||||||
inherit (lib) any id removePrefix hasSuffix;
|
|
||||||
anyof = (any id);
|
|
||||||
|
|
||||||
basename = baseNameOf (toString path);
|
|
||||||
relative = removePrefix (toString src + "/") (toString path);
|
|
||||||
|
|
||||||
result = anyof [
|
|
||||||
(type == "directory")
|
|
||||||
(any (ext: hasSuffix ".${ext}" basename) extensions)
|
|
||||||
(any (file: file == relative) files)
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
result = pkgs.lib.sources.cleanSourceWith { inherit src filter; };
|
|
||||||
};
|
|
||||||
|
|
||||||
# a function to generate a nix derivation for rosenpass against any
|
|
||||||
# given set of nixpkgs
|
|
||||||
rosenpassDerivation = p:
|
|
||||||
let
|
|
||||||
# whether we want to build a statically linked binary
|
|
||||||
isStatic = p.targetPlatform.isStatic;
|
|
||||||
|
|
||||||
# the rust target of `p`
|
|
||||||
target = p.rust.toRustTargetSpec p.targetPlatform;
|
|
||||||
|
|
||||||
# convert a string to shout case
|
|
||||||
shout = string: builtins.replaceStrings [ "-" ] [ "_" ] (pkgs.lib.toUpper string);
|
|
||||||
|
|
||||||
# suitable Rust toolchain
|
|
||||||
toolchain = with inputs.fenix.packages.${system}; combine [
|
|
||||||
stable.cargo
|
|
||||||
stable.rustc
|
|
||||||
targets.${target}.stable.rust-std
|
|
||||||
];
|
|
||||||
|
|
||||||
# naersk with a custom toolchain
|
|
||||||
naersk = pkgs.callPackage inputs.naersk {
|
|
||||||
cargo = toolchain;
|
|
||||||
rustc = toolchain;
|
|
||||||
};
|
|
||||||
|
|
||||||
# used to trick the build.rs into believing that CMake was ran **again**
|
|
||||||
fakecmake = pkgs.writeScriptBin "cmake" ''
|
|
||||||
#! ${pkgs.stdenv.shell} -e
|
|
||||||
true
|
|
||||||
'';
|
|
||||||
in
|
|
||||||
naersk.buildPackage
|
|
||||||
{
|
|
||||||
# metadata and source
|
|
||||||
name = cargoToml.package.name;
|
|
||||||
version = cargoToml.package.version;
|
|
||||||
inherit src;
|
|
||||||
|
|
||||||
cargoBuildOptions = x: x ++ [ "-p" "rosenpass" ];
|
|
||||||
cargoTestOptions = x: x ++ [ "-p" "rosenpass" ];
|
|
||||||
|
|
||||||
doCheck = true;
|
|
||||||
|
|
||||||
nativeBuildInputs = with pkgs; [
|
|
||||||
p.stdenv.cc
|
|
||||||
cmake # for oqs build in the oqs-sys crate
|
|
||||||
mandoc # for the built-in manual
|
|
||||||
removeReferencesTo
|
|
||||||
rustPlatform.bindgenHook # for C-bindings in the crypto libs
|
|
||||||
];
|
|
||||||
buildInputs = with p; [ bash ];
|
|
||||||
|
|
||||||
override = x: {
|
|
||||||
preBuild =
|
|
||||||
# nix defaults to building for aarch64 _without_ the armv8-a crypto
|
|
||||||
# extensions, but liboqs depens on these
|
|
||||||
(lib.optionalString (system == "aarch64-linux") ''
|
|
||||||
NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -march=armv8-a+crypto"
|
|
||||||
''
|
|
||||||
);
|
|
||||||
|
|
||||||
# fortify is only compatible with dynamic linking
|
|
||||||
hardeningDisable = lib.optional isStatic "fortify";
|
|
||||||
};
|
|
||||||
|
|
||||||
overrideMain = x: {
|
|
||||||
# CMake detects that it was served a _foreign_ target dir, and CMake
|
|
||||||
# would be executed again upon the second build step of naersk.
|
|
||||||
# By adding our specially optimized CMake version, we reduce the cost
|
|
||||||
# of recompilation by 99 % while, while avoiding any CMake errors.
|
|
||||||
nativeBuildInputs = [ (lib.hiPrio fakecmake) ] ++ x.nativeBuildInputs;
|
|
||||||
|
|
||||||
# make sure that libc is linked, under musl this is not the case per
|
|
||||||
# default
|
|
||||||
preBuild = (lib.optionalString isStatic ''
|
|
||||||
NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -lc"
|
|
||||||
'');
|
|
||||||
};
|
|
||||||
|
|
||||||
# We want to build for a specific target...
|
|
||||||
CARGO_BUILD_TARGET = target;
|
|
||||||
|
|
||||||
# ... which might require a non-default linker:
|
|
||||||
"CARGO_TARGET_${shout target}_LINKER" =
|
|
||||||
let
|
|
||||||
inherit (p.stdenv) cc;
|
|
||||||
in
|
|
||||||
"${cc}/bin/${cc.targetPrefix}cc";
|
|
||||||
|
|
||||||
meta = with pkgs.lib;
|
|
||||||
{
|
|
||||||
inherit (cargoToml.package) description homepage;
|
|
||||||
license = with licenses; [ mit asl20 ];
|
|
||||||
maintainers = [ maintainers.wucke13 ];
|
|
||||||
platforms = platforms.all;
|
|
||||||
};
|
|
||||||
} // (lib.mkIf isStatic {
|
|
||||||
# otherwise pkg-config tries to link non-existent dynamic libs
|
|
||||||
# documented here: https://docs.rs/pkg-config/latest/pkg_config/
|
|
||||||
PKG_CONFIG_ALL_STATIC = true;
|
|
||||||
|
|
||||||
# tell rust to build everything statically linked
|
|
||||||
CARGO_BUILD_RUSTFLAGS = "-C target-feature=+crt-static";
|
|
||||||
});
|
|
||||||
# a function to generate a nix derivation for the rp helper against any
|
|
||||||
# given set of nixpkgs
|
|
||||||
rpDerivation = p:
|
|
||||||
let
|
|
||||||
# whether we want to build a statically linked binary
|
|
||||||
isStatic = p.targetPlatform.isStatic;
|
|
||||||
|
|
||||||
# the rust target of `p`
|
|
||||||
target = p.rust.toRustTargetSpec p.targetPlatform;
|
|
||||||
|
|
||||||
# convert a string to shout case
|
|
||||||
shout = string: builtins.replaceStrings [ "-" ] [ "_" ] (pkgs.lib.toUpper string);
|
|
||||||
|
|
||||||
# suitable Rust toolchain
|
|
||||||
toolchain = with inputs.fenix.packages.${system}; combine [
|
|
||||||
stable.cargo
|
|
||||||
stable.rustc
|
|
||||||
targets.${target}.stable.rust-std
|
|
||||||
];
|
|
||||||
|
|
||||||
# naersk with a custom toolchain
|
|
||||||
naersk = pkgs.callPackage inputs.naersk {
|
|
||||||
cargo = toolchain;
|
|
||||||
rustc = toolchain;
|
|
||||||
};
|
|
||||||
|
|
||||||
# used to trick the build.rs into believing that CMake was ran **again**
|
|
||||||
fakecmake = pkgs.writeScriptBin "cmake" ''
|
|
||||||
#! ${pkgs.stdenv.shell} -e
|
|
||||||
true
|
|
||||||
'';
|
|
||||||
in
|
|
||||||
naersk.buildPackage
|
|
||||||
{
|
|
||||||
# metadata and source
|
|
||||||
name = cargoToml.package.name;
|
|
||||||
version = cargoToml.package.version;
|
|
||||||
inherit src;
|
|
||||||
|
|
||||||
cargoBuildOptions = x: x ++ [ "-p" "rp" ];
|
|
||||||
cargoTestOptions = x: x ++ [ "-p" "rp" ];
|
|
||||||
|
|
||||||
doCheck = true;
|
|
||||||
|
|
||||||
nativeBuildInputs = with pkgs; [
|
|
||||||
p.stdenv.cc
|
|
||||||
cmake # for oqs build in the oqs-sys crate
|
|
||||||
mandoc # for the built-in manual
|
|
||||||
removeReferencesTo
|
|
||||||
rustPlatform.bindgenHook # for C-bindings in the crypto libs
|
|
||||||
];
|
|
||||||
buildInputs = with p; [ bash ];
|
|
||||||
|
|
||||||
override = x: {
|
|
||||||
preBuild =
|
|
||||||
# nix defaults to building for aarch64 _without_ the armv8-a crypto
|
|
||||||
# extensions, but liboqs depens on these
|
|
||||||
(lib.optionalString (system == "aarch64-linux") ''
|
|
||||||
NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -march=armv8-a+crypto"
|
|
||||||
''
|
|
||||||
);
|
|
||||||
|
|
||||||
# fortify is only compatible with dynamic linking
|
|
||||||
hardeningDisable = lib.optional isStatic "fortify";
|
|
||||||
};
|
|
||||||
|
|
||||||
overrideMain = x: {
|
|
||||||
# CMake detects that it was served a _foreign_ target dir, and CMake
|
|
||||||
# would be executed again upon the second build step of naersk.
|
|
||||||
# By adding our specially optimized CMake version, we reduce the cost
|
|
||||||
# of recompilation by 99 % while, while avoiding any CMake errors.
|
|
||||||
nativeBuildInputs = [ (lib.hiPrio fakecmake) ] ++ x.nativeBuildInputs;
|
|
||||||
|
|
||||||
# make sure that libc is linked, under musl this is not the case per
|
|
||||||
# default
|
|
||||||
preBuild = (lib.optionalString isStatic ''
|
|
||||||
NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -lc"
|
|
||||||
'');
|
|
||||||
};
|
|
||||||
|
|
||||||
# We want to build for a specific target...
|
|
||||||
CARGO_BUILD_TARGET = target;
|
|
||||||
|
|
||||||
# ... which might require a non-default linker:
|
|
||||||
"CARGO_TARGET_${shout target}_LINKER" =
|
|
||||||
let
|
|
||||||
inherit (p.stdenv) cc;
|
|
||||||
in
|
|
||||||
"${cc}/bin/${cc.targetPrefix}cc";
|
|
||||||
|
|
||||||
meta = with pkgs.lib;
|
|
||||||
{
|
|
||||||
inherit (cargoToml.package) description homepage;
|
|
||||||
license = with licenses; [ mit asl20 ];
|
|
||||||
maintainers = [ maintainers.wucke13 ];
|
|
||||||
platforms = platforms.all;
|
|
||||||
};
|
|
||||||
} // (lib.mkIf isStatic {
|
|
||||||
# otherwise pkg-config tries to link non-existent dynamic libs
|
|
||||||
# documented here: https://docs.rs/pkg-config/latest/pkg_config/
|
|
||||||
PKG_CONFIG_ALL_STATIC = true;
|
|
||||||
|
|
||||||
# tell rust to build everything statically linked
|
|
||||||
CARGO_BUILD_RUSTFLAGS = "-C target-feature=+crt-static";
|
|
||||||
});
|
|
||||||
# a function to generate a docker image based of rosenpass
|
|
||||||
rosenpassOCI = name: pkgs.dockerTools.buildImage rec {
|
|
||||||
inherit name;
|
|
||||||
copyToRoot = pkgs.buildEnv {
|
|
||||||
name = "image-root";
|
|
||||||
paths = [ self.packages.${system}.${name} ];
|
|
||||||
pathsToLink = [ "/bin" ];
|
|
||||||
};
|
|
||||||
config.Cmd = [ "/bin/rosenpass" ];
|
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
rec {
|
{
|
||||||
packages = rec {
|
packages = {
|
||||||
default = rosenpass;
|
default = pkgs.rosenpass;
|
||||||
rosenpass = rosenpassDerivation pkgs;
|
rosenpass = pkgs.rosenpass;
|
||||||
rp = rpDerivation pkgs;
|
rosenpass-oci-image = pkgs.rosenpass-oci-image;
|
||||||
rosenpass-oci-image = rosenpassOCI "rosenpass";
|
rp = pkgs.rp;
|
||||||
|
|
||||||
# derivation for the release
|
release-package = pkgs.release-package;
|
||||||
release-package =
|
|
||||||
let
|
# for good measure, we also offer to cross compile to Linux on Arm
|
||||||
version = cargoToml.package.version;
|
aarch64-linux-rosenpass-static =
|
||||||
package =
|
pkgs.pkgsCross.aarch64-multiplatform.pkgsStatic.rosenpass;
|
||||||
if pkgs.hostPlatform.isLinux then
|
aarch64-linux-rp-static = pkgs.pkgsCross.aarch64-multiplatform.pkgsStatic.rp;
|
||||||
packages.rosenpass-static
|
}
|
||||||
else packages.rosenpass;
|
//
|
||||||
rp =
|
# We only offer static builds for linux, as this is not supported on OS X
|
||||||
if pkgs.hostPlatform.isLinux then
|
(nixpkgs.lib.attrsets.optionalAttrs pkgs.stdenv.isLinux {
|
||||||
packages.rp-static
|
rosenpass-static = pkgs.pkgsStatic.rosenpass;
|
||||||
else packages.rp;
|
rosenpass-static-oci-image = pkgs.pkgsStatic.rosenpass-oci-image;
|
||||||
oci-image =
|
rp-static = pkgs.pkgsStatic.rp;
|
||||||
if pkgs.hostPlatform.isLinux then
|
});
|
||||||
packages.rosenpass-static-oci-image
|
|
||||||
else packages.rosenpass-oci-image;
|
|
||||||
in
|
|
||||||
pkgs.runCommandNoCC "lace-result" { }
|
|
||||||
''
|
|
||||||
mkdir {bin,$out}
|
|
||||||
tar -cvf $out/rosenpass-${system}-${version}.tar \
|
|
||||||
-C ${package} bin/rosenpass \
|
|
||||||
-C ${rp} bin/rp
|
|
||||||
cp ${oci-image} \
|
|
||||||
$out/rosenpass-oci-image-${system}-${version}.tar.gz
|
|
||||||
'';
|
|
||||||
} // (if pkgs.stdenv.isLinux then rec {
|
|
||||||
rosenpass-static = rosenpassDerivation pkgs.pkgsStatic;
|
|
||||||
rp-static = rpDerivation pkgs.pkgsStatic;
|
|
||||||
rosenpass-static-oci-image = rosenpassOCI "rosenpass-static";
|
|
||||||
} else { });
|
|
||||||
}
|
}
|
||||||
))
|
))
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
### Linux specifics ###
|
### Linux specifics ###
|
||||||
#
|
#
|
||||||
@@ -341,88 +75,46 @@
|
|||||||
let
|
let
|
||||||
pkgs = import nixpkgs {
|
pkgs = import nixpkgs {
|
||||||
inherit system;
|
inherit system;
|
||||||
|
|
||||||
|
# apply our own overlay, overriding/inserting our packages as defined in ./pkgs
|
||||||
|
overlays = [ self.overlays.default ];
|
||||||
};
|
};
|
||||||
packages = self.packages.${system};
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
#
|
|
||||||
### Whitepaper ###
|
|
||||||
#
|
|
||||||
packages.whitepaper =
|
|
||||||
let
|
|
||||||
tlsetup = (pkgs.texlive.combine {
|
|
||||||
inherit (pkgs.texlive) scheme-basic acmart amsfonts ccicons
|
|
||||||
csquotes csvsimple doclicense fancyvrb fontspec gobble
|
|
||||||
koma-script ifmtarg latexmk lm markdown mathtools minted noto
|
|
||||||
nunito pgf soul unicode-math lualatex-math paralist
|
|
||||||
gitinfo2 eso-pic biblatex biblatex-trad biblatex-software
|
|
||||||
xkeyval xurl xifthen biber;
|
|
||||||
});
|
|
||||||
in
|
|
||||||
pkgs.stdenvNoCC.mkDerivation {
|
|
||||||
name = "whitepaper";
|
|
||||||
src = ./papers;
|
|
||||||
nativeBuildInputs = with pkgs; [
|
|
||||||
ncurses # tput
|
|
||||||
python3Packages.pygments
|
|
||||||
tlsetup # custom tex live scheme
|
|
||||||
which
|
|
||||||
];
|
|
||||||
buildPhase = ''
|
|
||||||
export HOME=$(mktemp -d)
|
|
||||||
latexmk -r tex/CI.rc
|
|
||||||
'';
|
|
||||||
installPhase = ''
|
|
||||||
mkdir -p $out
|
|
||||||
mv *.pdf readme.md $out/
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
|
#
|
||||||
|
### Reading materials ###
|
||||||
|
#
|
||||||
|
packages.whitepaper = pkgs.whitepaper;
|
||||||
|
|
||||||
#
|
#
|
||||||
### Proof and Proof Tools ###
|
### Proof and Proof Tools ###
|
||||||
#
|
#
|
||||||
packages.proverif-patched = pkgs.proverif.overrideAttrs (old: {
|
packages.proverif-patched = pkgs.proverif-patched;
|
||||||
postInstall = ''
|
packages.proof-proverif = pkgs.proof-proverif;
|
||||||
install -D -t $out/lib cryptoverif.pvl
|
|
||||||
'';
|
|
||||||
});
|
|
||||||
packages.proof-proverif = pkgs.stdenv.mkDerivation {
|
|
||||||
name = "rosenpass-proverif-proof";
|
|
||||||
version = "unstable";
|
|
||||||
src = pkgs.lib.sources.sourceByRegex ./. [
|
|
||||||
"analyze.sh"
|
|
||||||
"marzipan(/marzipan.awk)?"
|
|
||||||
"analysis(/.*)?"
|
|
||||||
];
|
|
||||||
nativeBuildInputs = [ pkgs.proverif pkgs.graphviz ];
|
|
||||||
CRYPTOVERIF_LIB = packages.proverif-patched + "/lib/cryptoverif.pvl";
|
|
||||||
installPhase = ''
|
|
||||||
mkdir -p $out
|
|
||||||
bash analyze.sh -color -html $out
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
### Devshells ###
|
### Devshells ###
|
||||||
#
|
#
|
||||||
devShells.default = pkgs.mkShell {
|
devShells.default = pkgs.mkShell {
|
||||||
inherit (packages.proof-proverif) CRYPTOVERIF_LIB;
|
inherit (pkgs.proof-proverif) CRYPTOVERIF_LIB;
|
||||||
inputsFrom = [ packages.default ];
|
inputsFrom = [ pkgs.rosenpass ];
|
||||||
nativeBuildInputs = with pkgs; [
|
nativeBuildInputs = with pkgs; [
|
||||||
inputs.fenix.packages.${system}.complete.toolchain
|
|
||||||
cmake # override the fakecmake from the main step above
|
|
||||||
cargo-release
|
cargo-release
|
||||||
clippy
|
clippy
|
||||||
|
rustfmt
|
||||||
nodePackages.prettier
|
nodePackages.prettier
|
||||||
nushell # for the .ci/gen-workflow-files.nu script
|
nushell # for the .ci/gen-workflow-files.nu script
|
||||||
packages.proverif-patched
|
proverif-patched
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
devShells.coverage = pkgs.mkShell {
|
devShells.coverage = pkgs.mkShell {
|
||||||
inputsFrom = [ packages.default ];
|
inputsFrom = [ pkgs.rosenpass ];
|
||||||
nativeBuildInputs = with pkgs; [ inputs.fenix.packages.${system}.complete.toolchain cargo-llvm-cov ];
|
nativeBuildInputs = [
|
||||||
|
inputs.fenix.packages.${system}.complete.toolchain
|
||||||
|
pkgs.cargo-llvm-cov
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
39
overlay.nix
Normal file
39
overlay.nix
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
final: prev: {
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
### Actual rosenpass software ###
|
||||||
|
#
|
||||||
|
rosenpass = final.callPackage ./pkgs/rosenpass.nix { };
|
||||||
|
rosenpass-oci-image = final.callPackage ./pkgs/rosenpass-oci-image.nix { };
|
||||||
|
rp = final.callPackage ./pkgs/rosenpass.nix { package = "rp"; };
|
||||||
|
|
||||||
|
release-package = final.callPackage ./pkgs/release-package.nix { };
|
||||||
|
|
||||||
|
#
|
||||||
|
### Appendix ###
|
||||||
|
#
|
||||||
|
proverif-patched = prev.proverif.overrideAttrs (old: {
|
||||||
|
postInstall = ''
|
||||||
|
install -D -t $out/lib cryptoverif.pvl
|
||||||
|
'';
|
||||||
|
});
|
||||||
|
|
||||||
|
proof-proverif = final.stdenv.mkDerivation {
|
||||||
|
name = "rosenpass-proverif-proof";
|
||||||
|
version = "unstable";
|
||||||
|
src = final.lib.sources.sourceByRegex ./. [
|
||||||
|
"analyze.sh"
|
||||||
|
"marzipan(/marzipan.awk)?"
|
||||||
|
"analysis(/.*)?"
|
||||||
|
];
|
||||||
|
nativeBuildInputs = [ final.proverif final.graphviz ];
|
||||||
|
CRYPTOVERIF_LIB = final.proverif-patched + "/lib/cryptoverif.pvl";
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out
|
||||||
|
bash analyze.sh -color -html $out
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
whitepaper = final.callPackage ./pkgs/whitepaper.nix { };
|
||||||
|
}
|
||||||
27
pkgs/release-package.nix
Normal file
27
pkgs/release-package.nix
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{ lib, stdenvNoCC, runCommandNoCC, pkgsStatic, rosenpass, rosenpass-oci-image, rp } @ args:
|
||||||
|
|
||||||
|
let
|
||||||
|
version = rosenpass.version;
|
||||||
|
|
||||||
|
# select static packages on Linux, default packages otherwise
|
||||||
|
package =
|
||||||
|
if stdenvNoCC.hostPlatform.isLinux then
|
||||||
|
pkgsStatic.rosenpass
|
||||||
|
else args.rosenpass;
|
||||||
|
rp =
|
||||||
|
if stdenvNoCC.hostPlatform.isLinux then
|
||||||
|
pkgsStatic.rp
|
||||||
|
else args.rp;
|
||||||
|
oci-image =
|
||||||
|
if stdenvNoCC.hostPlatform.isLinux then
|
||||||
|
pkgsStatic.rosenpass-oci-image
|
||||||
|
else args.rosenpass-oci-image;
|
||||||
|
in
|
||||||
|
runCommandNoCC "lace-result" { } ''
|
||||||
|
mkdir {bin,$out}
|
||||||
|
tar -cvf $out/rosenpass-${stdenvNoCC.hostPlatform.system}-${version}.tar \
|
||||||
|
-C ${package} bin/rosenpass \
|
||||||
|
-C ${rp} bin/rp
|
||||||
|
cp ${oci-image} \
|
||||||
|
$out/rosenpass-oci-image-${stdenvNoCC.hostPlatform.system}-${version}.tar.gz
|
||||||
|
''
|
||||||
11
pkgs/rosenpass-oci-image.nix
Normal file
11
pkgs/rosenpass-oci-image.nix
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{ dockerTools, buildEnv, rosenpass }:
|
||||||
|
|
||||||
|
dockerTools.buildImage {
|
||||||
|
name = rosenpass.name + "-oci";
|
||||||
|
copyToRoot = buildEnv {
|
||||||
|
name = "image-root";
|
||||||
|
paths = [ rosenpass ];
|
||||||
|
pathsToLink = [ "/bin" ];
|
||||||
|
};
|
||||||
|
config.Cmd = [ "/bin/rosenpass" ];
|
||||||
|
}
|
||||||
78
pkgs/rosenpass.nix
Normal file
78
pkgs/rosenpass.nix
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
{ lib, stdenv, rustPlatform, cmake, mandoc, removeReferencesTo, bash, package ? "rosenpass" }:
|
||||||
|
|
||||||
|
let
|
||||||
|
# whether we want to build a statically linked binary
|
||||||
|
isStatic = stdenv.targetPlatform.isStatic;
|
||||||
|
|
||||||
|
scoped = (scope: scope.result);
|
||||||
|
|
||||||
|
# source files relevant for rust
|
||||||
|
src = scoped rec {
|
||||||
|
# File suffices to include
|
||||||
|
extensions = [
|
||||||
|
"lock"
|
||||||
|
"rs"
|
||||||
|
"toml"
|
||||||
|
];
|
||||||
|
# Files to explicitly include
|
||||||
|
files = [
|
||||||
|
"to/README.md"
|
||||||
|
];
|
||||||
|
|
||||||
|
src = ../.;
|
||||||
|
filter = (path: type: scoped rec {
|
||||||
|
inherit (lib) any id removePrefix hasSuffix;
|
||||||
|
anyof = (any id);
|
||||||
|
|
||||||
|
basename = baseNameOf (toString path);
|
||||||
|
relative = removePrefix (toString src + "/") (toString path);
|
||||||
|
|
||||||
|
result = anyof [
|
||||||
|
(type == "directory")
|
||||||
|
(any (ext: hasSuffix ".${ext}" basename) extensions)
|
||||||
|
(any (file: file == relative) files)
|
||||||
|
];
|
||||||
|
});
|
||||||
|
|
||||||
|
result = lib.sources.cleanSourceWith { inherit src filter; };
|
||||||
|
};
|
||||||
|
|
||||||
|
# parsed Cargo.toml
|
||||||
|
cargoToml = builtins.fromTOML (builtins.readFile (src + "/rosenpass/Cargo.toml"));
|
||||||
|
in
|
||||||
|
rustPlatform.buildRustPackage {
|
||||||
|
name = cargoToml.package.name;
|
||||||
|
version = cargoToml.package.version;
|
||||||
|
inherit src;
|
||||||
|
|
||||||
|
cargoBuildOptions = [ "--package" package ];
|
||||||
|
cargoTestOptions = [ "--package" package ];
|
||||||
|
|
||||||
|
doCheck = true;
|
||||||
|
|
||||||
|
cargoLock = {
|
||||||
|
lockFile = src + "/Cargo.lock";
|
||||||
|
outputHashes = {
|
||||||
|
"memsec-0.6.3" = "sha256-4ri+IEqLd77cLcul3lZrmpDKj4cwuYJ8oPRAiQNGeLw=";
|
||||||
|
"uds-0.4.2" = "sha256-qlxr/iJt2AV4WryePIvqm/8/MK/iqtzegztNliR93W8=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
stdenv.cc
|
||||||
|
cmake # for oqs build in the oqs-sys crate
|
||||||
|
mandoc # for the built-in manual
|
||||||
|
removeReferencesTo
|
||||||
|
rustPlatform.bindgenHook # for C-bindings in the crypto libs
|
||||||
|
];
|
||||||
|
buildInputs = [ bash ];
|
||||||
|
|
||||||
|
hardeningDisable = lib.optional isStatic "fortify";
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
inherit (cargoToml.package) description homepage;
|
||||||
|
license = with lib.licenses; [ mit asl20 ];
|
||||||
|
maintainers = [ lib.maintainers.wucke13 ];
|
||||||
|
platforms = lib.platforms.all;
|
||||||
|
};
|
||||||
|
}
|
||||||
29
pkgs/whitepaper.nix
Normal file
29
pkgs/whitepaper.nix
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{ stdenvNoCC, texlive, ncurses, python3Packages, which }:
|
||||||
|
|
||||||
|
let
|
||||||
|
customTexLiveSetup = (texlive.combine {
|
||||||
|
inherit (texlive) acmart amsfonts biber biblatex biblatex-software
|
||||||
|
biblatex-trad ccicons csquotes csvsimple doclicense eso-pic fancyvrb
|
||||||
|
fontspec gitinfo2 gobble ifmtarg koma-script latexmk lm lualatex-math
|
||||||
|
markdown mathtools minted noto nunito paralist pgf scheme-basic soul
|
||||||
|
unicode-math upquote xifthen xkeyval xurl;
|
||||||
|
});
|
||||||
|
in
|
||||||
|
stdenvNoCC.mkDerivation {
|
||||||
|
name = "whitepaper";
|
||||||
|
src = ../papers;
|
||||||
|
nativeBuildInputs = [
|
||||||
|
ncurses # tput
|
||||||
|
python3Packages.pygments
|
||||||
|
customTexLiveSetup # custom tex live scheme
|
||||||
|
which
|
||||||
|
];
|
||||||
|
buildPhase = ''
|
||||||
|
export HOME=$(mktemp -d)
|
||||||
|
latexmk -r tex/CI.rc
|
||||||
|
'';
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out
|
||||||
|
mv *.pdf readme.md $out/
|
||||||
|
'';
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user