mirror of
https://github.com/logos-blockchain/logos-blockchain.git
synced 2026-07-30 02:53:30 +00:00
128 lines
3.7 KiB
Nix
128 lines
3.7 KiB
Nix
{
|
|
description = "Development environment for Logos blockchain node.";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
|
|
rust-overlay = {
|
|
url = "github:oxalica/rust-overlay/40b0a3a193e0840c76174b4a322874c8f6dd0a63";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
|
|
crane.url = "github:ipetkov/crane";
|
|
|
|
logos-blockchain-circuits = {
|
|
url = "github:logos-blockchain/logos-blockchain-circuits";
|
|
};
|
|
};
|
|
|
|
outputs =
|
|
{
|
|
nixpkgs,
|
|
rust-overlay,
|
|
crane,
|
|
logos-blockchain-circuits,
|
|
...
|
|
}:
|
|
let
|
|
systems = [
|
|
"x86_64-linux"
|
|
"aarch64-linux"
|
|
"aarch64-darwin"
|
|
"x86_64-windows"
|
|
];
|
|
|
|
forAll = nixpkgs.lib.genAttrs systems;
|
|
|
|
mkPkgs =
|
|
system:
|
|
import nixpkgs {
|
|
inherit system;
|
|
overlays = [ rust-overlay.overlays.default ];
|
|
};
|
|
|
|
rustVersion = "1.96.0";
|
|
in
|
|
{
|
|
packages = forAll (
|
|
system:
|
|
let
|
|
pkgs = mkPkgs system;
|
|
rustToolchain = pkgs.rust-bin.stable.${rustVersion}.default;
|
|
craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain;
|
|
src = craneLib.cleanCargoSource ./.;
|
|
crateName = craneLib.crateNameFromCargoToml { inherit src; };
|
|
|
|
commonArgs = {
|
|
pname = "logos-blockchain-c";
|
|
cargoExtraArgs = "-p logos-blockchain-c";
|
|
version = crateName.version;
|
|
|
|
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";
|
|
LOGOS_BLOCKCHAIN_CIRCUITS = logos-blockchain-circuits.packages.${system}.default;
|
|
} // 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/circuits $out/include
|
|
cp -r ${logos-blockchain-circuits.packages.${system}.default}/* $out/circuits/
|
|
cp c-bindings/logos_blockchain.h $out/include/
|
|
|
|
# Files copied from the Nix store are read-only.
|
|
# Crane modifies files in $out after install, so they must be writable during the build.
|
|
# Nix makes the final output read-only again, so this is safe.
|
|
chmod -R u+w $out/circuits
|
|
'' + 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 LOGOS_BLOCKCHAIN_CIRCUITS=${logos-blockchain-circuits.packages.${system}.default}
|
|
'';
|
|
};
|
|
}
|
|
);
|
|
};
|
|
}
|