logos-messaging-nim/nix/default.nix
2026-02-12 01:03:54 +01:00

102 lines
2.9 KiB
Nix

{
pkgs,
src ? ../.,
targets ? ["libwaku-android-arm64"],
verbosity ? 1,
useSystemNim ? true,
quickAndDirty ? true,
stableSystems ? [
"x86_64-linux" "aarch64-linux"
],
abidir ? null,
zerokitRln,
}:
let
inherit (pkgs) stdenv lib writeScriptBin callPackage;
androidManifest = "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" package=\"com.example.mylibrary\" />";
tools = pkgs.callPackage ./tools.nix {};
version = tools.findKeyValue "^version = \"([a-f0-9.-]+)\"$" ../waku.nimble;
revision = lib.substring 0 8 (src.rev or src.dirtyRev or "00000000");
nimPinned = pkgs.callPackage ./nim.nix {};
nimblePinned = pkgs.callPackage ./nimble.nix { inherit nimPinned; };
nimbleDeps = callPackage ./deps.nix {
inherit src version revision;
mynimble = nimblePinned;
};
in stdenv.mkDerivation {
pname = "logos-message-delivery";
inherit src;
version = "${version}-${revision}";
env = {
ANDROID_SDK_ROOT="${pkgs.androidPkgs.sdk}";
ANDROID_NDK_HOME="${pkgs.androidPkgs.ndk}";
NIMFLAGS = "-d:disableMarchNative -d:git_revision_override=${revision}";
};
buildInputs = with pkgs; [
openssl gmp zip nimble
];
# 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}";
in with pkgs; [
cmake which zerokitRln fakeGit nimbleDeps cargo
] ++ lib.optionals stdenv.isDarwin [
pkgs.darwin.cctools gcc # Necessary for libbacktrace
];
makeFlags = targets ++ [
"V=${toString verbosity}"
"QUICK_AND_DIRTY_COMPILER=${if quickAndDirty then "1" else "0"}"
"QUICK_AND_DIRTY_NIMBLE=${if quickAndDirty then "1" else "0"}"
"USE_SYSTEM_NIM=${if useSystemNim then "1" else "0"}"
"LIBRLN_FILE=${zerokitRln}/lib/librln.${if abidir != null then "so" else "a"}"
];
configurePhase = ''
export HOME=$TMPDIR
export XDG_CACHE_HOME=$TMPDIR
export NIMBLE_DIR=$TMPDIR/nimbledir
mkdir -p $NIMBLE_DIR/pkgs2/nim-2.2.6/bin
cp -r ${nimPinned}/bin/* $NIMBLE_DIR/pkgs2/nim-2.2.6/bin/
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
'';
installPhase = if abidir != null then ''
mkdir -p $out/jni
cp -r ./build/android/${abidir}/* $out/jni/
echo '${androidManifest}' > $out/jni/AndroidManifest.xml
cd $out && zip -r libwaku.aar *
'' else ''
mkdir -p $out/bin $out/include
# Copy library files
cp build/* $out/bin/ 2>/dev/null || true
# Copy the header file
cp library/libwaku.h $out/include/
'';
meta = with pkgs.lib; {
description = "Logos-message-delivery derivation.";
homepage = "https://github.com/logos-messaging/logos-messaging-nim";
license = licenses.mit;
platforms = stableSystems;
};
}