commit 2ce2c13402d8dcec749d25ddc3a2c9ccbe225ea7
parent d99928fdcfcd6bc9d72f2bfee234c1dee1727f3a
Author: Antoine A <>
Date: Thu, 15 Oct 2026 18:53:25 +0200
cli: cross compile deb packages
Diffstat:
14 files changed, 85 insertions(+), 107 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
@@ -505,9 +505,9 @@ checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570"
[[package]]
name = "combine"
-version = "4.6.8"
+version = "4.6.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cfc320937d09e6de266b31b9afb480f197d7a861be86be7cb2ea7e5d1bfffc5e"
+checksum = "4356eba6976435498d05a311ee9fc486da3bc81c200d3f0d7dd9703b41913f92"
dependencies = [
"bytes",
"memchr",
@@ -769,9 +769,9 @@ checksum = "7eed2c4702fa172d1ce21078faa7c5203e69f5394d48cc436d25928394a867a2"
[[package]]
name = "defmt"
-version = "1.1.1"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2953bfe4f93bbd20cc71198842756f77d161884c99ebbabc41d80231ded88d1"
+checksum = "e4a0795ac740cb54d7b3775c9c17345f6aaecf884c01733b39d6017738e0e3e1"
dependencies = [
"bitflags 1.3.2",
"defmt-macros",
@@ -779,21 +779,21 @@ dependencies = [
[[package]]
name = "defmt-macros"
-version = "1.1.1"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bad9c72e7ca2137e0dc3813245a0d282fd6daad32fd800af018306a9169b5fe8"
+checksum = "840bb056bd99c495c9188198a258ab787c79f306d864db3e6e8451442d6d8366"
dependencies = [
"defmt-parser",
"proc-macro2",
"quote",
- "syn 2.0.119",
+ "syn 3.0.9",
]
[[package]]
name = "defmt-parser"
-version = "1.0.0"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e"
+checksum = "71958f69fb2de856c5dd51ac9377e986ca1aa5919f931bf5395a807277f889a0"
dependencies = [
"thiserror",
]
@@ -814,9 +814,9 @@ dependencies = [
[[package]]
name = "deranged"
-version = "0.5.8"
+version = "0.5.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c"
+checksum = "9e9de72ce2ad1f90dc62fa25f0f430ef85eb4b0d8fa0be4f30373bc40a21d28e"
[[package]]
name = "derive_more"
@@ -938,9 +938,9 @@ dependencies = [
[[package]]
name = "equivalent"
-version = "1.0.2"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
+checksum = "00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826"
[[package]]
name = "errno"
@@ -1331,7 +1331,7 @@ dependencies = [
[[package]]
name = "http-client"
version = "1.5.0"
-source = "git+git://git.taler.net/taler-rust.git/#7edc32c25b781cab5937bfa7fe97ca6665c0eb49"
+source = "git+git://git.taler.net/taler-rust.git/#d05b51e0311cc01db1202d43f201ccdb9e4d6e2a"
dependencies = [
"futures-util",
"http",
@@ -1588,9 +1588,9 @@ dependencies = [
[[package]]
name = "inout"
-version = "0.2.2"
+version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7"
+checksum = "d8c0d789294fb457b791f7797a04478704788f30b407e5d0b01deaa846572d9f"
dependencies = [
"hybrid-array",
]
@@ -2672,9 +2672,9 @@ dependencies = [
[[package]]
name = "rustls"
-version = "0.23.45"
+version = "0.23.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634"
+checksum = "48e13bd8c0e9365c43cfa5c9e8f9ad49d3c8444926c9aac819e0e4dc503c8fdf"
dependencies = [
"aws-lc-rs",
"log",
@@ -2687,9 +2687,9 @@ dependencies = [
[[package]]
name = "rustls-native-certs"
-version = "0.8.4"
+version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d"
+checksum = "4a073f5dc7469f984c52ad2752b63b0807745133b6de880b7b64c1ac4c48aec4"
dependencies = [
"openssl-probe",
"rustls-pki-types",
@@ -3304,7 +3304,7 @@ dependencies = [
[[package]]
name = "taler-api"
version = "1.5.0"
-source = "git+git://git.taler.net/taler-rust.git/#7edc32c25b781cab5937bfa7fe97ca6665c0eb49"
+source = "git+git://git.taler.net/taler-rust.git/#d05b51e0311cc01db1202d43f201ccdb9e4d6e2a"
dependencies = [
"aws-lc-rs",
"axum",
@@ -3334,12 +3334,12 @@ dependencies = [
[[package]]
name = "taler-build"
version = "1.5.0"
-source = "git+git://git.taler.net/taler-rust.git/#7edc32c25b781cab5937bfa7fe97ca6665c0eb49"
+source = "git+git://git.taler.net/taler-rust.git/#d05b51e0311cc01db1202d43f201ccdb9e4d6e2a"
[[package]]
name = "taler-common"
version = "1.5.0"
-source = "git+git://git.taler.net/taler-rust.git/#7edc32c25b781cab5937bfa7fe97ca6665c0eb49"
+source = "git+git://git.taler.net/taler-rust.git/#d05b51e0311cc01db1202d43f201ccdb9e4d6e2a"
dependencies = [
"anyhow",
"aws-lc-rs",
@@ -3370,7 +3370,7 @@ dependencies = [
[[package]]
name = "taler-macros"
version = "1.5.0"
-source = "git+git://git.taler.net/taler-rust.git/#7edc32c25b781cab5937bfa7fe97ca6665c0eb49"
+source = "git+git://git.taler.net/taler-rust.git/#d05b51e0311cc01db1202d43f201ccdb9e4d6e2a"
dependencies = [
"proc-macro2",
"quote",
@@ -3380,7 +3380,7 @@ dependencies = [
[[package]]
name = "taler-test-utils"
version = "1.5.0"
-source = "git+git://git.taler.net/taler-rust.git/#7edc32c25b781cab5937bfa7fe97ca6665c0eb49"
+source = "git+git://git.taler.net/taler-rust.git/#d05b51e0311cc01db1202d43f201ccdb9e4d6e2a"
dependencies = [
"aws-lc-rs",
"axum",
@@ -3525,9 +3525,9 @@ checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee"
[[package]]
name = "tokio"
-version = "1.53.2"
+version = "1.53.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e95f91fcc7a621e8b030f6aa23c71fe9838ae2fb4d8118b75602a328f5144044"
+checksum = "ce3335fa71841cda333a58d7615b03901380ecf09d59b3296d21f8bbac0dde4e"
dependencies = [
"bytes",
"libc",
@@ -4388,18 +4388,18 @@ dependencies = [
[[package]]
name = "zerocopy"
-version = "0.8.62"
+version = "0.8.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "86502bf56ac7c77571a32e2647bb2a15894565e981fb2a48d7bde2d91c965a9d"
+checksum = "e5fe1f8f1b06191a00962174c61aa5005e0bb391a6d80d07e24d115c01a92ed8"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
-version = "0.8.62"
+version = "0.8.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5457206954b06561e2608c7e19cf58b1926586d999c246eebe4502f7e2039d1a"
+checksum = "863ad3ac83293fb4d740aedbfdc9240dd8d1a50c1099acd76ce80ce7c7230c7f"
dependencies = [
"proc-macro2",
"quote",
diff --git a/Cargo.toml b/Cargo.toml
@@ -5,7 +5,7 @@ members = ["libeufin-bank", "libeufin-ebics", "libeufin-ebisync", "libeufin-nexu
[workspace.package]
version = "1.5.0"
edition = "2024"
-rust-version = "1.93"
+rust-version = "1.95"
authors = ["Taler Systems SA <deb@taler.net>"]
homepage = "https://taler.net/"
repository = "https://git.taler.net/libeufin.git"
diff --git a/Makefile b/Makefile
@@ -64,7 +64,7 @@ doc:
.PHONY: deb
deb:
- dpkg-buildpackage -b -uc -us
+ dpkg-buildpackage -b -uc -us $(if $(DEB_HOST_ARCH),-a$(DEB_HOST_ARCH))
.PHONY: ci
ci:
diff --git a/build-system/configure.py b/build-system/configure.py
@@ -13,18 +13,8 @@ import subprocess
import sys
-# Oldest Rust release that can build this tree. Keep the reason for the number
-# next to it -- the point of the check is to report an unusable toolchain here,
-# once, instead of as a wall of parse errors in the middle of the build.
-#
-# 1.85 edition 2024 / resolver "3" (Cargo.toml)
-# 1.86 Vec::pop_if (common/failure-injection)
-# 1.88 let chains (used throughout)
-# 1.93 std::fmt::from_fn (taler-common, taler-api, taler-wise)
-#
-# Debian trixie ships 1.85, which is too old; trixie-backports and testing both
-# ship a new enough rustc. Keep this in step with `rust-version` in Cargo.toml.
-RUST_MIN_VERSION = "1.93"
+# Supported Rust baseline from trixie-backports; keep in sync with Cargo.toml.
+RUST_MIN_VERSION = "1.95"
BUILD_VARIABLE = re.compile(r"[A-Za-z_][A-Za-z0-9_]*=.*", re.DOTALL)
diff --git a/contrib/ci/Containerfile b/contrib/ci/Containerfile
@@ -3,7 +3,9 @@ FROM docker.io/library/debian:trixie
ENV DEBIAN_FRONTEND=noninteractive
# Apt sync
-RUN apt-get update -yq && \
+RUN dpkg --add-architecture amd64 && \
+ dpkg --add-architecture arm64 && \
+ apt-get update -yq && \
apt-get upgrade -yq && \
# Install build & test dependencies
apt-get install -yq \
@@ -15,15 +17,15 @@ RUN apt-get update -yq && \
postgresql \
debhelper \
build-essential \
+ crossbuild-essential-amd64 \
+ crossbuild-essential-arm64 \
git-buildpackage && \
- # Rust from trixie-backports: trixie itself ships 1.85, this tree needs
- # >= 1.93 (std::fmt::from_fn). Backports keeps the base image -- and
- # therefore the glibc the .deb is linked against -- on stable, which
- # matters because the artifacts are published to a trixie repository.
+ # Use Rust from backports while keeping the trixie base system.
echo 'deb http://deb.debian.org/debian trixie-backports main' \
> /etc/apt/sources.list.d/backports.list && \
apt-get update -yq && \
- apt-get install -yq -t trixie-backports rustc cargo rust-clippy && \
+ apt-get install -yq -t trixie-backports rustc cargo rust-clippy \
+ libstd-rust-dev:amd64 libstd-rust-dev:arm64 && \
rm -rf /var/lib/apt/lists/* && \
curl -sSL https://taler.net/taler-systems.gpg \
-o /etc/apt/keyrings/taler-systems.gpg && \
diff --git a/contrib/ci/jobs/4-deb-amd64/config.ini b/contrib/ci/jobs/4-deb-amd64/config.ini
@@ -1,6 +0,0 @@
-[build]
-HALT_ON_FAILURE = True
-WARN_ON_FAILURE = True
-CONTAINER_BUILD = True
-CONTAINER_NAME = localhost/libeufin:amd64
-CONTAINER_ARCH = amd64
diff --git a/contrib/ci/jobs/4-deb-amd64/job.sh b/contrib/ci/jobs/4-deb-amd64/job.sh
@@ -1,22 +0,0 @@
-#!/bin/bash
-set -exuo pipefail
-
-# Update system
-apt-get update -yq
-apt-get upgrade -yq
-
-# Build package
-VERSION="$(./contrib/ci/version.sh)"
-export VERSION
-: "${VERSION:?version generation returned an empty version}"
-echo "Building package version ${VERSION}"
-EMAIL=none gbp dch --dch-opt=-b --ignore-branch --debian-tag="%(version)s" --git-author --new-version="${VERSION}"
-make deb
-
-# Test package
-sudo ./contrib/ci/deb-test.sh
-
-# Move to artifact
-ls -alh ../*.deb
-mkdir -p /artifacts/libeufin/${CI_COMMIT_REF}
-mv ../*.deb /artifacts/libeufin/${CI_COMMIT_REF}
-\ No newline at end of file
diff --git a/contrib/ci/jobs/4-deb/job.sh b/contrib/ci/jobs/4-deb/job.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+set -exuo pipefail
+
+# Update system
+apt-get update -yq
+apt-get upgrade -yq
+
+./bootstrap
+
+# Build package
+VERSION="$(./contrib/ci/version.sh)"
+export VERSION
+: "${VERSION:?version generation returned an empty version}"
+echo "Building package version ${VERSION}"
+EMAIL=none gbp dch --dch-opt=-b --ignore-branch --debian-tag="%(version)s" --git-author --new-version="${VERSION}"
+make deb
+
+# Test package
+sudo ./contrib/ci/deb-test.sh
+
+# Cross-compile the other supported architecture.
+case "$(dpkg --print-architecture)" in
+ amd64) make deb DEB_HOST_ARCH=arm64 ;;
+ arm64) make deb DEB_HOST_ARCH=amd64 ;;
+esac
+
+# Move to artifact
+ls -alh ../*.deb
+mkdir -p /artifacts/libeufin/${CI_COMMIT_REF}
+mv ../*.deb /artifacts/libeufin/${CI_COMMIT_REF}
+\ No newline at end of file
diff --git a/contrib/ci/jobs/5-deb-arm64/config.ini b/contrib/ci/jobs/5-deb-arm64/config.ini
@@ -1,6 +0,0 @@
-[build]
-HALT_ON_FAILURE = True
-WARN_ON_FAILURE = True
-CONTAINER_BUILD = True
-CONTAINER_NAME = localhost/libeufin:arm64
-CONTAINER_ARCH = arm64
diff --git a/contrib/ci/jobs/5-deb-arm64/job.sh b/contrib/ci/jobs/5-deb-arm64/job.sh
@@ -1 +0,0 @@
-../4-deb-amd64/job.sh
-\ No newline at end of file
diff --git a/contrib/ci/jobs/6-deploy/config.ini b/contrib/ci/jobs/5-deploy/config.ini
diff --git a/contrib/ci/jobs/6-deploy/job.sh b/contrib/ci/jobs/5-deploy/job.sh
diff --git a/debian/control b/debian/control
@@ -5,13 +5,8 @@ Maintainer: Taler Systems SA <deb@taler.net>
Uploaders: Christian Grothoff <grothoff@gnu.org>, Florian Dold <dold@taler.net>
Build-Depends:
debhelper-compat (= 13),
- cargo | rustup,
-# 1.93, not 1.85: taler-common/taler-api use std::fmt::from_fn, stabilised in
-# 1.93 (let-chains, 1.88, and Vec::pop_if, 1.86, put the floor above trixie's
-# 1.85 already). Use trixie-backports for the packaged compiler, or rustup
-# with a toolchain >= 1.93 as in the taler-deployment build images.
-# Cargo.toml enforces the compiler minimum for either toolchain source.
- rustc (>= 1.93) | rustup
+ cargo:native,
+ rustc:native (>= 1.95)
Standards-Version: 4.7.2
Vcs-Git: https://git.taler.net/libeufin.git
Homepage: https://taler.net/
diff --git a/debian/rules b/debian/rules
@@ -1,23 +1,20 @@
#!/usr/bin/make -f
+export CARGO_BUILD_TARGET = $(DEB_HOST_GNU_CPU)-unknown-linux-gnu
+export RUSTFLAGS += -C linker=$(DEB_HOST_GNU_TYPE)-gcc
+
+# Keep Debian flags off native build dependencies.
+export CFLAGS_$(subst -,_,$(CARGO_BUILD_TARGET)) = $(CFLAGS) $(CPPFLAGS)
+
%:
dh $@ --no-parallel
-override_dh_auto_configure:
- # Nothing to configure: debian/*.install hardcodes the /usr paths and the
- # build only needs a cargo from $PATH (see Build-Depends). The step is
- # still overridden so that dh does not hand ./configure the autoconf-style
- # arguments it does not accept.
+override_dh_auto_configure override_dh_auto_test override_dh_auto_install:
true
override_dh_auto_build:
- make build
-
-override_dh_auto_test:
- true
-
-override_dh_auto_install:
- true
+ env -u CFLAGS $(MAKE) build
+ install -t target/release $(addprefix target/$(CARGO_BUILD_TARGET)/release/,$(filter-out libeufin-common,$(shell dh_listpackages)))
override_dh_installsystemd: