From 9f07a742105ceb6b07526f1d015e89aa4a241b95 Mon Sep 17 00:00:00 2001 From: Ivan Folgueira Bande Date: Wed, 11 Feb 2026 21:13:27 +0100 Subject: [PATCH] refactor nix and add nimbleDeps package --- nix/default.nix | 65 ++++++++++++++++--------------------------------- nix/deps.nix | 55 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 44 deletions(-) create mode 100644 nix/deps.nix diff --git a/nix/default.nix b/nix/default.nix index 7df58df60..d1717e89c 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -12,9 +12,6 @@ zerokitRln, }: -assert pkgs.lib.assertMsg ((src.submodules or true) == true) - "Unable to build without submodules. Append '?submodules=1#' to the URI."; - let inherit (pkgs) stdenv lib writeScriptBin callPackage; @@ -28,13 +25,22 @@ let copyWakunode2 = lib.elem "wakunode2" targets; hasKnownInstallTarget = copyLibwaku || copyLiblogosdelivery || copyWakunode2; + nimbleDeps = callPackage ./deps.nix { + inherit src version revision; + }; + in stdenv.mkDerivation { - pname = "logos-messaging-nim"; + pname = "logos-message-delivery"; + inherit src; version = "${version}-${revision}"; - inherit src; + env = { + ANDROID_SDK_ROOT="${pkgs.androidPkgs.sdk}"; + ANDROID_NDK_HOME="${pkgs.androidPkgs.ndk}"; + NIMFLAGS = "-d:disableMarchNative -d:git_revision_override=${revision}"; + XDG_CACHE_HOME = "/tmp"; + }; - # Runtime dependencies buildInputs = with pkgs; [ openssl gmp zip ]; @@ -44,17 +50,11 @@ in stdenv.mkDerivation { # Fix for Nim compiler calling 'git rev-parse' and 'lsb_release'. fakeGit = writeScriptBin "git" "echo ${version}"; in with pkgs; [ - cmake which zerokitRln nim-unwrapped-2_2 fakeGit + cmake which zerokitRln nim-unwrapped-2_2 fakeGit nimbleDeps ] ++ lib.optionals stdenv.isDarwin [ pkgs.darwin.cctools gcc # Necessary for libbacktrace ]; - # Environment variables required for Android builds - ANDROID_SDK_ROOT = "${pkgs.androidPkgs.sdk}"; - ANDROID_NDK_HOME = "${pkgs.androidPkgs.ndk}"; - NIMFLAGS = "-d:disableMarchNative -d:git_revision_override=${revision}"; - XDG_CACHE_HOME = "/tmp"; - makeFlags = targets ++ [ "V=${toString verbosity}" "QUICK_AND_DIRTY_COMPILER=${if quickAndDirty then "1" else "0"}" @@ -65,36 +65,13 @@ in stdenv.mkDerivation { ]; configurePhase = '' - patchShebangs . vendor/nimbus-build-system > /dev/null + export NIMBLE_DIR=$NIX_BUILD_TOP/nimbledeps + cp -r ${nimbleDeps}/nimbledeps $NIMBLE_DIR + cp ${nimbleDeps}/nimble.paths ./ + chmod 775 -R $NIMBLE_DIR + # Fix relative paths to absolute paths + sed -i "s|./nimbledeps|$NIMBLE_DIR|g" nimble.paths - # build_nim.sh guards "rm -rf dist/checksums" with NIX_BUILD_TOP != "/build", - # but on macOS the nix sandbox uses /private/tmp/... so the check fails and - # dist/checksums (provided via preBuild) gets deleted. Fix the check to skip - # the removal whenever NIX_BUILD_TOP is set (i.e. any nix build). - substituteInPlace vendor/nimbus-build-system/scripts/build_nim.sh \ - --replace 'if [[ "''${NIX_BUILD_TOP}" != "/build" ]]; then' \ - 'if [[ -z "''${NIX_BUILD_TOP}" ]]; then' - - make nimbus-build-system-paths - make nimbus-build-system-nimble-dir - ''; - - # For the Nim v2.2.4 built with NBS we added sat and zippy - preBuild = lib.optionalString (!useSystemNim) '' - pushd vendor/nimbus-build-system/vendor/Nim - mkdir dist - mkdir -p dist/nimble/vendor/sat - mkdir -p dist/nimble/vendor/checksums - mkdir -p dist/nimble/vendor/zippy - - cp -r ${callPackage ./nimble.nix {}}/. dist/nimble - cp -r ${callPackage ./checksums.nix {}}/. dist/checksums - cp -r ${callPackage ./csources.nix {}}/. csources_v2 - cp -r ${callPackage ./sat.nix {}}/. dist/nimble/vendor/sat - cp -r ${callPackage ./checksums.nix {}}/. dist/nimble/vendor/checksums - cp -r ${callPackage ./zippy.nix {}}/. dist/nimble/vendor/zippy - chmod 777 -R dist/nimble csources_v2 - popd ''; installPhase = if abidir != null then '' @@ -141,8 +118,8 @@ in stdenv.mkDerivation { ''; meta = with pkgs.lib; { - description = "NWaku derivation to build libwaku for mobile targets using Android NDK and Rust."; - homepage = "https://github.com/status-im/nwaku"; + description = "Logos-message-delivery derivation."; + homepage = "https://github.com/logos-messaging/logos-messaging-nim"; license = licenses.mit; platforms = stableSystems; }; diff --git a/nix/deps.nix b/nix/deps.nix new file mode 100644 index 000000000..ff7096734 --- /dev/null +++ b/nix/deps.nix @@ -0,0 +1,55 @@ +{ pkgs, stdenv, src, version, revision }: + +stdenv.mkDerivation { + pname = "logos-delivery-nimble-deps"; + version = "${version}-${revision}"; + + inherit src; + + nativeBuildInputs = with pkgs; [ + jq rsync git nimble cacert moreutils + ]; + + configurePhase = '' + export XDG_CACHE_HOME=$TMPDIR + export NIMBLE_DIR=$NIX_BUILD_TOP/nimbledir + export HOME=$TMPDIR + ''; + + buildPhase = '' + nimble --version + nimble --silent --localdeps setup + nimble --silent --localdeps install -y --depsOnly + ''; + + installPhase = '' + mkdir -p $out/nimbledeps + + cp nimble.paths $out/nimble.paths + + rsync -ra \ + --prune-empty-dirs \ + --include='*/' \ + --include='*.json' \ + --include='*.nim' \ + --include='*.nimble' \ + --exclude='*' \ + $NIMBLE_DIR/pkgs2 $out/nimbledeps + ''; + + fixupPhase = '' + # Replace build path with deterministic $out. + sed "s|$NIMBLE_DIR|./nimbledeps|g" $out/nimble.paths \ + | sort | sponge $out/nimble.paths + + # Nimble does not maintain order of files list. + for META_FILE in $(find $out -name nimblemeta.json); do + jq '.metaData.files |= sort' $META_FILE | sponge $META_FILE + done + ''; + + # Make this a fixed-output derivation to allows internet access for Nimble. + outputHash = "sha256-OnirsXLj4HMVTbk+b4fcC+1K9MSMJyae6I7JO16WDno="; + outputHashAlgo = "sha256"; + outputHashMode = "recursive"; +}