mirror of
https://github.com/chatmail/core.git
synced 2026-05-08 01:16:31 +03:00
build(nix): cleanup cross-compilation code
This commit is contained in:
290
flake.nix
290
flake.nix
@@ -14,6 +14,69 @@
|
|||||||
fenixPkgs = fenix.packages.${system};
|
fenixPkgs = fenix.packages.${system};
|
||||||
naersk' = pkgs.callPackage naersk { };
|
naersk' = pkgs.callPackage naersk { };
|
||||||
manifest = (pkgs.lib.importTOML ./Cargo.toml).package;
|
manifest = (pkgs.lib.importTOML ./Cargo.toml).package;
|
||||||
|
|
||||||
|
rustSrc = nix-filter.lib {
|
||||||
|
root = ./.;
|
||||||
|
|
||||||
|
# Include only necessary files
|
||||||
|
# to avoid rebuilds e.g. when README.md or flake.nix changes.
|
||||||
|
include = [
|
||||||
|
./benches
|
||||||
|
./assets
|
||||||
|
./Cargo.lock
|
||||||
|
./Cargo.toml
|
||||||
|
./CMakeLists.txt
|
||||||
|
./CONTRIBUTING.md
|
||||||
|
./deltachat_derive
|
||||||
|
./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 rust targets and 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";
|
||||||
|
};
|
||||||
|
};
|
||||||
cargoLock = {
|
cargoLock = {
|
||||||
lockFile = ./Cargo.lock;
|
lockFile = ./Cargo.lock;
|
||||||
outputHashes = {
|
outputHashes = {
|
||||||
@@ -141,8 +204,10 @@
|
|||||||
LD = "${winCC}/bin/${winCC.targetPrefix}cc";
|
LD = "${winCC}/bin/${winCC.targetPrefix}cc";
|
||||||
};
|
};
|
||||||
|
|
||||||
mkCrossRustPackage = rustTarget: crossTarget: packageName:
|
mkCrossRustPackage = arch: packageName:
|
||||||
let
|
let
|
||||||
|
rustTarget = arch2targets."${arch}".rustTarget;
|
||||||
|
crossTarget = arch2targets."${arch}".crossTarget;
|
||||||
pkgsCross = import nixpkgs {
|
pkgsCross = import nixpkgs {
|
||||||
system = system;
|
system = system;
|
||||||
crossSystem.config = crossTarget;
|
crossSystem.config = crossTarget;
|
||||||
@@ -164,7 +229,7 @@
|
|||||||
cargoBuildOptions = x: x ++ [ "--package" packageName ];
|
cargoBuildOptions = x: x ++ [ "--package" packageName ];
|
||||||
version = manifest.version;
|
version = manifest.version;
|
||||||
strictDeps = true;
|
strictDeps = true;
|
||||||
src = pkgs.lib.cleanSource ./.;
|
src = rustSrc;
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = [
|
||||||
pkgs.perl # Needed to build vendored OpenSSL.
|
pkgs.perl # Needed to build vendored OpenSSL.
|
||||||
];
|
];
|
||||||
@@ -182,150 +247,113 @@
|
|||||||
LD = "${pkgsCross.stdenv.cc}/bin/${pkgsCross.stdenv.cc.targetPrefix}cc";
|
LD = "${pkgsCross.stdenv.cc}/bin/${pkgsCross.stdenv.cc.targetPrefix}cc";
|
||||||
};
|
};
|
||||||
|
|
||||||
mk-aarch64-RustPackage = mkCrossRustPackage "aarch64-unknown-linux-musl" "aarch64-unknown-linux-musl";
|
mkRustPackages = arch: {
|
||||||
mk-i686-RustPackage = mkCrossRustPackage "i686-unknown-linux-musl" "i686-unknown-linux-musl";
|
"deltachat-repl-${arch}" = mkCrossRustPackage arch "deltachat-repl";
|
||||||
mk-x86_64-RustPackage = mkCrossRustPackage "x86_64-unknown-linux-musl" "x86_64-unknown-linux-musl";
|
"deltachat-rpc-server-${arch}" = mkCrossRustPackage arch "deltachat-rpc-server";
|
||||||
mk-armv7l-RustPackage = mkCrossRustPackage "armv7-unknown-linux-musleabihf" "armv7l-unknown-linux-musleabihf";
|
};
|
||||||
mk-armv6l-RustPackage = mkCrossRustPackage "arm-unknown-linux-musleabihf" "armv6l-unknown-linux-musleabihf";
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
formatter = pkgs.nixpkgs-fmt;
|
formatter = pkgs.nixpkgs-fmt;
|
||||||
|
|
||||||
packages = rec {
|
packages =
|
||||||
# Run with `nix run .#deltachat-repl foo.db`.
|
mkRustPackages "aarch64-linux" //
|
||||||
deltachat-repl = mkRustPackage "deltachat-repl";
|
mkRustPackages "i686-linux" //
|
||||||
deltachat-rpc-server = mkRustPackage "deltachat-rpc-server";
|
mkRustPackages "x86_64-linux" //
|
||||||
|
mkRustPackages "armv7l-linux" //
|
||||||
|
mkRustPackages "armv6l-linux" // 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-repl-win64 = mkWin64RustPackage "deltachat-repl";
|
||||||
deltachat-rpc-server-win64 = mkWin64RustPackage "deltachat-rpc-server";
|
deltachat-rpc-server-win64 = mkWin64RustPackage "deltachat-rpc-server";
|
||||||
|
|
||||||
deltachat-repl-win32 = mkWin32RustPackage "deltachat-repl";
|
deltachat-repl-win32 = mkWin32RustPackage "deltachat-repl";
|
||||||
deltachat-rpc-server-win32 = mkWin32RustPackage "deltachat-rpc-server";
|
deltachat-rpc-server-win32 = mkWin32RustPackage "deltachat-rpc-server";
|
||||||
|
|
||||||
deltachat-repl-aarch64-linux = mk-aarch64-RustPackage "deltachat-repl";
|
|
||||||
deltachat-rpc-server-aarch64-linux = mk-aarch64-RustPackage "deltachat-rpc-server";
|
|
||||||
|
|
||||||
deltachat-repl-i686-linux = mk-i686-RustPackage "deltachat-repl";
|
|
||||||
deltachat-rpc-server-i686-linux = mk-i686-RustPackage "deltachat-rpc-server";
|
|
||||||
|
|
||||||
deltachat-repl-x86_64-linux = mk-x86_64-RustPackage "deltachat-repl";
|
# Run `nix build .#docs` to get C docs generated in `./result/`.
|
||||||
deltachat-rpc-server-x86_64-linux = mk-x86_64-RustPackage "deltachat-rpc-server";
|
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'';
|
||||||
|
};
|
||||||
|
|
||||||
deltachat-repl-armv7l-linux = mk-armv7l-RustPackage "deltachat-repl";
|
libdeltachat =
|
||||||
deltachat-rpc-server-armv7l-linux = mk-armv7l-RustPackage "deltachat-rpc-server";
|
pkgs.stdenv.mkDerivation rec {
|
||||||
|
pname = "libdeltachat";
|
||||||
|
version = manifest.version;
|
||||||
|
src = rustSrc;
|
||||||
|
cargoDeps = pkgs.rustPlatform.importCargoLock cargoLock;
|
||||||
|
|
||||||
deltachat-repl-armv6l-linux = mk-armv6l-RustPackage "deltachat-repl";
|
nativeBuildInputs = [
|
||||||
deltachat-rpc-server-armv6l-linux = mk-armv6l-RustPackage "deltachat-rpc-server";
|
pkgs.perl # Needed to build vendored OpenSSL.
|
||||||
|
pkgs.cmake
|
||||||
# Run `nix build .#docs` to get C docs generated in `./result/`.
|
pkgs.rustPlatform.cargoSetupHook
|
||||||
docs =
|
pkgs.cargo
|
||||||
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'';
|
|
||||||
};
|
|
||||||
|
|
||||||
libdeltachat =
|
|
||||||
pkgs.stdenv.mkDerivation rec {
|
|
||||||
pname = "libdeltachat";
|
|
||||||
version = manifest.version;
|
|
||||||
src = nix-filter.lib {
|
|
||||||
root = ./.;
|
|
||||||
|
|
||||||
# Include only necessary files
|
|
||||||
# to avoid rebuilds e.g. when README.md or flake.nix changes.
|
|
||||||
include = [
|
|
||||||
./benches
|
|
||||||
./assets
|
|
||||||
./Cargo.lock
|
|
||||||
./Cargo.toml
|
|
||||||
./CMakeLists.txt
|
|
||||||
./CONTRIBUTING.md
|
|
||||||
./deltachat_derive
|
|
||||||
./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")
|
postInstall = ''
|
||||||
"flake.lock"
|
substituteInPlace $out/include/deltachat.h \
|
||||||
|
--replace __FILE__ '"${placeholder "out"}/include/deltachat.h"'
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
deltachat-rpc-client =
|
||||||
|
pkgs.python3Packages.buildPythonPackage rec {
|
||||||
|
pname = "deltachat-rpc-client";
|
||||||
|
version = manifest.version;
|
||||||
|
src = pkgs.lib.cleanSource ./deltachat-rpc-client;
|
||||||
|
format = "pyproject";
|
||||||
|
propagatedBuildInputs = [
|
||||||
|
pkgs.python3Packages.setuptools
|
||||||
|
pkgs.python3Packages.setuptools_scm
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
cargoDeps = pkgs.rustPlatform.importCargoLock cargoLock;
|
|
||||||
|
|
||||||
nativeBuildInputs = [
|
deltachat-python =
|
||||||
pkgs.perl # Needed to build vendored OpenSSL.
|
pkgs.python3Packages.buildPythonPackage rec {
|
||||||
pkgs.cmake
|
pname = "deltachat-python";
|
||||||
pkgs.rustPlatform.cargoSetupHook
|
version = manifest.version;
|
||||||
pkgs.cargo
|
src = pkgs.lib.cleanSource ./python;
|
||||||
];
|
format = "pyproject";
|
||||||
|
buildInputs = [
|
||||||
postInstall = ''
|
libdeltachat
|
||||||
substituteInPlace $out/include/deltachat.h \
|
];
|
||||||
--replace __FILE__ '"${placeholder "out"}/include/deltachat.h"'
|
nativeBuildInputs = [
|
||||||
'';
|
pkgs.pkg-config
|
||||||
};
|
];
|
||||||
|
propagatedBuildInputs = [
|
||||||
deltachat-rpc-client =
|
pkgs.python3Packages.setuptools
|
||||||
pkgs.python3Packages.buildPythonPackage rec {
|
pkgs.python3Packages.setuptools_scm
|
||||||
pname = "deltachat-rpc-client";
|
pkgs.python3Packages.pkgconfig
|
||||||
version = manifest.version;
|
pkgs.python3Packages.cffi
|
||||||
src = pkgs.lib.cleanSource ./deltachat-rpc-client;
|
pkgs.python3Packages.imap-tools
|
||||||
format = "pyproject";
|
pkgs.python3Packages.pluggy
|
||||||
propagatedBuildInputs = [
|
pkgs.python3Packages.requests
|
||||||
pkgs.python3Packages.setuptools
|
];
|
||||||
pkgs.python3Packages.setuptools_scm
|
};
|
||||||
];
|
python-docs =
|
||||||
};
|
pkgs.stdenv.mkDerivation {
|
||||||
|
pname = "docs";
|
||||||
deltachat-python =
|
version = manifest.version;
|
||||||
pkgs.python3Packages.buildPythonPackage rec {
|
src = pkgs.lib.cleanSource ./.;
|
||||||
pname = "deltachat-python";
|
buildInputs = [
|
||||||
version = manifest.version;
|
deltachat-python
|
||||||
src = pkgs.lib.cleanSource ./python;
|
deltachat-rpc-client
|
||||||
format = "pyproject";
|
pkgs.python3Packages.breathe
|
||||||
buildInputs = [
|
pkgs.python3Packages.sphinx_rtd_theme
|
||||||
libdeltachat
|
];
|
||||||
];
|
nativeBuildInputs = [ pkgs.sphinx ];
|
||||||
nativeBuildInputs = [
|
buildPhase = ''sphinx-build -b html -a python/doc/ dist/html'';
|
||||||
pkgs.pkg-config
|
installPhase = ''mkdir -p $out; cp -av dist/html $out'';
|
||||||
];
|
};
|
||||||
propagatedBuildInputs = [
|
};
|
||||||
pkgs.python3Packages.setuptools
|
|
||||||
pkgs.python3Packages.setuptools_scm
|
|
||||||
pkgs.python3Packages.pkgconfig
|
|
||||||
pkgs.python3Packages.cffi
|
|
||||||
pkgs.python3Packages.imap-tools
|
|
||||||
pkgs.python3Packages.pluggy
|
|
||||||
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'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user