From 1e3d4381e03544e5a21a9d181c8e1950150ab6b8 Mon Sep 17 00:00:00 2001 From: link2xt Date: Wed, 27 May 2026 17:00:27 +0200 Subject: [PATCH 01/19] refactor: remove support for building "source" packages for deltachat-rpc-server This hack was needed to "build" Android packages by repackaging Linux packages on-the-fly, but PyPI has since added Android support and we are using it directly. --- .github/workflows/nix.yml | 1 - flake.nix | 16 ------ scripts/wheel-rpc-server.py | 108 ++++-------------------------------- 3 files changed, 12 insertions(+), 113 deletions(-) diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index 9dd0c568f2..e6ad11d6c8 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -63,7 +63,6 @@ jobs: - deltachat-rpc-server-armv7l-linux-wheel - deltachat-rpc-server-i686-linux - deltachat-rpc-server-i686-linux-wheel - - deltachat-rpc-server-source - deltachat-rpc-server-win32 - deltachat-rpc-server-win32-wheel - deltachat-rpc-server-win64 diff --git a/flake.nix b/flake.nix index 615a99c24a..6aea3755df 100644 --- a/flake.nix +++ b/flake.nix @@ -518,22 +518,6 @@ ''; }; - # Source package for deltachat-rpc-server. - # Fake package that downloads Linux version, - # needed to install deltachat-rpc-server on Android with `pip`. - deltachat-rpc-server-source = - pkgs.stdenv.mkDerivation { - pname = "deltachat-rpc-server-source"; - version = manifest.version; - src = pkgs.lib.cleanSource ./.; - nativeBuildInputs = [ - pkgs.python3 - pkgs.python3Packages.wheel - ]; - buildPhase = ''python3 scripts/wheel-rpc-server.py source deltachat_rpc_server-${manifest.version}.tar.gz''; - installPhase = ''mkdir -p $out; cp -av deltachat_rpc_server-${manifest.version}.tar.gz $out''; - }; - deltachat-rpc-client = pkgs.python3Packages.buildPythonPackage { pname = "deltachat-rpc-client"; diff --git a/scripts/wheel-rpc-server.py b/scripts/wheel-rpc-server.py index 4118ec4118..973dd853e9 100755 --- a/scripts/wheel-rpc-server.py +++ b/scripts/wheel-rpc-server.py @@ -20,86 +20,6 @@ def metadata_contents(version): """ -def build_source_package(version, filename): - with tarfile.open(filename, "w:gz") as pkg: - - def pack(name, contents): - contents = contents.encode() - tar_info = tarfile.TarInfo(f"deltachat_rpc_server-{version}/{name}") - tar_info.mode = 0o644 - tar_info.size = len(contents) - pkg.addfile(tar_info, BytesIO(contents)) - - pack("PKG-INFO", metadata_contents(version)) - pack( - "pyproject.toml", - f"""[build-system] -requires = ["setuptools==68.2.2", "pip"] -build-backend = "setuptools.build_meta" - -[project] -name = "deltachat-rpc-server" -version = "{version}" - -[project.scripts] -deltachat-rpc-server = "deltachat_rpc_server:main" -""", - ) - pack( - "setup.py", - f""" -import sys -from setuptools import setup, find_packages -from distutils.cmd import Command -from setuptools.command.install import install -from setuptools.command.build import build -import subprocess -import platform -import tempfile -from zipfile import ZipFile -from pathlib import Path -import shutil - - -class BuildCommand(build): - def run(self): - tmpdir = tempfile.mkdtemp() - subprocess.run( - [ - sys.executable, - "-m", - "pip", - "download", - "--no-input", - "--timeout", - "1000", - "--platform", - "musllinux_1_1_" + platform.machine(), - "--only-binary=:all:", - "deltachat-rpc-server=={version}", - ], - cwd=tmpdir, - ) - - wheel_path = next(Path(tmpdir).glob("*.whl")) - with ZipFile(wheel_path, "r") as wheel: - exe_path = wheel.extract("deltachat_rpc_server/deltachat-rpc-server", "src") - Path(exe_path).chmod(0o700) - wheel.extract("deltachat_rpc_server/__init__.py", "src") - - shutil.rmtree(tmpdir) - return super().run() - - -setup( - cmdclass={{"build": BuildCommand}}, - package_data={{"deltachat_rpc_server": ["deltachat-rpc-server"]}}, -) -""", - ) - pack("src/deltachat_rpc_server/__init__.py", "") - - def build_wheel(version, binary, tag, windows=False): filename = f"deltachat_rpc_server-{version}-{tag}.whl" @@ -168,23 +88,19 @@ def main(): with Path("Cargo.toml").open("rb") as fp: cargo_manifest = tomllib.load(fp) version = cargo_manifest["package"]["version"] - if sys.argv[1] == "source": - filename = f"deltachat_rpc_server-{version}.tar.gz" - build_source_package(version, filename) + arch = sys.argv[1] + executable = sys.argv[2] + tags = arch2tags[arch] + + if arch in ["win32", "win64"]: + build_wheel( + version, + executable, + f"py3-none-{tags}", + windows=True, + ) else: - arch = sys.argv[1] - executable = sys.argv[2] - tags = arch2tags[arch] - - if arch in ["win32", "win64"]: - build_wheel( - version, - executable, - f"py3-none-{tags}", - windows=True, - ) - else: - build_wheel(version, executable, f"py3-none-{tags}") + build_wheel(version, executable, f"py3-none-{tags}") main() From eb171d6a08b25d141b9bfd6fe44f17582949a925 Mon Sep 17 00:00:00 2001 From: link2xt Date: Mon, 25 May 2026 05:14:36 +0200 Subject: [PATCH 02/19] refactor: factor out nix/wheel.nix out of flake.nix --- flake.nix | 113 ++++---------------------------------------------- nix/wheel.nix | 28 +++++++++++++ 2 files changed, 36 insertions(+), 105 deletions(-) create mode 100644 nix/wheel.nix diff --git a/flake.nix b/flake.nix index 6aea3755df..e746883133 100644 --- a/flake.nix +++ b/flake.nix @@ -338,32 +338,7 @@ "deltachat-rpc-server-${arch}-android" = rpc-server; "deltachat-repl-${arch}-android" = mkAndroidRustPackage arch "deltachat-repl"; "deltachat-rpc-server-${arch}-android-wheel" = - pkgs.stdenv.mkDerivation { - pname = "deltachat-rpc-server-${arch}-android-wheel"; - version = manifest.version; - src = nix-filter.lib { - root = ./.; - include = [ - "scripts/wheel-rpc-server.py" - "deltachat-rpc-server/README.md" - "LICENSE" - "Cargo.toml" - ]; - }; - nativeBuildInputs = [ - pkgs.python3 - pkgs.python3Packages.wheel - ]; - buildInputs = [ - rpc-server - ]; - buildPhase = '' - mkdir tmp - cp ${rpc-server}/bin/deltachat-rpc-server tmp/deltachat-rpc-server - python3 scripts/wheel-rpc-server.py ${arch}-android tmp/deltachat-rpc-server - ''; - installPhase = ''mkdir -p $out; cp -av deltachat_rpc_server-*.whl $out''; - }; + mkWheel { inherit rpc-server; arch = "${arch}-android"; }; }; mkRustPackages = arch: @@ -373,34 +348,10 @@ { "deltachat-repl-${arch}" = mkCrossRustPackage arch "deltachat-repl"; "deltachat-rpc-server-${arch}" = rpc-server; - "deltachat-rpc-server-${arch}-wheel" = - pkgs.stdenv.mkDerivation { - pname = "deltachat-rpc-server-${arch}-wheel"; - version = manifest.version; - src = nix-filter.lib { - root = ./.; - include = [ - "scripts/wheel-rpc-server.py" - "deltachat-rpc-server/README.md" - "LICENSE" - "Cargo.toml" - ]; - }; - nativeBuildInputs = [ - pkgs.python3 - pkgs.python3Packages.wheel - ]; - buildInputs = [ - rpc-server - ]; - buildPhase = '' - mkdir tmp - cp ${rpc-server}/bin/deltachat-rpc-server tmp/deltachat-rpc-server - python3 scripts/wheel-rpc-server.py ${arch} tmp/deltachat-rpc-server - ''; - installPhase = ''mkdir -p $out; cp -av deltachat_rpc_server-*.whl $out''; - }; + "deltachat-rpc-server-${arch}-wheel" = mkWheel { inherit rpc-server; arch = "${arch}"; }; }; + + mkWheel = pkgs.callPackage ./nix/wheel.nix { inherit nix-filter; version = manifest.version; root = ./.; }; in { formatter = pkgs.nixpkgs-fmt; @@ -424,62 +375,14 @@ deltachat-repl-win64 = mkWin64RustPackage "deltachat-repl"; deltachat-rpc-server-win64 = mkWin64RustPackage "deltachat-rpc-server"; deltachat-rpc-server-win64-wheel = - pkgs.stdenv.mkDerivation { - pname = "deltachat-rpc-server-win64-wheel"; - version = manifest.version; - src = nix-filter.lib { - root = ./.; - include = [ - "scripts/wheel-rpc-server.py" - "deltachat-rpc-server/README.md" - "LICENSE" - "Cargo.toml" - ]; - }; - nativeBuildInputs = [ - pkgs.python3 - pkgs.python3Packages.wheel - ]; - buildInputs = [ - deltachat-rpc-server-win64 - ]; - buildPhase = '' - mkdir tmp - cp ${deltachat-rpc-server-win64}/bin/deltachat-rpc-server.exe tmp/deltachat-rpc-server.exe - python3 scripts/wheel-rpc-server.py win64 tmp/deltachat-rpc-server.exe - ''; - installPhase = ''mkdir -p $out; cp -av deltachat_rpc_server-*.whl $out''; - }; + 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 = - pkgs.stdenv.mkDerivation { - pname = "deltachat-rpc-server-win32-wheel"; - version = manifest.version; - src = nix-filter.lib { - root = ./.; - include = [ - "scripts/wheel-rpc-server.py" - "deltachat-rpc-server/README.md" - "LICENSE" - "Cargo.toml" - ]; - }; - nativeBuildInputs = [ - pkgs.python3 - pkgs.python3Packages.wheel - ]; - buildInputs = [ - deltachat-rpc-server-win32 - ]; - buildPhase = '' - mkdir tmp - cp ${deltachat-rpc-server-win32}/bin/deltachat-rpc-server.exe tmp/deltachat-rpc-server.exe - python3 scripts/wheel-rpc-server.py win32 tmp/deltachat-rpc-server.exe - ''; - installPhase = ''mkdir -p $out; cp -av deltachat_rpc_server-*.whl $out''; - }; + 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.stdenv.mkDerivation { diff --git a/nix/wheel.nix b/nix/wheel.nix new file mode 100644 index 0000000000..3e84526417 --- /dev/null +++ b/nix/wheel.nix @@ -0,0 +1,28 @@ +{ pkgs, nix-filter, version, root }: +{ rpc-server, arch, binaryName ? "deltachat-rpc-server" }: +pkgs.stdenv.mkDerivation { + pname = "deltachat-rpc-server-${arch}-wheel"; + inherit version; + src = nix-filter.lib { + inherit root; + include = [ + "scripts/wheel-rpc-server.py" + "deltachat-rpc-server/README.md" + "LICENSE" + "Cargo.toml" + ]; + }; + nativeBuildInputs = [ + pkgs.python3 + pkgs.python3Packages.wheel + ]; + buildInputs = [ + rpc-server + ]; + buildPhase = '' + mkdir tmp + cp ${rpc-server}/bin/${binaryName} tmp/${binaryName} + python3 scripts/wheel-rpc-server.py ${arch} tmp/${binaryName} + ''; + installPhase = ''mkdir -p $out; cp -av deltachat_rpc_server-*.whl $out''; +} From c5061aabfc5d0aa986457e979024b7a1d9eace51 Mon Sep 17 00:00:00 2001 From: link2xt Date: Mon, 25 May 2026 13:34:02 +0200 Subject: [PATCH 03/19] ci(nix): try to cross-build on macOS --- .github/workflows/nix.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index e6ad11d6c8..3e0a8875c8 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -95,10 +95,7 @@ jobs: installable: - deltachat-rpc-server - deltachat-rpc-server-x86_64-darwin - - # Fails to build - # because of . - # - deltachat-rpc-server-aarch64-darwin + - deltachat-rpc-server-aarch64-darwin steps: - uses: actions/checkout@v6 with: From f1861be0ba06bdf0e0e6c0059814f13b1a9aa96f Mon Sep 17 00:00:00 2001 From: link2xt Date: Mon, 25 May 2026 15:05:20 +0200 Subject: [PATCH 04/19] override --- flake.nix | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index e746883133..0eb10e42eb 100644 --- a/flake.nix +++ b/flake.nix @@ -241,9 +241,11 @@ fenixPkgs.stable.cargo fenixPkgs.targets.${rustTarget}.stable.rust-std ]; - naersk-lib = pkgs.callPackage naersk { + naersk-lib = (pkgs.callPackage naersk { cargo = toolchain; rustc = toolchain; + }).override { + pkgs = pkgsCross; }; in naersk-lib.buildPackage rec { @@ -253,7 +255,7 @@ strictDeps = true; src = rustSrc; nativeBuildInputs = [ - pkgs.perl # Needed to build vendored OpenSSL. + pkgsCross.buildPackages.perl # Needed to build vendored OpenSSL. ]; auditable = false; # Avoid cargo-auditable failures. doCheck = false; # Disable test as it requires network access. From 609b0cd8280da70b52f60ed17f6ab04e92d24497 Mon Sep 17 00:00:00 2001 From: link2xt Date: Mon, 25 May 2026 16:25:00 +0200 Subject: [PATCH 05/19] remove in..let --- flake.nix | 4 ---- 1 file changed, 4 deletions(-) diff --git a/flake.nix b/flake.nix index 0eb10e42eb..2de62a149f 100644 --- a/flake.nix +++ b/flake.nix @@ -162,8 +162,6 @@ mkWin32RustPackage = packageName: let rustTarget = "i686-pc-windows-gnu"; - in - let toolchainWin = fenixPkgs.combine [ fenixPkgs.stable.rustc fenixPkgs.stable.cargo @@ -234,8 +232,6 @@ system = system; crossSystem.config = crossTarget; }; - in - let toolchain = fenixPkgs.combine [ fenixPkgs.stable.rustc fenixPkgs.stable.cargo From c2cd303a28bdfa0c86b15b011a77a1a0a85cd304 Mon Sep 17 00:00:00 2001 From: link2xt Date: Mon, 25 May 2026 20:17:40 +0200 Subject: [PATCH 06/19] fixup for configureFlags From 210b9d86f800d647800a54c8ee8562a7238f1312 Mon Sep 17 00:00:00 2001 From: link2xt Date: Mon, 25 May 2026 21:25:32 +0200 Subject: [PATCH 07/19] nix: build android --- .github/workflows/nix.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index 3e0a8875c8..bf372a03a0 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -73,10 +73,9 @@ jobs: - libdeltachat - python-docs - # Fails to build - #- deltachat-repl-x86_64-android + - deltachat-repl-x86_64-android + - deltachat-rpc-server-x86_64-android #- deltachat-repl-x86-android - #- deltachat-rpc-server-x86_64-android #- deltachat-rpc-server-x86-android steps: - uses: actions/checkout@v6 From 414630fa615daa261341c3b79db553242180c46c Mon Sep 17 00:00:00 2001 From: link2xt Date: Tue, 26 May 2026 03:53:50 +0200 Subject: [PATCH 08/19] native build on macos --- flake.nix | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/flake.nix b/flake.nix index 2de62a149f..0cb4146d9e 100644 --- a/flake.nix +++ b/flake.nix @@ -228,10 +228,14 @@ let rustTarget = arch2targets."${arch}".rustTarget; crossTarget = arch2targets."${arch}".crossTarget; - pkgsCross = import nixpkgs { - system = system; - crossSystem.config = crossTarget; - }; + pkgsCross = + if crossTarget == system then + import nixpkgs { inherit system; } + else + import nixpkgs { + system = system; + crossSystem.config = crossTarget; + }; toolchain = fenixPkgs.combine [ fenixPkgs.stable.rustc fenixPkgs.stable.cargo From 7bb956a608cade6701a53cd6d427ee4775292544 Mon Sep 17 00:00:00 2001 From: link2xt Date: Mon, 25 May 2026 09:24:57 +0200 Subject: [PATCH 09/19] Split devshell into a separate file --- flake.nix | 29 +---------------------------- nix/devshell.nix | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 28 deletions(-) create mode 100644 nix/devshell.nix diff --git a/flake.nix b/flake.nix index 0cb4146d9e..825d4f5b6f 100644 --- a/flake.nix +++ b/flake.nix @@ -473,34 +473,7 @@ }; }; - devShells.default = - let - pkgs = import nixpkgs { - system = system; - overlays = [ fenix.overlays.default ]; - }; - in - pkgs.mkShell { - - buildInputs = with pkgs; [ - (fenix.packages.${system}.complete.withComponents [ - "cargo" - "clippy" - "rust-src" - "rustc" - "rustfmt" - ]) - cargo-deny - rust-analyzer-nightly - cargo-nextest - perl # needed to build vendored OpenSSL - git-cliff - (python3.withPackages (pypkgs: with pypkgs; [ - tox - ])) - nodejs - ]; - }; + devShells.default = import ./nix/devshell.nix { inherit nixpkgs fenix system; }; } ); } diff --git a/nix/devshell.nix b/nix/devshell.nix new file mode 100644 index 0000000000..668873c806 --- /dev/null +++ b/nix/devshell.nix @@ -0,0 +1,27 @@ +{ nixpkgs, fenix, system }: +let + pkgs = import nixpkgs { + inherit system; + overlays = [ fenix.overlays.default ]; + }; +in +pkgs.mkShell { + buildInputs = with pkgs; [ + (fenix.packages.${system}.complete.withComponents [ + "cargo" + "clippy" + "rust-src" + "rustc" + "rustfmt" + ]) + cargo-deny + rust-analyzer-nightly + cargo-nextest + perl # needed to build vendored OpenSSL + git-cliff + (python3.withPackages (pypkgs: with pypkgs; [ + tox + ])) + nodejs + ]; +} From 393b6b8e08f4df20d60aee2992b162cf970068c2 Mon Sep 17 00:00:00 2001 From: link2xt Date: Wed, 27 May 2026 11:18:32 +0200 Subject: [PATCH 10/19] Split out nix/c-docs.nix --- flake.nix | 10 +--------- nix/c-docs.nix | 9 +++++++++ 2 files changed, 10 insertions(+), 9 deletions(-) create mode 100644 nix/c-docs.nix diff --git a/flake.nix b/flake.nix index 825d4f5b6f..fdb766cf4c 100644 --- a/flake.nix +++ b/flake.nix @@ -386,15 +386,7 @@ { 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.stdenv.mkDerivation { - pname = "docs"; - version = manifest.version; - src = pkgs.lib.cleanSource ./.; - nativeBuildInputs = [ pkgs.doxygen ]; - buildPhase = ''scripts/run-doxygen.sh''; - installPhase = ''mkdir -p $out; cp -av deltachat-ffi/html deltachat-ffi/xml $out''; - }; + docs = pkgs.callPackage ./nix/c-docs.nix { version = manifest.version; }; libdeltachat = let diff --git a/nix/c-docs.nix b/nix/c-docs.nix new file mode 100644 index 0000000000..0b74f03d64 --- /dev/null +++ b/nix/c-docs.nix @@ -0,0 +1,9 @@ +{ pkgs, version }: +pkgs.stdenv.mkDerivation { + pname = "docs"; + inherit version; + src = pkgs.lib.cleanSource ../.; + nativeBuildInputs = [ pkgs.doxygen ]; + buildPhase = ''scripts/run-doxygen.sh''; + installPhase = ''mkdir -p $out; cp -av deltachat-ffi/html deltachat-ffi/xml $out''; +} From a4dbbb0da1248c07a7ad0d758437463a5f89751f Mon Sep 17 00:00:00 2001 From: link2xt Date: Wed, 27 May 2026 16:46:05 +0200 Subject: [PATCH 11/19] Split out nix/libdeltachat.nix --- flake.nix | 30 ++++-------------------------- nix/libdeltachat.nix | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 26 deletions(-) create mode 100644 nix/libdeltachat.nix diff --git a/flake.nix b/flake.nix index fdb766cf4c..ffae5f3e13 100644 --- a/flake.nix +++ b/flake.nix @@ -388,32 +388,10 @@ # Run `nix build .#docs` to get C docs generated in `./result/`. docs = pkgs.callPackage ./nix/c-docs.nix { version = manifest.version; }; - libdeltachat = - let - rustPlatform = (pkgs.makeRustPlatform { - cargo = fenixToolchain; - rustc = fenixToolchain; - }); - in - pkgs.stdenv.mkDerivation { - pname = "libdeltachat"; - version = manifest.version; - src = rustSrc; - cargoDeps = pkgs.rustPlatform.importCargoLock cargoLock; - - nativeBuildInputs = [ - pkgs.perl # Needed to build vendored OpenSSL. - pkgs.cmake - rustPlatform.cargoSetupHook - fenixPkgs.stable.rustc - fenixPkgs.stable.cargo - ]; - - postInstall = '' - substituteInPlace $out/include/deltachat.h \ - --replace __FILE__ '"${placeholder "out"}/include/deltachat.h"' - ''; - }; + libdeltachat = pkgs.callPackage ./nix/libdeltachat.nix { + inherit fenixToolchain rustSrc cargoLock fenixPkgs; + version = manifest.version; + }; deltachat-rpc-client = pkgs.python3Packages.buildPythonPackage { diff --git a/nix/libdeltachat.nix b/nix/libdeltachat.nix new file mode 100644 index 0000000000..b45c73e03f --- /dev/null +++ b/nix/libdeltachat.nix @@ -0,0 +1,26 @@ +{ pkgs, fenixToolchain, rustSrc, cargoLock, fenixPkgs, version }: +let + rustPlatform = (pkgs.makeRustPlatform { + cargo = fenixToolchain; + rustc = fenixToolchain; + }); +in +pkgs.stdenv.mkDerivation { + pname = "libdeltachat"; + inherit version; + src = rustSrc; + cargoDeps = pkgs.rustPlatform.importCargoLock cargoLock; + + nativeBuildInputs = [ + pkgs.perl # Needed to build vendored OpenSSL. + pkgs.cmake + rustPlatform.cargoSetupHook + fenixPkgs.stable.rustc + fenixPkgs.stable.cargo + ]; + + postInstall = '' + substituteInPlace $out/include/deltachat.h \ + --replace __FILE__ '"${placeholder "out"}/include/deltachat.h"' + ''; +} From 0b6c9db11b68c130c15d18d9bb6cb805a33e3b6e Mon Sep 17 00:00:00 2001 From: link2xt Date: Wed, 27 May 2026 22:31:43 +0200 Subject: [PATCH 12/19] Enable cache for nix --- .github/workflows/nix.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml index bf372a03a0..a683a47725 100644 --- a/.github/workflows/nix.yml +++ b/.github/workflows/nix.yml @@ -83,6 +83,7 @@ jobs: show-progress: false persist-credentials: false - uses: cachix/install-nix-action@8aa03977d8d733052d78f4e008a241fd1dbf36b3 # v31.10.6 + - uses: DeterminateSystems/magic-nix-cache-action@565684385bcd71bad329742eefe8d12f2e765b39 # v13 - run: nix build .#${{ matrix.installable }} build-macos: @@ -101,4 +102,5 @@ jobs: show-progress: false persist-credentials: false - uses: cachix/install-nix-action@8aa03977d8d733052d78f4e008a241fd1dbf36b3 # v31.10.6 + - uses: DeterminateSystems/magic-nix-cache-action@565684385bcd71bad329742eefe8d12f2e765b39 # v13 - run: nix build .#${{ matrix.installable }} From b79124db119b202faf9a6cf76de0d2f970fd8d1b Mon Sep 17 00:00:00 2001 From: link2xt Date: Wed, 27 May 2026 22:37:22 +0200 Subject: [PATCH 13/19] Split out nix/deltachat-rpc-client.nix --- flake.nix | 14 +++----------- nix/deltachat-rpc-client.nix | 11 +++++++++++ 2 files changed, 14 insertions(+), 11 deletions(-) create mode 100644 nix/deltachat-rpc-client.nix diff --git a/flake.nix b/flake.nix index ffae5f3e13..dc7eda7562 100644 --- a/flake.nix +++ b/flake.nix @@ -393,17 +393,9 @@ version = manifest.version; }; - deltachat-rpc-client = - pkgs.python3Packages.buildPythonPackage { - pname = "deltachat-rpc-client"; - version = manifest.version; - src = pkgs.lib.cleanSource ./deltachat-rpc-client; - format = "pyproject"; - propagatedBuildInputs = [ - pkgs.python3Packages.setuptools - pkgs.python3Packages.imap-tools - ]; - }; + deltachat-rpc-client = pkgs.callPackage ./nix/deltachat-rpc-client.nix { + version = manifest.version; + }; deltachat-python = pkgs.python3Packages.buildPythonPackage { diff --git a/nix/deltachat-rpc-client.nix b/nix/deltachat-rpc-client.nix new file mode 100644 index 0000000000..d266210f25 --- /dev/null +++ b/nix/deltachat-rpc-client.nix @@ -0,0 +1,11 @@ +{ pkgs, version }: +pkgs.python3Packages.buildPythonPackage { + pname = "deltachat-rpc-client"; + inherit version; + src = pkgs.lib.cleanSource ../deltachat-rpc-client; + format = "pyproject"; + propagatedBuildInputs = [ + pkgs.python3Packages.setuptools + pkgs.python3Packages.imap-tools + ]; +} From 3fdd01a48719f0954485b94cd867477230cd9854 Mon Sep 17 00:00:00 2001 From: link2xt Date: Wed, 27 May 2026 22:51:22 +0200 Subject: [PATCH 14/19] Use hostPlatform.rust.rustcTarget instead of hardcoding it --- flake.nix | 50 ++++++++++++++------------------------------------ 1 file changed, 14 insertions(+), 36 deletions(-) diff --git a/flake.nix b/flake.nix index dc7eda7562..a4eebddbc6 100644 --- a/flake.nix +++ b/flake.nix @@ -66,37 +66,15 @@ ]; }; - # Map from architecture name to rust targets and nixpkgs targets. + # Map from architecture name to nixpkgs targets. arch2targets = { - "x86_64-linux" = { - rustTarget = "x86_64-unknown-linux-musl"; - crossTarget = "x86_64-unknown-linux-musl"; - }; - "armv7l-linux" = { - rustTarget = "armv7-unknown-linux-musleabihf"; - crossTarget = "armv7l-unknown-linux-musleabihf"; - }; - "armv6l-linux" = { - rustTarget = "arm-unknown-linux-musleabihf"; - crossTarget = "armv6l-unknown-linux-musleabihf"; - }; - "aarch64-linux" = { - rustTarget = "aarch64-unknown-linux-musl"; - crossTarget = "aarch64-unknown-linux-musl"; - }; - "i686-linux" = { - rustTarget = "i686-unknown-linux-musl"; - crossTarget = "i686-unknown-linux-musl"; - }; - - "x86_64-darwin" = { - rustTarget = "x86_64-apple-darwin"; - crossTarget = "x86_64-darwin"; - }; - "aarch64-darwin" = { - rustTarget = "aarch64-apple-darwin"; - crossTarget = "aarch64-darwin"; - }; + "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"; + "x86_64-darwin" = "x86_64-darwin"; + "aarch64-darwin" = "aarch64-darwin"; }; cargoLock = { lockFile = ./Cargo.lock; @@ -113,10 +91,10 @@ auditable = false; # Avoid cargo-auditable failures. doCheck = false; # Disable test as it requires network access. }; - pkgsWin64 = pkgs.pkgsCross.mingwW64; mkWin64RustPackage = packageName: let - rustTarget = "x86_64-pc-windows-gnu"; + pkgsWin64 = pkgs.pkgsCross.mingwW64; + rustTarget = pkgsWin64.stdenv.hostPlatform.rust.rustcTarget; toolchainWin = fenixPkgs.combine [ fenixPkgs.stable.rustc fenixPkgs.stable.cargo @@ -158,10 +136,10 @@ LD = "${pkgsWin64.stdenv.cc}/bin/${pkgsWin64.stdenv.cc.targetPrefix}cc"; }; - pkgsWin32 = pkgs.pkgsCross.mingw32; mkWin32RustPackage = packageName: let - rustTarget = "i686-pc-windows-gnu"; + pkgsWin32 = pkgs.pkgsCross.mingw32; + rustTarget = pkgsWin32.stdenv.hostPlatform.rust.rustcTarget; toolchainWin = fenixPkgs.combine [ fenixPkgs.stable.rustc fenixPkgs.stable.cargo @@ -226,8 +204,7 @@ mkCrossRustPackage = arch: packageName: let - rustTarget = arch2targets."${arch}".rustTarget; - crossTarget = arch2targets."${arch}".crossTarget; + crossTarget = arch2targets."${arch}"; pkgsCross = if crossTarget == system then import nixpkgs { inherit system; } @@ -236,6 +213,7 @@ system = system; crossSystem.config = crossTarget; }; + rustTarget = pkgsCross.stdenv.hostPlatform.rust.rustcTarget; toolchain = fenixPkgs.combine [ fenixPkgs.stable.rustc fenixPkgs.stable.cargo From 3d704a7025a2aa3d062cfafa20a59eee0927848a Mon Sep 17 00:00:00 2001 From: link2xt Date: Wed, 27 May 2026 23:41:50 +0200 Subject: [PATCH 15/19] split out nix/cross-rust-package.nix --- flake.nix | 53 +++----------------------------------- nix/cross-rust-package.nix | 50 +++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 49 deletions(-) create mode 100644 nix/cross-rust-package.nix diff --git a/flake.nix b/flake.nix index a4eebddbc6..8a15c4517d 100644 --- a/flake.nix +++ b/flake.nix @@ -202,55 +202,10 @@ LD = "${winCC}/bin/${winCC.targetPrefix}cc"; }; - mkCrossRustPackage = arch: packageName: - let - crossTarget = arch2targets."${arch}"; - pkgsCross = - if crossTarget == system then - import nixpkgs { inherit system; } - else - import nixpkgs { - system = system; - crossSystem.config = crossTarget; - }; - rustTarget = pkgsCross.stdenv.hostPlatform.rust.rustcTarget; - toolchain = fenixPkgs.combine [ - fenixPkgs.stable.rustc - fenixPkgs.stable.cargo - fenixPkgs.targets.${rustTarget}.stable.rust-std - ]; - naersk-lib = (pkgs.callPackage naersk { - cargo = toolchain; - rustc = toolchain; - }).override { - pkgs = pkgsCross; - }; - in - naersk-lib.buildPackage rec { - pname = packageName; - cargoBuildOptions = x: x ++ [ "--package" packageName ]; - version = manifest.version; - strictDeps = true; - src = rustSrc; - nativeBuildInputs = [ - pkgsCross.buildPackages.perl # Needed to build vendored OpenSSL. - ]; - auditable = false; # Avoid cargo-auditable failures. - doCheck = false; # Disable test as it requires network access. - - CARGO_TARGET_X86_64_APPLE_DARWIN_RUSTFLAGS = "-Clink-args=-L${pkgsCross.libiconv}/lib"; - CARGO_TARGET_AARCH64_APPLE_DARWIN_RUSTFLAGS = "-Clink-args=-L${pkgsCross.libiconv}/lib"; - - CARGO_BUILD_TARGET = rustTarget; - TARGET_CC = "${pkgsCross.stdenv.cc}/bin/${pkgsCross.stdenv.cc.targetPrefix}cc"; - CARGO_BUILD_RUSTFLAGS = [ - "-C" - "linker=${TARGET_CC}" - ]; - - CC = "${pkgsCross.stdenv.cc}/bin/${pkgsCross.stdenv.cc.targetPrefix}cc"; - LD = "${pkgsCross.stdenv.cc}/bin/${pkgsCross.stdenv.cc.targetPrefix}cc"; - }; + mkCrossRustPackage = pkgs.callPackage ./nix/cross-rust-package.nix { + inherit nixpkgs arch2targets naersk fenixPkgs system rustSrc; + version = manifest.version; + }; androidAttrs = { armeabi-v7a = { diff --git a/nix/cross-rust-package.nix b/nix/cross-rust-package.nix new file mode 100644 index 0000000000..87f0c6e28d --- /dev/null +++ b/nix/cross-rust-package.nix @@ -0,0 +1,50 @@ +{ pkgs, nixpkgs, arch2targets, naersk, fenixPkgs, system, rustSrc, version }: +arch: packageName: +let + crossTarget = arch2targets."${arch}"; + pkgsCross = + if crossTarget == system then + import nixpkgs { inherit system; } + else + import nixpkgs { + system = system; + crossSystem.config = crossTarget; + }; + rustTarget = pkgsCross.stdenv.hostPlatform.rust.rustcTarget; + toolchain = fenixPkgs.combine [ + fenixPkgs.stable.rustc + fenixPkgs.stable.cargo + fenixPkgs.targets.${rustTarget}.stable.rust-std + ]; + naersk-lib = (pkgs.callPackage naersk { + cargo = toolchain; + rustc = toolchain; + }).override { + pkgs = pkgsCross; + }; +in +naersk-lib.buildPackage rec { + pname = packageName; + cargoBuildOptions = x: x ++ [ "--package" packageName ]; + inherit version; + strictDeps = true; + src = rustSrc; + nativeBuildInputs = [ + pkgsCross.buildPackages.perl # Needed to build vendored OpenSSL. + ]; + auditable = false; # Avoid cargo-auditable failures. + doCheck = false; # Disable test as it requires network access. + + CARGO_TARGET_X86_64_APPLE_DARWIN_RUSTFLAGS = "-Clink-args=-L${pkgsCross.libiconv}/lib"; + CARGO_TARGET_AARCH64_APPLE_DARWIN_RUSTFLAGS = "-Clink-args=-L${pkgsCross.libiconv}/lib"; + + CARGO_BUILD_TARGET = rustTarget; + TARGET_CC = "${pkgsCross.stdenv.cc}/bin/${pkgsCross.stdenv.cc.targetPrefix}cc"; + CARGO_BUILD_RUSTFLAGS = [ + "-C" + "linker=${TARGET_CC}" + ]; + + CC = "${pkgsCross.stdenv.cc}/bin/${pkgsCross.stdenv.cc.targetPrefix}cc"; + LD = "${pkgsCross.stdenv.cc}/bin/${pkgsCross.stdenv.cc.targetPrefix}cc"; +} From 801909e0fea32b06aa23655be09ae2d26de96f9c Mon Sep 17 00:00:00 2001 From: link2xt Date: Thu, 28 May 2026 00:53:10 +0200 Subject: [PATCH 16/19] split out nix/python-docs.nix --- flake.nix | 19 ++++--------------- nix/python-docs.nix | 15 +++++++++++++++ 2 files changed, 19 insertions(+), 15 deletions(-) create mode 100644 nix/python-docs.nix diff --git a/flake.nix b/flake.nix index 8a15c4517d..afba63cc1e 100644 --- a/flake.nix +++ b/flake.nix @@ -351,21 +351,10 @@ pkgs.python3Packages.requests ]; }; - python-docs = - pkgs.stdenv.mkDerivation { - pname = "docs"; - version = manifest.version; - src = pkgs.lib.cleanSource ./.; - buildInputs = [ - deltachat-python - deltachat-rpc-client - pkgs.python3Packages.breathe - pkgs.python3Packages.sphinx-rtd-theme - ]; - nativeBuildInputs = [ pkgs.sphinx ]; - buildPhase = ''sphinx-build -b html -a python/doc/ dist/html''; - installPhase = ''mkdir -p $out; cp -av dist/html $out''; - }; + python-docs = pkgs.callPackage ./nix/python-docs.nix { + inherit deltachat-python deltachat-rpc-client; + version = manifest.version; + }; }; devShells.default = import ./nix/devshell.nix { inherit nixpkgs fenix system; }; diff --git a/nix/python-docs.nix b/nix/python-docs.nix new file mode 100644 index 0000000000..baef04d369 --- /dev/null +++ b/nix/python-docs.nix @@ -0,0 +1,15 @@ +{ pkgs, version, deltachat-python, deltachat-rpc-client }: +pkgs.stdenv.mkDerivation { + pname = "docs"; + inherit version; + src = pkgs.lib.cleanSource ../.; + buildInputs = [ + deltachat-python + deltachat-rpc-client + pkgs.python3Packages.breathe + pkgs.python3Packages.sphinx-rtd-theme + ]; + nativeBuildInputs = [ pkgs.sphinx ]; + buildPhase = ''sphinx-build -b html -a python/doc/ dist/html''; + installPhase = ''mkdir -p $out; cp -av dist/html $out''; +} From 34aebe217e62bbc35756fedc05125113e8fd05dc Mon Sep 17 00:00:00 2001 From: link2xt Date: Thu, 28 May 2026 01:24:29 +0200 Subject: [PATCH 17/19] nix: split out windows builds --- flake.nix | 117 +++--------------------------------------- nix/win32-package.nix | 66 ++++++++++++++++++++++++ nix/win64-package.nix | 45 ++++++++++++++++ 3 files changed, 119 insertions(+), 109 deletions(-) create mode 100644 nix/win32-package.nix create mode 100644 nix/win64-package.nix diff --git a/flake.nix b/flake.nix index afba63cc1e..10a4af2007 100644 --- a/flake.nix +++ b/flake.nix @@ -91,116 +91,15 @@ auditable = false; # Avoid cargo-auditable failures. doCheck = false; # Disable test as it requires network access. }; - mkWin64RustPackage = packageName: - let - pkgsWin64 = pkgs.pkgsCross.mingwW64; - rustTarget = pkgsWin64.stdenv.hostPlatform.rust.rustcTarget; - toolchainWin = fenixPkgs.combine [ - fenixPkgs.stable.rustc - fenixPkgs.stable.cargo - fenixPkgs.targets.${rustTarget}.stable.rust-std - ]; - naerskWin = pkgs.callPackage naersk { - cargo = toolchainWin; - rustc = toolchainWin; - }; - in - naerskWin.buildPackage rec { - pname = packageName; - cargoBuildOptions = x: x ++ [ "--package" packageName ]; - version = manifest.version; - strictDeps = true; - src = pkgs.lib.cleanSource ./.; - nativeBuildInputs = [ - pkgs.perl # Needed to build vendored OpenSSL. - ]; - depsBuildBuild = [ - pkgsWin64.stdenv.cc - ]; - buildInputs = [ - pkgsWin64.windows.pthreads - ]; - auditable = false; # Avoid cargo-auditable failures. - doCheck = false; # Disable test as it requires network access. - - CARGO_BUILD_TARGET = rustTarget; - TARGET_CC = "${pkgsWin64.stdenv.cc}/bin/${pkgsWin64.stdenv.cc.targetPrefix}cc"; - CARGO_BUILD_RUSTFLAGS = [ - "-C" - "linker=${TARGET_CC}" - "-L" - "native=${pkgsWin64.windows.pthreads}/lib" - ]; - - CC = "${pkgsWin64.stdenv.cc}/bin/${pkgsWin64.stdenv.cc.targetPrefix}cc"; - LD = "${pkgsWin64.stdenv.cc}/bin/${pkgsWin64.stdenv.cc.targetPrefix}cc"; - }; - - mkWin32RustPackage = packageName: - let - pkgsWin32 = pkgs.pkgsCross.mingw32; - rustTarget = pkgsWin32.stdenv.hostPlatform.rust.rustcTarget; - toolchainWin = fenixPkgs.combine [ - fenixPkgs.stable.rustc - fenixPkgs.stable.cargo - fenixPkgs.targets.${rustTarget}.stable.rust-std - ]; - naerskWin = pkgs.callPackage naersk { - cargo = toolchainWin; - rustc = toolchainWin; - }; - - # Get rid of MCF Gthread library. - # See - # and - # for details. - # - # Use DWARF-2 instead of SJLJ for exception handling. - winCC = pkgsWin32.buildPackages.wrapCC ( - (pkgsWin32.buildPackages.gcc-unwrapped.override - ({ - threadsCross = { - model = "win32"; - package = null; - }; - })).overrideAttrs (oldAttr: { - configureFlags = oldAttr.configureFlags ++ [ - "--disable-sjlj-exceptions" - "--with-dwarf2" - ]; - }) - ); - in - naerskWin.buildPackage rec { - pname = packageName; - cargoBuildOptions = x: x ++ [ "--package" packageName ]; - version = manifest.version; - strictDeps = true; - src = pkgs.lib.cleanSource ./.; - nativeBuildInputs = [ - pkgs.perl # Needed to build vendored OpenSSL. - ]; - depsBuildBuild = [ - winCC - ]; - buildInputs = [ - pkgsWin32.windows.pthreads - ]; - auditable = false; # Avoid cargo-auditable failures. - doCheck = false; # Disable test as it requires network access. - - CARGO_BUILD_TARGET = rustTarget; - TARGET_CC = "${winCC}/bin/${winCC.targetPrefix}cc"; - CARGO_BUILD_RUSTFLAGS = [ - "-C" - "linker=${TARGET_CC}" - "-L" - "native=${pkgsWin32.windows.pthreads}/lib" - ]; + mkWin64RustPackage = pkgs.callPackage ./nix/win64-package.nix { + inherit naersk system fenixPkgs; + version = manifest.version; + }; - CC = "${winCC}/bin/${winCC.targetPrefix}cc"; - LD = "${winCC}/bin/${winCC.targetPrefix}cc"; - }; + mkWin32RustPackage = pkgs.callPackage ./nix/win32-package.nix { + inherit naersk system fenixPkgs; + version = manifest.version; + }; mkCrossRustPackage = pkgs.callPackage ./nix/cross-rust-package.nix { inherit nixpkgs arch2targets naersk fenixPkgs system rustSrc; diff --git a/nix/win32-package.nix b/nix/win32-package.nix new file mode 100644 index 0000000000..ebaa3fc660 --- /dev/null +++ b/nix/win32-package.nix @@ -0,0 +1,66 @@ +{ pkgs, naersk, fenixPkgs, system, version }: +packageName: +let + pkgsWin32 = pkgs.pkgsCross.mingw32; + rustTarget = pkgsWin32.stdenv.hostPlatform.rust.rustcTarget; + toolchainWin = fenixPkgs.combine [ + fenixPkgs.stable.rustc + fenixPkgs.stable.cargo + fenixPkgs.targets.${rustTarget}.stable.rust-std + ]; + naerskWin = pkgs.callPackage naersk { + cargo = toolchainWin; + rustc = toolchainWin; + }; + + # Get rid of MCF Gthread library. + # See + # and + # for details. + # + # Use DWARF-2 instead of SJLJ for exception handling. + winCC = pkgsWin32.buildPackages.wrapCC ( + (pkgsWin32.buildPackages.gcc-unwrapped.override + ({ + threadsCross = { + model = "win32"; + package = null; + }; + })).overrideAttrs (oldAttr: { + configureFlags = oldAttr.configureFlags ++ [ + "--disable-sjlj-exceptions" + "--with-dwarf2" + ]; + }) + ); +in +naerskWin.buildPackage rec { + pname = packageName; + cargoBuildOptions = x: x ++ [ "--package" packageName ]; + inherit version; + strictDeps = true; + src = pkgs.lib.cleanSource ../.; + nativeBuildInputs = [ + pkgs.perl # Needed to build vendored OpenSSL. + ]; + depsBuildBuild = [ + winCC + ]; + buildInputs = [ + pkgsWin32.windows.pthreads + ]; + auditable = false; # Avoid cargo-auditable failures. + doCheck = false; # Disable test as it requires network access. + + CARGO_BUILD_TARGET = rustTarget; + TARGET_CC = "${winCC}/bin/${winCC.targetPrefix}cc"; + CARGO_BUILD_RUSTFLAGS = [ + "-C" + "linker=${TARGET_CC}" + "-L" + "native=${pkgsWin32.windows.pthreads}/lib" + ]; + + CC = "${winCC}/bin/${winCC.targetPrefix}cc"; + LD = "${winCC}/bin/${winCC.targetPrefix}cc"; +} diff --git a/nix/win64-package.nix b/nix/win64-package.nix new file mode 100644 index 0000000000..98197cb007 --- /dev/null +++ b/nix/win64-package.nix @@ -0,0 +1,45 @@ +{ pkgs, naersk, fenixPkgs, system, version }: +packageName: +let + pkgsWin64 = pkgs.pkgsCross.mingwW64; + rustTarget = pkgsWin64.stdenv.hostPlatform.rust.rustcTarget; + toolchainWin = fenixPkgs.combine [ + fenixPkgs.stable.rustc + fenixPkgs.stable.cargo + fenixPkgs.targets.${rustTarget}.stable.rust-std + ]; + naerskWin = pkgs.callPackage naersk { + cargo = toolchainWin; + rustc = toolchainWin; + }; +in +naerskWin.buildPackage rec { + pname = packageName; + cargoBuildOptions = x: x ++ [ "--package" packageName ]; + inherit version; + strictDeps = true; + src = pkgs.lib.cleanSource ../.; + nativeBuildInputs = [ + pkgs.perl # Needed to build vendored OpenSSL. + ]; + depsBuildBuild = [ + pkgsWin64.stdenv.cc + ]; + buildInputs = [ + pkgsWin64.windows.pthreads + ]; + auditable = false; # Avoid cargo-auditable failures. + doCheck = false; # Disable test as it requires network access. + + CARGO_BUILD_TARGET = rustTarget; + TARGET_CC = "${pkgsWin64.stdenv.cc}/bin/${pkgsWin64.stdenv.cc.targetPrefix}cc"; + CARGO_BUILD_RUSTFLAGS = [ + "-C" + "linker=${TARGET_CC}" + "-L" + "native=${pkgsWin64.windows.pthreads}/lib" + ]; + + CC = "${pkgsWin64.stdenv.cc}/bin/${pkgsWin64.stdenv.cc.targetPrefix}cc"; + LD = "${pkgsWin64.stdenv.cc}/bin/${pkgsWin64.stdenv.cc.targetPrefix}cc"; +} From fbc21f3bc670d1b950e7e8972bf93c07b2e21f66 Mon Sep 17 00:00:00 2001 From: link2xt Date: Thu, 28 May 2026 01:38:36 +0200 Subject: [PATCH 18/19] nix: split out android package --- flake.nix | 64 ++--------------------------------------- nix/android-package.nix | 63 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 61 deletions(-) create mode 100644 nix/android-package.nix diff --git a/flake.nix b/flake.nix index 10a4af2007..e041642de2 100644 --- a/flake.nix +++ b/flake.nix @@ -29,11 +29,6 @@ rustc = fenixToolchain; }; manifest = (pkgs.lib.importTOML ./Cargo.toml).package; - androidSdk = android.sdk.${system} (sdkPkgs: - builtins.attrValues { - inherit (sdkPkgs) ndk-27-2-12479018 cmdline-tools-latest; - }); - androidNdkRoot = "${androidSdk}/share/android-sdk/ndk/27.2.12479018"; rustSrc = nix-filter.lib { root = ./.; @@ -106,64 +101,11 @@ version = manifest.version; }; - androidAttrs = { - armeabi-v7a = { - cc = "armv7a-linux-androideabi21-clang"; - rustTarget = "armv7-linux-androideabi"; - }; - arm64-v8a = { - cc = "aarch64-linux-android21-clang"; - rustTarget = "aarch64-linux-android"; - }; - x86 = { - cc = "i686-linux-android21-clang"; - rustTarget = "i686-linux-android"; - }; - x86_64 = { - cc = "x86_64-linux-android21-clang"; - rustTarget = "x86_64-linux-android"; - }; + mkAndroidRustPackage = pkgs.callPackage ./nix/android-package.nix { + inherit naersk fenixPkgs system rustSrc android; + version = manifest.version; }; - mkAndroidRustPackage = arch: packageName: - let - rustTarget = androidAttrs.${arch}.rustTarget; - toolchain = fenixPkgs.combine [ - fenixPkgs.stable.rustc - fenixPkgs.stable.cargo - fenixPkgs.targets.${rustTarget}.stable.rust-std - ]; - naersk-lib = pkgs.callPackage naersk { - cargo = toolchain; - rustc = toolchain; - }; - targetToolchain = "${androidNdkRoot}/toolchains/llvm/prebuilt/linux-x86_64"; - targetCcName = androidAttrs.${arch}.cc; - targetCc = "${targetToolchain}/bin/${targetCcName}"; - in - naersk-lib.buildPackage rec { - pname = packageName; - cargoBuildOptions = x: x ++ [ "--package" packageName ]; - version = manifest.version; - strictDeps = true; - src = rustSrc; - nativeBuildInputs = [ - pkgs.perl # Needed to build vendored OpenSSL. - ]; - auditable = false; # Avoid cargo-auditable failures. - doCheck = false; # Disable test as it requires network access. - - CARGO_BUILD_TARGET = rustTarget; - TARGET_CC = "${targetCc}"; - CARGO_BUILD_RUSTFLAGS = [ - "-C" - "linker=${TARGET_CC}" - ]; - - CC = "${targetCc}"; - LD = "${targetCc}"; - }; - mkAndroidPackages = arch: let rpc-server = mkAndroidRustPackage arch "deltachat-rpc-server"; diff --git a/nix/android-package.nix b/nix/android-package.nix new file mode 100644 index 0000000000..1687046e42 --- /dev/null +++ b/nix/android-package.nix @@ -0,0 +1,63 @@ +{ pkgs, naersk, fenixPkgs, system, version, rustSrc, android }: +arch: packageName: +let + androidSdk = android.sdk.${system} (sdkPkgs: + builtins.attrValues { + inherit (sdkPkgs) ndk-27-2-12479018 cmdline-tools-latest; + }); + androidNdkRoot = "${androidSdk}/share/android-sdk/ndk/27.2.12479018"; + androidAttrs = { + armeabi-v7a = { + cc = "armv7a-linux-androideabi21-clang"; + rustTarget = "armv7-linux-androideabi"; + }; + arm64-v8a = { + cc = "aarch64-linux-android21-clang"; + rustTarget = "aarch64-linux-android"; + }; + x86 = { + cc = "i686-linux-android21-clang"; + rustTarget = "i686-linux-android"; + }; + x86_64 = { + cc = "x86_64-linux-android21-clang"; + rustTarget = "x86_64-linux-android"; + }; + }; + + rustTarget = androidAttrs.${arch}.rustTarget; + toolchain = fenixPkgs.combine [ + fenixPkgs.stable.rustc + fenixPkgs.stable.cargo + fenixPkgs.targets.${rustTarget}.stable.rust-std + ]; + naersk-lib = pkgs.callPackage naersk { + cargo = toolchain; + rustc = toolchain; + }; + targetToolchain = "${androidNdkRoot}/toolchains/llvm/prebuilt/linux-x86_64"; + targetCcName = androidAttrs.${arch}.cc; + targetCc = "${targetToolchain}/bin/${targetCcName}"; +in +naersk-lib.buildPackage rec { + pname = packageName; + cargoBuildOptions = x: x ++ [ "--package" packageName ]; + inherit version; + strictDeps = true; + src = rustSrc; + nativeBuildInputs = [ + pkgs.perl # Needed to build vendored OpenSSL. + ]; + auditable = false; # Avoid cargo-auditable failures. + doCheck = false; # Disable test as it requires network access. + + CARGO_BUILD_TARGET = rustTarget; + TARGET_CC = "${targetCc}"; + CARGO_BUILD_RUSTFLAGS = [ + "-C" + "linker=${TARGET_CC}" + ]; + + CC = "${targetCc}"; + LD = "${targetCc}"; +} From 81df15859cb3965df13e554357a6153c8796c826 Mon Sep 17 00:00:00 2001 From: link2xt Date: Thu, 28 May 2026 01:44:09 +0200 Subject: [PATCH 19/19] inherit version --- flake.nix | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/flake.nix b/flake.nix index e041642de2..d5094f39ea 100644 --- a/flake.nix +++ b/flake.nix @@ -29,6 +29,7 @@ rustc = fenixToolchain; }; manifest = (pkgs.lib.importTOML ./Cargo.toml).package; + version = manifest.version; rustSrc = nix-filter.lib { root = ./.; @@ -78,7 +79,7 @@ naersk'.buildPackage { pname = packageName; cargoBuildOptions = x: x ++ [ "--package" packageName ]; - version = manifest.version; + inherit version; src = pkgs.lib.cleanSource ./.; nativeBuildInputs = [ pkgs.perl # Needed to build vendored OpenSSL. @@ -87,23 +88,19 @@ doCheck = false; # Disable test as it requires network access. }; mkWin64RustPackage = pkgs.callPackage ./nix/win64-package.nix { - inherit naersk system fenixPkgs; - version = manifest.version; + inherit naersk system fenixPkgs version; }; mkWin32RustPackage = pkgs.callPackage ./nix/win32-package.nix { - inherit naersk system fenixPkgs; - version = manifest.version; + inherit naersk system fenixPkgs version; }; mkCrossRustPackage = pkgs.callPackage ./nix/cross-rust-package.nix { - inherit nixpkgs arch2targets naersk fenixPkgs system rustSrc; - version = manifest.version; + inherit nixpkgs arch2targets naersk fenixPkgs system rustSrc version; }; mkAndroidRustPackage = pkgs.callPackage ./nix/android-package.nix { - inherit naersk fenixPkgs system rustSrc android; - version = manifest.version; + inherit naersk fenixPkgs system rustSrc android version; }; mkAndroidPackages = arch: @@ -127,7 +124,7 @@ "deltachat-rpc-server-${arch}-wheel" = mkWheel { inherit rpc-server; arch = "${arch}"; }; }; - mkWheel = pkgs.callPackage ./nix/wheel.nix { inherit nix-filter; version = manifest.version; root = ./.; }; + mkWheel = pkgs.callPackage ./nix/wheel.nix { inherit nix-filter version; root = ./.; }; in { formatter = pkgs.nixpkgs-fmt; @@ -160,21 +157,20 @@ { 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 { version = manifest.version; }; + docs = pkgs.callPackage ./nix/c-docs.nix { inherit version; }; libdeltachat = pkgs.callPackage ./nix/libdeltachat.nix { - inherit fenixToolchain rustSrc cargoLock fenixPkgs; - version = manifest.version; + inherit fenixToolchain rustSrc cargoLock fenixPkgs version; }; deltachat-rpc-client = pkgs.callPackage ./nix/deltachat-rpc-client.nix { - version = manifest.version; + inherit version; }; deltachat-python = pkgs.python3Packages.buildPythonPackage { pname = "deltachat-python"; - version = manifest.version; + inherit version; src = pkgs.lib.cleanSource ./python; format = "pyproject"; buildInputs = [ @@ -193,8 +189,7 @@ ]; }; python-docs = pkgs.callPackage ./nix/python-docs.nix { - inherit deltachat-python deltachat-rpc-client; - version = manifest.version; + inherit deltachat-python deltachat-rpc-client version; }; };