Skip to content

Commit 9462af9

Browse files
committed
refactor: split flake.nix into muiltple files
1 parent 5adf745 commit 9462af9

11 files changed

Lines changed: 373 additions & 411 deletions

flake.nix

Lines changed: 33 additions & 411 deletions
Large diffs are not rendered by default.

nix/android-package.nix

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
{ pkgs, naersk, fenixPkgs, system, version, rustSrc, android }:
2+
arch: packageName:
3+
let
4+
androidSdk = android.sdk.${system} (sdkPkgs:
5+
builtins.attrValues {
6+
inherit (sdkPkgs) ndk-27-2-12479018 cmdline-tools-latest;
7+
});
8+
androidNdkRoot = "${androidSdk}/share/android-sdk/ndk/27.2.12479018";
9+
androidAttrs = {
10+
armeabi-v7a = {
11+
cc = "armv7a-linux-androideabi21-clang";
12+
rustTarget = "armv7-linux-androideabi";
13+
};
14+
arm64-v8a = {
15+
cc = "aarch64-linux-android21-clang";
16+
rustTarget = "aarch64-linux-android";
17+
};
18+
x86 = {
19+
cc = "i686-linux-android21-clang";
20+
rustTarget = "i686-linux-android";
21+
};
22+
x86_64 = {
23+
cc = "x86_64-linux-android21-clang";
24+
rustTarget = "x86_64-linux-android";
25+
};
26+
};
27+
28+
rustTarget = androidAttrs.${arch}.rustTarget;
29+
toolchain = fenixPkgs.combine [
30+
fenixPkgs.stable.rustc
31+
fenixPkgs.stable.cargo
32+
fenixPkgs.targets.${rustTarget}.stable.rust-std
33+
];
34+
naersk-lib = pkgs.callPackage naersk {
35+
cargo = toolchain;
36+
rustc = toolchain;
37+
};
38+
targetToolchain = "${androidNdkRoot}/toolchains/llvm/prebuilt/linux-x86_64";
39+
targetCcName = androidAttrs.${arch}.cc;
40+
targetCc = "${targetToolchain}/bin/${targetCcName}";
41+
in
42+
naersk-lib.buildPackage {
43+
pname = packageName;
44+
cargoBuildOptions = x: x ++ [ "--package" packageName ];
45+
inherit version;
46+
strictDeps = true;
47+
src = rustSrc;
48+
nativeBuildInputs = [
49+
pkgs.perl # Needed to build vendored OpenSSL.
50+
];
51+
auditable = false; # Avoid cargo-auditable failures.
52+
doCheck = false; # Disable test as it requires network access.
53+
54+
CARGO_BUILD_TARGET = rustTarget;
55+
TARGET_CC = "${targetCc}";
56+
CARGO_BUILD_RUSTFLAGS = [
57+
"-C"
58+
"linker=${targetCc}"
59+
];
60+
61+
CC = "${targetCc}";
62+
LD = "${targetCc}";
63+
}

nix/c-docs.nix

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{ pkgs, version }:
2+
pkgs.stdenv.mkDerivation {
3+
pname = "docs";
4+
inherit version;
5+
src = pkgs.lib.cleanSource ../.;
6+
nativeBuildInputs = [ pkgs.doxygen ];
7+
buildPhase = ''scripts/run-doxygen.sh'';
8+
installPhase = ''mkdir -p $out; cp -av deltachat-ffi/html deltachat-ffi/xml $out'';
9+
}

nix/cross-rust-package.nix

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
{ pkgs, nixpkgs, arch2targets, naersk, fenixPkgs, system, rustSrc, version }:
2+
arch: packageName:
3+
let
4+
crossTarget = arch2targets."${arch}";
5+
pkgsCross = import nixpkgs {
6+
system = system;
7+
crossSystem.config = crossTarget;
8+
};
9+
rustTarget = pkgsCross.stdenv.hostPlatform.rust.rustcTarget;
10+
toolchain = fenixPkgs.combine [
11+
fenixPkgs.stable.rustc
12+
fenixPkgs.stable.cargo
13+
fenixPkgs.targets.${rustTarget}.stable.rust-std
14+
];
15+
naersk-lib = pkgs.callPackage naersk {
16+
cargo = toolchain;
17+
rustc = toolchain;
18+
};
19+
targetCc = "${pkgsCross.stdenv.cc}/bin/${pkgsCross.stdenv.cc.targetPrefix}cc";
20+
in
21+
naersk-lib.buildPackage {
22+
pname = packageName;
23+
cargoBuildOptions = x: x ++ [ "--package" packageName ];
24+
inherit version;
25+
strictDeps = true;
26+
src = rustSrc;
27+
nativeBuildInputs = [
28+
pkgs.perl # Needed to build vendored OpenSSL.
29+
];
30+
auditable = false; # Avoid cargo-auditable failures.
31+
doCheck = false; # Disable test as it requires network access.
32+
33+
CARGO_TARGET_X86_64_APPLE_DARWIN_RUSTFLAGS = "-Clink-args=-L${pkgsCross.libiconv}/lib";
34+
CARGO_TARGET_AARCH64_APPLE_DARWIN_RUSTFLAGS = "-Clink-args=-L${pkgsCross.libiconv}/lib";
35+
36+
CARGO_BUILD_TARGET = rustTarget;
37+
TARGET_CC = "${targetCc}";
38+
CARGO_BUILD_RUSTFLAGS = [
39+
"-C"
40+
"linker=${targetCc}"
41+
];
42+
43+
CC = "${targetCc}";
44+
LD = "${targetCc}";
45+
}

nix/deltachat-rpc-client.nix

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{ pkgs, version }:
2+
pkgs.python3Packages.buildPythonPackage {
3+
pname = "deltachat-rpc-client";
4+
inherit version;
5+
src = pkgs.lib.cleanSource ../deltachat-rpc-client;
6+
format = "pyproject";
7+
propagatedBuildInputs = [
8+
pkgs.python3Packages.setuptools
9+
pkgs.python3Packages.imap-tools
10+
];
11+
}

nix/libdeltachat.nix

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{ pkgs, fenixToolchain, rustSrc, cargoLock, fenixPkgs, version }:
2+
let
3+
rustPlatform = (pkgs.makeRustPlatform {
4+
cargo = fenixToolchain;
5+
rustc = fenixToolchain;
6+
});
7+
in
8+
pkgs.stdenv.mkDerivation {
9+
pname = "libdeltachat";
10+
inherit version;
11+
src = rustSrc;
12+
cargoDeps = pkgs.rustPlatform.importCargoLock cargoLock;
13+
14+
nativeBuildInputs = [
15+
pkgs.perl # Needed to build vendored OpenSSL.
16+
pkgs.cmake
17+
rustPlatform.cargoSetupHook
18+
fenixPkgs.stable.rustc
19+
fenixPkgs.stable.cargo
20+
];
21+
22+
postInstall = ''
23+
substituteInPlace $out/include/deltachat.h \
24+
--replace __FILE__ '"${placeholder "out"}/include/deltachat.h"'
25+
'';
26+
}

nix/python-docs.nix

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{ pkgs, version, deltachat-python, deltachat-rpc-client }:
2+
pkgs.stdenv.mkDerivation {
3+
pname = "docs";
4+
inherit version;
5+
src = pkgs.lib.cleanSource ../.;
6+
buildInputs = [
7+
deltachat-python
8+
deltachat-rpc-client
9+
pkgs.python3Packages.breathe
10+
pkgs.python3Packages.sphinx-rtd-theme
11+
];
12+
nativeBuildInputs = [ pkgs.sphinx ];
13+
buildPhase = ''sphinx-build -b html -a python/doc/ dist/html'';
14+
installPhase = ''mkdir -p $out; cp -av dist/html $out'';
15+
}

nix/shell.nix

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{ nixpkgs, fenix, system }:
2+
let
3+
pkgs = import nixpkgs {
4+
inherit system;
5+
overlays = [ fenix.overlays.default ];
6+
};
7+
in
8+
pkgs.mkShell {
9+
buildInputs = with pkgs; [
10+
(fenix.packages.${system}.complete.withComponents [
11+
"cargo"
12+
"clippy"
13+
"rust-src"
14+
"rustc"
15+
"rustfmt"
16+
])
17+
cargo-deny
18+
rust-analyzer-nightly
19+
cargo-nextest
20+
perl # needed to build vendored OpenSSL
21+
git-cliff
22+
(python3.withPackages (pypkgs: [
23+
pypkgs.tox
24+
]))
25+
nodejs
26+
];
27+
}

nix/wheel.nix

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{ pkgs, nix-filter, version, root }:
2+
{ rpc-server, arch, binaryName ? "deltachat-rpc-server" }:
3+
pkgs.stdenv.mkDerivation {
4+
pname = "deltachat-rpc-server-${arch}-wheel";
5+
inherit version;
6+
src = nix-filter.lib {
7+
inherit root;
8+
include = [
9+
"scripts/wheel-rpc-server.py"
10+
"deltachat-rpc-server/README.md"
11+
"LICENSE"
12+
"Cargo.toml"
13+
];
14+
};
15+
nativeBuildInputs = [
16+
pkgs.python3
17+
pkgs.python3Packages.wheel
18+
];
19+
buildInputs = [
20+
rpc-server
21+
];
22+
buildPhase = ''
23+
mkdir tmp
24+
cp ${rpc-server}/bin/${binaryName} tmp/${binaryName}
25+
python3 scripts/wheel-rpc-server.py ${arch} tmp/${binaryName}
26+
'';
27+
installPhase = ''mkdir -p $out; cp -av deltachat_rpc_server-*.whl $out'';
28+
}

nix/win32-package.nix

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
{ pkgs, naersk, fenixPkgs, system, version }:
2+
packageName:
3+
let
4+
pkgsWin32 = pkgs.pkgsCross.mingw32;
5+
rustTarget = pkgsWin32.stdenv.hostPlatform.rust.rustcTarget;
6+
toolchainWin = fenixPkgs.combine [
7+
fenixPkgs.stable.rustc
8+
fenixPkgs.stable.cargo
9+
fenixPkgs.targets.${rustTarget}.stable.rust-std
10+
];
11+
naerskWin = pkgs.callPackage naersk {
12+
cargo = toolchainWin;
13+
rustc = toolchainWin;
14+
};
15+
16+
# Get rid of MCF Gthread library.
17+
# See <https://github.com/NixOS/nixpkgs/issues/156343>
18+
# and <https://discourse.nixos.org/t/statically-linked-mingw-binaries/38395>
19+
# for details.
20+
#
21+
# Use DWARF-2 instead of SJLJ for exception handling.
22+
winCC = pkgsWin32.buildPackages.wrapCC (
23+
(pkgsWin32.buildPackages.gcc-unwrapped.override
24+
({
25+
threadsCross = {
26+
model = "win32";
27+
package = null;
28+
};
29+
})).overrideAttrs (oldAttr: {
30+
configureFlags = oldAttr.configureFlags ++ [
31+
"--disable-sjlj-exceptions"
32+
"--with-dwarf2"
33+
];
34+
})
35+
);
36+
targetCc = "${winCC}/bin/${winCC.targetPrefix}cc";
37+
in
38+
naerskWin.buildPackage {
39+
pname = packageName;
40+
cargoBuildOptions = x: x ++ [ "--package" packageName ];
41+
inherit version;
42+
strictDeps = true;
43+
src = pkgs.lib.cleanSource ../.;
44+
nativeBuildInputs = [
45+
pkgs.perl # Needed to build vendored OpenSSL.
46+
pkgs.nasm # aws-lc-sys requires it
47+
];
48+
depsBuildBuild = [
49+
winCC
50+
];
51+
buildInputs = [
52+
pkgsWin32.windows.pthreads
53+
];
54+
auditable = false; # Avoid cargo-auditable failures.
55+
doCheck = false; # Disable test as it requires network access.
56+
57+
CARGO_BUILD_TARGET = rustTarget;
58+
TARGET_CC = "${targetCc}";
59+
CFLAGS_i686_pc_windows_gnu = "-I${pkgsWin32.windows.pthreads}/include";
60+
CARGO_BUILD_RUSTFLAGS = [
61+
"-C"
62+
"linker=${targetCc}"
63+
"-L"
64+
"native=${pkgsWin32.windows.pthreads}/lib"
65+
];
66+
67+
CC = "${targetCc}";
68+
LD = "${targetCc}";
69+
}

0 commit comments

Comments
 (0)