From 3d704a7025a2aa3d062cfafa20a59eee0927848a Mon Sep 17 00:00:00 2001 From: link2xt Date: Wed, 27 May 2026 23:41:50 +0200 Subject: [PATCH] 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 a4eebddbc..8a15c4517 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 000000000..87f0c6e28 --- /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"; +}