switch to cross-naersk

This commit is contained in:
Robin Appelman 2023-06-11 19:25:12 +02:00
commit 969a417951
2 changed files with 37 additions and 65 deletions

24
flake.lock generated
View file

@ -1,5 +1,28 @@
{ {
"nodes": { "nodes": {
"cross-naersk": {
"inputs": {
"naersk": [
"naersk"
],
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1686501881,
"narHash": "sha256-qFxW9cuCfvo7Kcc7mSt53wkP1ti4Y5PTXJKLARPIWm8=",
"owner": "icewind1991",
"repo": "cross-naersk",
"rev": "95a73c480942aa9910fab37c29e3412bd915252e",
"type": "github"
},
"original": {
"owner": "icewind1991",
"repo": "cross-naersk",
"type": "github"
}
},
"naersk": { "naersk": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -38,6 +61,7 @@
}, },
"root": { "root": {
"inputs": { "inputs": {
"cross-naersk": "cross-naersk",
"naersk": "naersk", "naersk": "naersk",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"rust-overlay": "rust-overlay", "rust-overlay": "rust-overlay",

View file

@ -7,6 +7,9 @@
rust-overlay.url = "github:oxalica/rust-overlay"; rust-overlay.url = "github:oxalica/rust-overlay";
rust-overlay.inputs.nixpkgs.follows = "nixpkgs"; rust-overlay.inputs.nixpkgs.follows = "nixpkgs";
rust-overlay.inputs.flake-utils.follows = "utils"; rust-overlay.inputs.flake-utils.follows = "utils";
cross-naersk.url = "github:icewind1991/cross-naersk";
cross-naersk.inputs.nixpkgs.follows = "nixpkgs";
cross-naersk.inputs.naersk.follows = "naersk";
}; };
outputs = { outputs = {
@ -15,6 +18,7 @@
utils, utils,
naersk, naersk,
rust-overlay, rust-overlay,
cross-naersk,
}: }:
utils.lib.eachDefaultSystem (system: let utils.lib.eachDefaultSystem (system: let
overlays = [ (import rust-overlay) ]; overlays = [ (import rust-overlay) ];
@ -23,13 +27,6 @@
}; };
lib = pkgs.lib; lib = pkgs.lib;
pkgs-cross-mingw = import nixpkgs {
crossSystem = {
config = "x86_64-w64-mingw32";
};
inherit system overlays;
};
hostTarget = pkgs.hostPlatform.config; hostTarget = pkgs.hostPlatform.config;
targets = [ targets = [
hostTarget hostTarget
@ -42,36 +39,11 @@
releaseTargets = lib.lists.remove hostTarget targets; releaseTargets = lib.lists.remove hostTarget targets;
toolchain = (pkgs.rust-bin.stable.latest.default.override { inherit targets; });
execSufficForTarget = target: if lib.strings.hasInfix "windows" target then ".exe" else ""; execSufficForTarget = target: if lib.strings.hasInfix "windows" target then ".exe" else "";
artifactForTarget = target: "palantir${execSufficForTarget target}"; artifactForTarget = target: "palantir${execSufficForTarget target}";
assetNameForTarget = target: "palantir-${builtins.replaceStrings ["-unknown" "-gnu" "-musl" "abihf" "-pc"] ["" "" "" "" ""] target}${execSufficForTarget target}"; assetNameForTarget = target: "palantir-${builtins.replaceStrings ["-unknown" "-gnu" "-musl" "abihf" "-pc"] ["" "" "" "" ""] target}${execSufficForTarget target}";
crossArgs = { cross-naersk' = pkgs.callPackage cross-naersk {inherit naersk;};
"armv7-unknown-linux-musleabihf" = {
nativeBuildInputs = [ pkgs.pkgsCross.armv7l-hf-multiplatform.stdenv.cc ];
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_RUSTFLAGS = "-C target-feature=+crt-static";
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_LINKER = "${pkgs.pkgsCross.armv7l-hf-multiplatform.stdenv.cc.targetPrefix}cc";
};
"aarch64-unknown-linux-musl" = {
nativeBuildInputs = [ pkgs.pkgsCross.aarch64-multiplatform-musl.stdenv.cc ];
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUSTFLAGS = "-C target-feature=+crt-static";
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER = "${pkgs.pkgsCross.aarch64-multiplatform-musl.stdenv.cc.targetPrefix}cc";
};
"i686-unknown-linux-musl" = {
nativeBuildInputs = [ pkgs.pkgsCross.musl32.stdenv.cc ];
CARGO_TARGET_I686_UNKNOWN_LINUX_MUSL_RUSTFLAGS = "-C target-feature=+crt-static";
CARGO_TARGET_I686_UNKNOWN_LINUX_MUSL_LINKER = "${pkgs.pkgsCross.musl32.stdenv.cc.targetPrefix}cc";
};
};
mingw_w64_cc = pkgs.pkgsCross.mingwW64.stdenv.cc;
windows = pkgs.pkgsCross.mingwW64.windows;
naersk' = pkgs.callPackage naersk {
cargo = toolchain;
rustc = toolchain;
};
addUdev = '' addUdev = ''
mkdir -p $out/lib/udev/rules.d/ mkdir -p $out/lib/udev/rules.d/
@ -84,37 +56,19 @@
nearskOpt = { nearskOpt = {
pname = "palantir"; pname = "palantir";
root = src; root = src;
};
buildWindows = target: naersk'.buildPackage (nearskOpt // {
strictDeps = true;
depsBuildBuild = with pkgs; [
mingw_w64_cc
];
nativeBuildInputs = [ mingw_w64_cc ];
# only add pthreads when building the final package, not when building the dependencies
# otherwise it interferes with building build scripts
overrideMain = args: args // { buildInputs = [ windows.pthreads ]; };
CARGO_BUILD_TARGET = target;
});
buildLinux = target: naersk'.buildPackage (nearskOpt // {
postInstall = addUdev; postInstall = addUdev;
};
CARGO_BUILD_TARGET = target; buildTarget = target: (cross-naersk' target).buildPackage nearskOpt;
} // (if (hostTarget != target) then (crossArgs.${target} or {}) else {})); hostNaersk = (cross-naersk' hostTarget);
buildAny = target: if (nixpkgs.lib.strings.hasInfix "windows" target) then (buildWindows target) else (buildLinux target);
in rec { in rec {
# `nix build` # `nix build`
packages = nixpkgs.lib.attrsets.genAttrs targets buildAny // rec { packages = nixpkgs.lib.attrsets.genAttrs targets buildTarget // rec {
palantir = naersk'.buildPackage (nearskOpt // { palantir = packages.${hostTarget};
postInstall = addUdev; check = hostNaersk.buildPackage (nearskOpt // {
});
check = naersk'.buildPackage (nearskOpt // {
mode = "check"; mode = "check";
}); });
clippy = naersk'.buildPackage (nearskOpt // { clippy = hostNaersk.buildPackage (nearskOpt // {
mode = "clippy"; mode = "clippy";
}); });
default = palantir; default = palantir;
@ -137,15 +91,9 @@
# `nix develop` # `nix develop`
devShells.default = pkgs.mkShell { devShells.default = pkgs.mkShell {
nativeBuildInputs = with pkgs; [ nativeBuildInputs = with pkgs; [
toolchain pkgs.rust-bin.stable.latest.default
bacon bacon
mingw_w64_cc
]; ];
depsBuildBuild = [ pkgs.wine64 ];
# buildInputs = [ windows.pthreads ];
CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER = "${mingw_w64_cc.targetPrefix}cc";
CARGO_TARGET_X86_64_PC_WINDOWS_GNU_RUNNER = "wine64";
}; };
}) })
// { // {