mirror of
https://github.com/chatmail/core.git
synced 2026-07-20 09:53:54 +03:00
I have checked locally with "nix repl nixpkgs", these are the targets currently supported: - legacyPackages.aarch64-darwin - legacyPackages.aarch64-linux - legacyPackages.armv6l-linux - legacyPackages.armv7l-linux - legacyPackages.i686-linux - legacyPackages.powerpc64le-linux - legacyPackages.riscv64-linux - legacyPackages.x86_64-darwin - legacyPackages.x86_64-freebsd - legacyPackages.x86_64-linux Now we have all supported targets in the flake except for x86_64-freebsd I tested locally that the builds work, but have not tested if it is possible to run them. After running "nix build .#deltachat-rpc-server-powerpc64le-linux" "file result/bin/deltachat-rpc-server" prints: result/bin/deltachat-rpc-server: ELF 64-bit LSB executable, 64-bit PowerPC or cisco 7500, OpenPOWER ELF V2 ABI, version 1 (SYSV), statically linked, stripped After running "nix build .#deltachat-rpc-server-riscv64-linux" "file result/bin/deltachat-rpc-server" prints: result/bin/deltachat-rpc-server: ELF 64-bit LSB pie executable, UCB RISC-V, RVC, double-float ABI, version 1 (SYSV), dynamically linked, interpreter /nix/store/ba1gsm7zvwl7id5njwzdx1igbdqydhm3-musl-riscv64-unknown-linux-musl-1.2.5/lib/ld-musl-riscv64.so.1, stripped
205 lines
7.6 KiB
Nix
205 lines
7.6 KiB
Nix
{
|
|
description = "Chatmail core";
|
|
inputs = {
|
|
fenix.url = "github:nix-community/fenix";
|
|
fenix.inputs.nixpkgs.follows = "nixpkgs";
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
naersk.url = "github:nix-community/naersk";
|
|
naersk.inputs.nixpkgs.follows = "nixpkgs";
|
|
naersk.inputs.fenix.follows = "fenix";
|
|
nix-filter.url = "github:numtide/nix-filter";
|
|
nixpkgs.url = "github:nixos/nixpkgs/master";
|
|
android.url = "github:tadfisher/android-nixpkgs";
|
|
android.inputs.nixpkgs.follows = "nixpkgs";
|
|
android.inputs.flake-utils.follows = "flake-utils";
|
|
};
|
|
outputs = { self, nixpkgs, flake-utils, nix-filter, naersk, fenix, android }:
|
|
flake-utils.lib.eachDefaultSystem (system:
|
|
let
|
|
pkgs = nixpkgs.legacyPackages.${system};
|
|
inherit (pkgs.stdenv) isDarwin;
|
|
fenixPkgs = fenix.packages.${system};
|
|
fenixToolchain = fenixPkgs.combine [
|
|
fenixPkgs.stable.rustc
|
|
fenixPkgs.stable.cargo
|
|
fenixPkgs.stable.rust-std
|
|
];
|
|
naersk' = pkgs.callPackage naersk {
|
|
cargo = fenixToolchain;
|
|
rustc = fenixToolchain;
|
|
};
|
|
manifest = (pkgs.lib.importTOML ./Cargo.toml).package;
|
|
version = manifest.version;
|
|
|
|
rustSrc = nix-filter.lib {
|
|
root = ./.;
|
|
|
|
# Include only necessary files
|
|
# to avoid rebuilds e.g. when README.md or flake.nix changes.
|
|
include = [
|
|
./benches
|
|
./assets
|
|
./fuzz
|
|
./Cargo.lock
|
|
./Cargo.toml
|
|
./CMakeLists.txt
|
|
./deltachat_derive
|
|
./deltachat-contact-tools
|
|
./deltachat-ffi
|
|
./deltachat-jsonrpc
|
|
./deltachat-ratelimit
|
|
./deltachat-repl
|
|
./deltachat-rpc-client
|
|
./deltachat-time
|
|
./deltachat-rpc-server
|
|
./format-flowed
|
|
./release-date.in
|
|
./src
|
|
];
|
|
exclude = [
|
|
(nix-filter.lib.matchExt "nix")
|
|
"flake.lock"
|
|
];
|
|
};
|
|
|
|
# Map from architecture name to nixpkgs targets.
|
|
arch2targets = {
|
|
"x86_64-linux" = "x86_64-unknown-linux-musl";
|
|
"armv7l-linux" = "armv7l-unknown-linux-musleabihf";
|
|
"armv6l-linux" = "armv6l-unknown-linux-musleabihf";
|
|
"aarch64-linux" = "aarch64-unknown-linux-musl";
|
|
"i686-linux" = "i686-unknown-linux-musl";
|
|
"powerpc64le-linux" = "powerpc64le-unknown-linux-musl";
|
|
"riscv64-linux" = "riscv64-unknown-linux-musl";
|
|
"x86_64-darwin" = "x86_64-darwin";
|
|
"aarch64-darwin" = "aarch64-darwin";
|
|
};
|
|
cargoLock = {
|
|
lockFile = ./Cargo.lock;
|
|
};
|
|
mkRustPackage = packageName:
|
|
naersk'.buildPackage {
|
|
pname = packageName;
|
|
cargoBuildOptions = x: x ++ [ "--package" packageName ];
|
|
inherit version;
|
|
src = pkgs.lib.cleanSource ./.;
|
|
nativeBuildInputs = [
|
|
pkgs.perl # Needed to build vendored OpenSSL.
|
|
];
|
|
auditable = false; # Avoid cargo-auditable failures.
|
|
doCheck = false; # Disable test as it requires network access.
|
|
};
|
|
|
|
mkWin64RustPackage = pkgs.callPackage ./nix/win64-package.nix {
|
|
inherit naersk system fenixPkgs version;
|
|
};
|
|
|
|
mkWin32RustPackage = pkgs.callPackage ./nix/win32-package.nix {
|
|
inherit naersk system fenixPkgs version;
|
|
};
|
|
|
|
mkCrossRustPackage = pkgs.callPackage ./nix/cross-rust-package.nix {
|
|
inherit nixpkgs arch2targets naersk fenixPkgs system rustSrc version;
|
|
};
|
|
|
|
mkAndroidRustPackage = pkgs.callPackage ./nix/android-package.nix {
|
|
inherit naersk fenixPkgs system rustSrc android version;
|
|
};
|
|
|
|
mkAndroidPackages = arch:
|
|
let
|
|
rpc-server = mkAndroidRustPackage arch "deltachat-rpc-server";
|
|
in
|
|
{
|
|
"deltachat-rpc-server-${arch}-android" = rpc-server;
|
|
"deltachat-repl-${arch}-android" = mkAndroidRustPackage arch "deltachat-repl";
|
|
"deltachat-rpc-server-${arch}-android-wheel" =
|
|
mkWheel { inherit rpc-server; arch = "${arch}-android"; };
|
|
};
|
|
|
|
mkRustPackages = arch:
|
|
let
|
|
rpc-server = mkCrossRustPackage arch "deltachat-rpc-server";
|
|
in
|
|
{
|
|
"deltachat-repl-${arch}" = mkCrossRustPackage arch "deltachat-repl";
|
|
"deltachat-rpc-server-${arch}" = rpc-server;
|
|
"deltachat-rpc-server-${arch}-wheel" = mkWheel { inherit rpc-server; arch = "${arch}"; };
|
|
};
|
|
|
|
mkWheel = pkgs.callPackage ./nix/wheel.nix { inherit nix-filter version; root = ./.; };
|
|
in
|
|
{
|
|
formatter = pkgs.nixpkgs-fmt;
|
|
|
|
packages =
|
|
mkRustPackages "aarch64-linux" //
|
|
mkRustPackages "i686-linux" //
|
|
mkRustPackages "x86_64-linux" //
|
|
mkRustPackages "armv7l-linux" //
|
|
mkRustPackages "armv6l-linux" //
|
|
mkRustPackages "powerpc64le-linux" //
|
|
mkRustPackages "riscv64-linux" //
|
|
mkRustPackages "x86_64-darwin" //
|
|
mkRustPackages "aarch64-darwin" //
|
|
mkAndroidPackages "armeabi-v7a" //
|
|
mkAndroidPackages "arm64-v8a" //
|
|
mkAndroidPackages "x86" //
|
|
mkAndroidPackages "x86_64" // rec {
|
|
# Run with `nix run .#deltachat-repl foo.db`.
|
|
deltachat-repl = mkRustPackage "deltachat-repl";
|
|
deltachat-rpc-server = mkRustPackage "deltachat-rpc-server";
|
|
|
|
deltachat-repl-win64 = mkWin64RustPackage "deltachat-repl";
|
|
deltachat-rpc-server-win64 = mkWin64RustPackage "deltachat-rpc-server";
|
|
deltachat-rpc-server-win64-wheel =
|
|
mkWheel { rpc-server = deltachat-rpc-server-win64; arch = "win64"; binaryName = "deltachat-rpc-server.exe"; };
|
|
|
|
deltachat-repl-win32 = mkWin32RustPackage "deltachat-repl";
|
|
deltachat-rpc-server-win32 = mkWin32RustPackage "deltachat-rpc-server";
|
|
deltachat-rpc-server-win32-wheel =
|
|
mkWheel
|
|
{ rpc-server = deltachat-rpc-server-win32; arch = "win32"; binaryName = "deltachat-rpc-server.exe"; };
|
|
|
|
# Run `nix build .#docs` to get C docs generated in `./result/`.
|
|
docs = pkgs.callPackage ./nix/c-docs.nix { inherit version; };
|
|
|
|
libdeltachat = pkgs.callPackage ./nix/libdeltachat.nix {
|
|
inherit fenixToolchain rustSrc cargoLock fenixPkgs version;
|
|
};
|
|
|
|
deltachat-rpc-client = pkgs.callPackage ./nix/deltachat-rpc-client.nix {
|
|
inherit version;
|
|
};
|
|
|
|
deltachat-python =
|
|
pkgs.python3Packages.buildPythonPackage {
|
|
pname = "deltachat-python";
|
|
inherit version;
|
|
src = pkgs.lib.cleanSource ./python;
|
|
format = "pyproject";
|
|
buildInputs = [
|
|
libdeltachat
|
|
];
|
|
nativeBuildInputs = [
|
|
pkgs.pkg-config
|
|
];
|
|
propagatedBuildInputs = [
|
|
pkgs.python3Packages.setuptools
|
|
pkgs.python3Packages.pkgconfig
|
|
pkgs.python3Packages.cffi
|
|
pkgs.python3Packages.imap-tools
|
|
pkgs.python3Packages.pluggy
|
|
pkgs.python3Packages.requests
|
|
];
|
|
};
|
|
python-docs = pkgs.callPackage ./nix/python-docs.nix {
|
|
inherit deltachat-python deltachat-rpc-client version;
|
|
};
|
|
};
|
|
|
|
devShells.default = import ./nix/shell.nix { inherit nixpkgs fenix system; };
|
|
}
|
|
);
|
|
}
|