11{
22 pkgs ,
33 src ? ../. ,
4- targets ? [ "libwaku-android-arm64" ] ,
4+ # Nimbus-build-system package.
5+ nim ? null ,
6+ # Options: 0,1,2
57 verbosity ? 1 ,
6- useSystemNim ? true ,
7- quickAndDirty ? true ,
8- stableSystems ? [
9- "x86_64-linux" "aarch64-linux"
10- ] ,
8+ # Make targets
9+ targets ? [ "libwaku-android-arm64" ] ,
10+ # These are the only platforms tested in CI and considered stable.
11+ stableSystems ? [ "x86_64-linux" "aarch64-linux" ] ,
1112 abidir ? null ,
1213 zerokitRln ,
1314} :
@@ -17,24 +18,33 @@ assert pkgs.lib.assertMsg ((src.submodules or true) == true)
1718
1819let
1920 inherit ( pkgs ) stdenv lib writeScriptBin callPackage ;
21+ inherit ( lib ) any match substring optionals optionalString ;
2022
21- androidManifest = "<manifest xmlns:android=\" http://schemas.android.com/apk/res/android\" package=\" com.example.mylibrary\" />" ;
23+ # Check if build is for android platform.
24+ containsAndroid = s : ( match ".*android.*" s ) != null ;
25+ isAndroidBuild = any containsAndroid targets ;
2226
2327 tools = pkgs . callPackage ./tools.nix { } ;
2428 version = tools . findKeyValue "^version = \" ([a-f0-9.-]+)\" $" ../waku.nimble ;
2529 revision = lib . substring 0 8 ( src . rev or src . dirtyRev or "00000000" ) ;
26- copyLibwaku = lib . elem "libwaku" targets ;
27- copyLiblogosdelivery = lib . elem "liblogosdelivery" targets ;
28- copyWakunode2 = lib . elem "wakunode2" targets ;
29- hasKnownInstallTarget = copyLibwaku || copyLiblogosdelivery || copyWakunode2 ;
30+
31+ androidManifest = "<manifest xmlns:android=\" http://schemas.android.com/apk/res/android\" package=\" com.example.mylibrary\" />" ;
3032
3133in stdenv . mkDerivation {
3234 pname = "logos-messaging-nim" ;
3335 version = "${ version } -${ revision } " ;
3436
3537 inherit src ;
3638
37- # Runtime dependencies
39+ env = {
40+ # Disable CPU optimizations that make binary not portable.
41+ NIMFLAGS = "-d:disableMarchNative" ;
42+ # Optional variables required for Android builds
43+ ANDROID_SDK_ROOT = optionalString isAndroidBuild pkgs . androidPkgs . sdk ;
44+ ANDROID_NDK_HOME = optionalString isAndroidBuild pkgs . androidPkgs . ndk ;
45+ } ;
46+
47+ # Dependencies that should exist in the runtime environment.
3848 buildInputs = with pkgs ; [
3949 openssl gmp zip
4050 ] ;
@@ -44,100 +54,37 @@ in stdenv.mkDerivation {
4454 # Fix for Nim compiler calling 'git rev-parse' and 'lsb_release'.
4555 fakeGit = writeScriptBin "git" "echo ${ version } " ;
4656 in with pkgs ; [
47- cmake which zerokitRln nim-unwrapped-2_2 fakeGit
48- ] ++ lib . optionals stdenv . isDarwin [
57+ nim cmake which zerokitRln fakeGit
58+ ] ++ optionals stdenv . isDarwin [
4959 pkgs . darwin . cctools gcc # Necessary for libbacktrace
5060 ] ;
5161
52- # Environment variables required for Android builds
53- ANDROID_SDK_ROOT = "${ pkgs . androidPkgs . sdk } " ;
54- ANDROID_NDK_HOME = "${ pkgs . androidPkgs . ndk } " ;
55- NIMFLAGS = "-d:disableMarchNative -d:git_revision_override=${ revision } " ;
56- XDG_CACHE_HOME = "/tmp" ;
57-
5862 makeFlags = targets ++ [
5963 "V=${ toString verbosity } "
60- "QUICK_AND_DIRTY_COMPILER=${ if quickAndDirty then "1" else "0" } "
61- "QUICK_AND_DIRTY_NIMBLE=${ if quickAndDirty then "1" else "0" } "
62- "USE_SYSTEM_NIM=${ if useSystemNim then "1" else "0" } "
6364 "LIBRLN_FILE=${ zerokitRln } /lib/librln.${ if abidir != null then "so" else "a" } "
6465 "POSTGRES=1"
66+ # Built from nimbus-build-system via flake.
67+ "USE_SYSTEM_NIM=1"
6568 ] ;
6669
6770 configurePhase = ''
71+ # Avoid /tmp write errors.
72+ export XDG_CACHE_HOME=$TMPDIR/cache
6873 patchShebangs . vendor/nimbus-build-system > /dev/null
69-
70- # build_nim.sh guards "rm -rf dist/checksums" with NIX_BUILD_TOP != "/build",
71- # but on macOS the nix sandbox uses /private/tmp/... so the check fails and
72- # dist/checksums (provided via preBuild) gets deleted. Fix the check to skip
73- # the removal whenever NIX_BUILD_TOP is set (i.e. any nix build).
74- substituteInPlace vendor/nimbus-build-system/scripts/build_nim.sh \
75- --replace 'if [[ "'' ${NIX_BUILD_TOP}" != "/build" ]]; then' \
76- 'if [[ -z "'' ${NIX_BUILD_TOP}" ]]; then'
77-
7874 make nimbus-build-system-paths
7975 make nimbus-build-system-nimble-dir
8076 '' ;
8177
82- # For the Nim v2.2.4 built with NBS we added sat and zippy
83- preBuild = lib . optionalString ( ! useSystemNim ) ''
84- pushd vendor/nimbus-build-system/vendor/Nim
85- mkdir dist
86- mkdir -p dist/nimble/vendor/sat
87- mkdir -p dist/nimble/vendor/checksums
88- mkdir -p dist/nimble/vendor/zippy
89-
90- cp -r ${ callPackage ./nimble.nix { } } /. dist/nimble
91- cp -r ${ callPackage ./checksums.nix { } } /. dist/checksums
92- cp -r ${ callPackage ./csources.nix { } } /. csources_v2
93- cp -r ${ callPackage ./sat.nix { } } /. dist/nimble/vendor/sat
94- cp -r ${ callPackage ./checksums.nix { } } /. dist/nimble/vendor/checksums
95- cp -r ${ callPackage ./zippy.nix { } } /. dist/nimble/vendor/zippy
96- chmod 777 -R dist/nimble csources_v2
97- popd
98- '' ;
99-
100- installPhase = if abidir != null then ''
78+ installPhase = if isAndroidBuild then ''
10179 mkdir -p $out/jni
10280 cp -r ./build/android/${ abidir } /* $out/jni/
10381 echo '${ androidManifest } ' > $out/jni/AndroidManifest.xml
10482 cd $out && zip -r libwaku.aar *
10583 '' else ''
106- mkdir -p $out/bin $out/include
107-
108- # Copy artifacts from build directory (created by Make during buildPhase)
109- # Note: build/ is in the source tree, not result/ (which is a post-build symlink)
110- if [ -d build ]; then
111- ${ lib . optionalString copyLibwaku ''
112- cp build/libwaku.{so,dylib,dll,a,lib} $out/bin/ 2>/dev/null || true
113- '' }
114-
115- ${ lib . optionalString copyLiblogosdelivery ''
116- cp build/liblogosdelivery.{so,dylib,dll,a,lib} $out/bin/ 2>/dev/null || true
117- '' }
118-
119- ${ lib . optionalString copyWakunode2 ''
120- cp build/wakunode2 $out/bin/ 2>/dev/null || true
121- '' }
122-
123- ${ lib . optionalString ( ! hasKnownInstallTarget ) ''
124- cp build/lib*.{so,dylib,dll,a,lib} $out/bin/ 2>/dev/null || true
125- '' }
126- fi
127-
128- # Copy header files
129- ${ lib . optionalString copyLibwaku ''
130- cp library/libwaku.h $out/include/ 2>/dev/null || true
131- '' }
132-
133- ${ lib . optionalString copyLiblogosdelivery ''
134- cp liblogosdelivery/liblogosdelivery.h $out/include/ 2>/dev/null || true
135- '' }
136-
137- ${ lib . optionalString ( ! hasKnownInstallTarget ) ''
138- cp library/libwaku.h $out/include/ 2>/dev/null || true
139- cp liblogosdelivery/liblogosdelivery.h $out/include/ 2>/dev/null || true
140- '' }
84+ mkdir -p $out/bin $out/lib $out/include
85+ cp build/waku* $out/bin/ || true
86+ cp build/lib* $out/lib/ || true
87+ cp lib*/lib*.h $out/include/
14188 '' ;
14289
14390 meta = with pkgs . lib ; {
0 commit comments