diff --git a/flake.nix b/flake.nix index 22200a5..ea61f17 100644 --- a/flake.nix +++ b/flake.nix @@ -19,19 +19,41 @@ "i686-windows" ]; forAllSystems = nixpkgs.lib.genAttrs stableSystems; - overlays = [ (import rust-overlay) ]; + overlays = [ + (import rust-overlay) + (f: p: { inherit rust-overlay; }) + ]; pkgsFor = forAllSystems (system: import nixpkgs { inherit system overlays; }); in rec { packages = forAllSystems (system: let pkgs = pkgsFor.${system}; + buildPackage = pkgs.callPackage ./nix/default.nix; + buildRln = (buildPackage { src = self; project = "rln"; }).override; in rec { - zerokit-android-arm64 = pkgs.callPackage ./nix/default.nix { + rln = buildRln { + features = "arkzkey"; + }; + + rln-linux-arm64 = buildRln { + target-platform = "aarch64-multiplatform"; + rust-target = "aarch64-unknown-linux-gnu"; + }; + + rln-android-arm64 = buildRln { target-platform = "aarch64-android-prebuilt"; rust-target = "aarch64-linux-android"; - inherit rust-overlay; }; - default = zerokit-android-arm64; + + rln-ios-arm64 = buildRln { + target-platform = "aarch64-darwin"; + rust-target = "aarch64-apple-ios"; + }; + + # TODO: Remove legacy name for RLN android library + zerokit-android-arm64 = rln-android-arm64; + + default = rln; }); devShells = forAllSystems (system: let @@ -39,20 +61,10 @@ in { default = pkgs.mkShell { buildInputs = with pkgs; [ - git - cmake - cargo-make - binaryen - ninja - gnuplot - rustup - xz + git cmake cargo-make rustup + binaryen ninja gnuplot rust-bin.stable.latest.default ]; - # Shared library liblzma.so.5 used by wasm-pack - shellHook = '' - export LD_LIBRARY_PATH="${pkgs.xz.out}/lib:$LD_LIBRARY_PATH" - ''; }; }); }; diff --git a/nix/default.nix b/nix/default.nix index eb53d60..4c4acc0 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -1,8 +1,12 @@ { pkgs, rust-overlay, - target-platform ? "aarch64-android-prebuilt", - rust-target ? "aarch64-linux-android", + project, + src ? ../., + release ? true, + features ? "arkzkey", + target-platform ? null, + rust-target ? null, }: let @@ -20,28 +24,37 @@ let }; in rustPlatform.buildRustPackage { pname = "zerokit"; - version = "nightly"; + version = if src ? rev then src.rev else "nightly"; - src = ../.; + # Improve caching of sources + src = builtins.path { path = src; name = "zerokit"; }; cargoLock = { lockFile = ../Cargo.lock; allowBuiltinFetchGit = true; }; + doCheck = false; + CARGO_HOME = "/tmp"; buildPhase = '' - pushd rln - cargo rustc --crate-type=cdylib --release --lib --target=${rust-target} - popd + cargo build --lib \ + ${if release then "--release" else ""} \ + ${if rust-target != null then "--target=${rust-target}" else ""} \ + ${if features != null then "--features=${features}" else ""} \ + --manifest-path ${project}/Cargo.toml ''; installPhase = '' mkdir -p $out/ - cp ./target/${rust-target}/release/librln.so $out/ + for file in $(find target -name 'librln.*' | grep -v deps/); do + mkdir -p $out/$(dirname $file) + cp -r $file $out/$file + done ''; + meta = with pkgs.lib; { description = "Zerokit"; license = licenses.mit; diff --git a/rln/Cargo.toml b/rln/Cargo.toml index 20d05be..dd1d9a6 100644 --- a/rln/Cargo.toml +++ b/rln/Cargo.toml @@ -9,7 +9,7 @@ homepage = "https://vac.dev" repository = "https://github.com/vacp2p/zerokit" [lib] -crate-type = ["rlib", "staticlib"] +crate-type = ["rlib", "staticlib", "cdylib"] bench = false # This flag disable cargo doctests, i.e. testing example code-snippets in documentation