Files
nomos/flake.nix
T
2026-08-06 08:09:42 +00:00

137 lines
4.0 KiB
Nix

{
description = "Development environment for Logos blockchain node.";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
rust-overlay = {
url = "github:oxalica/rust-overlay/b99d48435bc3e34309d2c7ae6f7d45e77a156c38";
inputs.nixpkgs.follows = "nixpkgs";
};
crane.url = "github:ipetkov/crane";
# Must stay in sync with the lbc-* tags in Cargo.toml.
logos-blockchain-circuits = {
url = "github:logos-blockchain/logos-blockchain-circuits/v0.5.5";
};
# Must stay in sync with the rust-rapidsnark rev in Cargo.toml.
rust-rapidsnark = {
url = "github:logos-blockchain/logos-blockchain-rust-rapidsnark/e91187f8ccb5bbfc7bb00dac88169112428da78f";
};
};
outputs =
{
nixpkgs,
rust-overlay,
crane,
logos-blockchain-circuits,
rust-rapidsnark,
...
}:
let
systems = [
"x86_64-linux"
"aarch64-linux"
"aarch64-darwin"
"x86_64-darwin"
];
forAll = nixpkgs.lib.genAttrs systems;
mkPkgs =
system:
import nixpkgs {
inherit system;
overlays = [ rust-overlay.overlays.default ];
};
rustVersion = "1.97.1";
in
{
packages = forAll (
system:
let
pkgs = mkPkgs system;
rustToolchain = pkgs.rust-bin.stable.${rustVersion}.default;
craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain;
src = pkgs.lib.cleanSourceWith {
src = craneLib.path ./.;
filter = path: type:
(pkgs.lib.hasSuffix "nodes/node/binary/src/config/deployment/settings.yaml" path) ||
(craneLib.filterCargoSources path type);
};
crateName = craneLib.crateNameFromCargoToml { inherit src; };
commonArgs = {
pname = "logos-blockchain-c";
cargoExtraArgs = "-p logos-blockchain-c";
version = crateName.version;
doCheck = false;
inherit src;
buildInputs = [ pkgs.openssl ]
++ pkgs.lib.optionals pkgs.stdenv.isDarwin [ pkgs.libiconv ];
nativeBuildInputs = [
pkgs.pkg-config
pkgs.clang
pkgs.llvmPackages.libclang.lib
];
LIBCLANG_PATH = "${pkgs.llvmPackages.libclang.lib}/lib";
LBC_ROOT_DIR = logos-blockchain-circuits.packages.${system}.default;
RAPIDSNARK_LIB_DIR = rust-rapidsnark.packages.${system}.rapidsnark;
} // pkgs.lib.optionalAttrs pkgs.stdenv.isDarwin {
RUSTFLAGS = "-L ${pkgs.libiconv}/lib";
};
logosBlockchainDependencies = craneLib.buildDepsOnly (commonArgs);
logosBlockChainC = craneLib.buildPackage (
commonArgs
// {
inherit logosBlockchainDependencies;
postInstall = ''
mkdir -p $out/include
cp c-bindings/logos_blockchain.h $out/include/
'' + pkgs.lib.optionalString pkgs.stdenv.isDarwin ''
install_name_tool -id @rpath/liblogos_blockchain.dylib $out/lib/liblogos_blockchain.dylib
'';
}
);
in
{
logos-blockchain-c = logosBlockChainC;
default = logosBlockChainC;
}
);
devShells = forAll (
system:
let
pkgs = mkPkgs system;
in
{
research = pkgs.mkShell {
name = "research";
buildInputs = [
pkgs.pkg-config
pkgs.rust-bin.stable.${rustVersion}.default
pkgs.clang
pkgs.llvmPackages.libclang
pkgs.openssl.dev
];
shellHook = ''
export LIBCLANG_PATH="${pkgs.llvmPackages.libclang.lib}/lib"
export LBC_ROOT_DIR=${logos-blockchain-circuits.packages.${system}.default}
export RAPIDSNARK_LIB_DIR=${rust-rapidsnark.packages.${system}.rapidsnark}
'';
};
}
);
};
}