nix: make derivation and update shell (#1003)
* nix: make derivation and update shell Create a structure for nix files. Add the derivation file which is using system Nim to compile Codex. Referenced issue: https://github.com/codex-storage/nim-codex/issues/940 Signed-off-by: markoburcul <marko@status.im> * nim-circom-compat: update Include commit which allows building circom-compat-ffi using Nix(doesn't affect current usage of the submodule). Referenced issue: https://github.com/codex-storage/nim-codex/issues/940 Signed-off-by: markoburcul <marko@status.im> * makefile: fix for detecting linux arch Signed-off-by: markoburcul <marko@status.im> --------- Signed-off-by: markoburcul <marko@status.im>
This commit is contained in:
parent
fb4577f25c
commit
0c6784da7e
2
Makefile
2
Makefile
|
@ -48,7 +48,7 @@ ifeq ($(OS),Windows_NT)
|
||||||
ARCH = arm64
|
ARCH = arm64
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
UNAME_P := $(shell uname -p)
|
UNAME_P := $(shell uname -m)
|
||||||
ifneq ($(filter $(UNAME_P), i686 i386 x86_64),)
|
ifneq ($(filter $(UNAME_P), i686 i386 x86_64),)
|
||||||
ARCH = x86_64
|
ARCH = x86_64
|
||||||
endif
|
endif
|
||||||
|
|
37
flake.lock
37
flake.lock
|
@ -1,6 +1,40 @@
|
||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
|
"circom-compat": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1732627240,
|
||||||
|
"narHash": "sha256-GvJTiBWBv799i5ZCCc4gF86bnQY/nZvx0vCPi1+OPD4=",
|
||||||
|
"owner": "codex-storage",
|
||||||
|
"repo": "circom-compat-ffi",
|
||||||
|
"rev": "297c46fdc7d8a8fd53c8076b0be77334e4a54447",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "codex-storage",
|
||||||
|
"repo": "circom-compat-ffi",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1731386116,
|
||||||
|
"narHash": "sha256-lKA770aUmjPHdTaJWnP3yQ9OI1TigenUqVC3wweqZuI=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "689fed12a013f56d4c4d3f612489634267d86529",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-24.05",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1729449015,
|
"lastModified": 1729449015,
|
||||||
"narHash": "sha256-Gf04dXB0n4q0A9G5nTGH3zuMGr6jtJppqdeljxua1fo=",
|
"narHash": "sha256-Gf04dXB0n4q0A9G5nTGH3zuMGr6jtJppqdeljxua1fo=",
|
||||||
|
@ -18,7 +52,8 @@
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": "nixpkgs"
|
"circom-compat": "circom-compat",
|
||||||
|
"nixpkgs": "nixpkgs_2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
36
flake.nix
36
flake.nix
|
@ -3,32 +3,40 @@
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05";
|
||||||
|
circom-compat.url = "github:codex-storage/circom-compat-ffi";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, nixpkgs }:
|
outputs = { self, nixpkgs, circom-compat}:
|
||||||
let
|
let
|
||||||
supportedSystems = [
|
stableSystems = [
|
||||||
"x86_64-linux" "aarch64-linux"
|
"x86_64-linux" "aarch64-linux"
|
||||||
"x86_64-darwin" "aarch64-darwin"
|
"x86_64-darwin" "aarch64-darwin"
|
||||||
];
|
];
|
||||||
forAllSystems = f: nixpkgs.lib.genAttrs supportedSystems (system: f system);
|
forAllSystems = f: nixpkgs.lib.genAttrs stableSystems (system: f system);
|
||||||
pkgsFor = forAllSystems (system: import nixpkgs { inherit system; });
|
pkgsFor = forAllSystems (system: import nixpkgs { inherit system; });
|
||||||
in rec {
|
in rec {
|
||||||
|
packages = forAllSystems (system: let
|
||||||
|
circomCompatPkg = circom-compat.packages.${system}.default;
|
||||||
|
buildTarget = pkgsFor.${system}.callPackage ./nix/default.nix {
|
||||||
|
inherit stableSystems circomCompatPkg;
|
||||||
|
src = self;
|
||||||
|
};
|
||||||
|
build = targets: buildTarget.override { inherit targets; };
|
||||||
|
in rec {
|
||||||
|
codex = build ["all"];
|
||||||
|
default = codex;
|
||||||
|
});
|
||||||
|
|
||||||
devShells = forAllSystems (system: let
|
devShells = forAllSystems (system: let
|
||||||
pkgs = pkgsFor.${system};
|
pkgs = pkgsFor.${system};
|
||||||
inherit (pkgs) lib stdenv mkShell;
|
|
||||||
in {
|
in {
|
||||||
default = mkShell.override { stdenv = pkgs.gcc11Stdenv; } {
|
default = pkgs.mkShell {
|
||||||
buildInputs = with pkgs; [
|
inputsFrom = [
|
||||||
# General
|
packages.${system}.codex
|
||||||
git pkg-config openssl lsb-release
|
circom-compat.packages.${system}.default
|
||||||
# Build
|
|
||||||
rustc cargo nimble gcc11 cmake nim-unwrapped-1
|
|
||||||
# Libraries
|
|
||||||
gmp llvmPackages.openmp
|
|
||||||
# Tests
|
|
||||||
nodejs_18
|
|
||||||
];
|
];
|
||||||
|
# Not using buildInputs to override fakeGit and fakeCargo.
|
||||||
|
nativeBuildInputs = with pkgs; [ git cargo nodejs_18 ];
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
# Usage
|
||||||
|
|
||||||
|
## Shell
|
||||||
|
|
||||||
|
A development shell can be started using:
|
||||||
|
```sh
|
||||||
|
nix develop
|
||||||
|
```
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
To build a Codex you can use:
|
||||||
|
```sh
|
||||||
|
nix build '.?submodules=1#codex'
|
||||||
|
```
|
||||||
|
The `?submodules=1` part should eventually not be necessary.
|
||||||
|
For more details see:
|
||||||
|
https://github.com/NixOS/nix/issues/4423
|
||||||
|
|
||||||
|
It can be also done without even cloning the repo:
|
||||||
|
```sh
|
||||||
|
nix build 'github:codex-storage/nim-codex?submodules=1'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Running
|
||||||
|
|
||||||
|
```sh
|
||||||
|
nix run 'github:codex-storage/nim-codex?submodules=1'
|
||||||
|
```
|
|
@ -0,0 +1,84 @@
|
||||||
|
{
|
||||||
|
pkgs ? import <nixpkgs> { },
|
||||||
|
src ? ../.,
|
||||||
|
targets ? ["all"],
|
||||||
|
# Options: 0,1,2
|
||||||
|
verbosity ? 0,
|
||||||
|
# Use system Nim compiler instead of building it with nimbus-build-system
|
||||||
|
useSystemNim ? true,
|
||||||
|
commit ? builtins.substring 0 7 (src.rev or "dirty"),
|
||||||
|
# These are the only platforms tested in CI and considered stable.
|
||||||
|
stableSystems ? [
|
||||||
|
"x86_64-linux" "aarch64-linux"
|
||||||
|
"x86_64-darwin" "aarch64-darwin"
|
||||||
|
],
|
||||||
|
circomCompatPkg ? (
|
||||||
|
builtins.getFlake "github:codex-storage/circom-compat-ffi"
|
||||||
|
).packages.${builtins.currentSystem}.default
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
inherit (pkgs) stdenv lib writeScriptBin callPackage;
|
||||||
|
|
||||||
|
revision = lib.substring 0 8 (src.rev or "dirty");
|
||||||
|
|
||||||
|
tools = callPackage ./tools.nix {};
|
||||||
|
in pkgs.gcc11Stdenv.mkDerivation rec {
|
||||||
|
|
||||||
|
pname = "codex";
|
||||||
|
|
||||||
|
version = "${tools.findKeyValue "version = \"([0-9]+\.[0-9]+\.[0-9]+)\"" ../codex.nimble}-${revision}";
|
||||||
|
|
||||||
|
inherit src;
|
||||||
|
|
||||||
|
# Dependencies that should exist in the runtime environment.
|
||||||
|
buildInputs = with pkgs; [
|
||||||
|
openssl
|
||||||
|
gmp
|
||||||
|
];
|
||||||
|
|
||||||
|
# Dependencies that should only exist in the build environment.
|
||||||
|
nativeBuildInputs = let
|
||||||
|
# Fix for Nim compiler calling 'git rev-parse' and 'lsb_release'.
|
||||||
|
fakeGit = writeScriptBin "git" "echo ${version}";
|
||||||
|
# Fix for the nim-circom-compat-ffi package that is built with cargo.
|
||||||
|
fakeCargo = writeScriptBin "cargo" "echo ${version}";
|
||||||
|
in
|
||||||
|
with pkgs; [
|
||||||
|
cmake
|
||||||
|
pkg-config
|
||||||
|
nimble
|
||||||
|
which
|
||||||
|
nim-unwrapped-1
|
||||||
|
lsb-release
|
||||||
|
circomCompatPkg
|
||||||
|
fakeGit
|
||||||
|
fakeCargo
|
||||||
|
];
|
||||||
|
|
||||||
|
# Disable CPU optmizations that make binary not portable.
|
||||||
|
NIMFLAGS = "-d:disableMarchNative -d:git_revision_override=${revision}";
|
||||||
|
# Avoid Nim cache permission errors.
|
||||||
|
XDG_CACHE_HOME = "/tmp";
|
||||||
|
|
||||||
|
makeFlags = targets ++ [
|
||||||
|
"V=${toString verbosity}"
|
||||||
|
"USE_SYSTEM_NIM=${if useSystemNim then "1" else "0"}"
|
||||||
|
];
|
||||||
|
|
||||||
|
configurePhase = ''
|
||||||
|
patchShebangs . > /dev/null
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/bin
|
||||||
|
cp build/codex $out/bin/
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with pkgs.lib; {
|
||||||
|
description = "Codex storage system";
|
||||||
|
homepage = "https://github.com/codex-storage/nim-codex";
|
||||||
|
license = licenses.mit;
|
||||||
|
platforms = stableSystems;
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
{ pkgs ? import <nixpkgs> { } }:
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
inherit (pkgs.lib) fileContents last splitString flatten remove;
|
||||||
|
inherit (builtins) map match;
|
||||||
|
in {
|
||||||
|
findKeyValue = regex: sourceFile:
|
||||||
|
let
|
||||||
|
linesFrom = file: splitString "\n" (fileContents file);
|
||||||
|
matching = regex: lines: map (line: match regex line) lines;
|
||||||
|
extractMatch = matches: last (flatten (remove null matches));
|
||||||
|
in
|
||||||
|
extractMatch (matching regex (linesFrom sourceFile));
|
||||||
|
}
|
|
@ -1 +1 @@
|
||||||
Subproject commit e710e4c333f367353aaa1ee82a55a47326b63a65
|
Subproject commit d3fb903945c3895f28a2e50685745e0a9762ece5
|
Loading…
Reference in New Issue