Skip to content

Commit 34aebe2

Browse files
committed
nix: split out windows builds
1 parent 801909e commit 34aebe2

3 files changed

Lines changed: 119 additions & 109 deletions

File tree

flake.nix

Lines changed: 8 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -91,116 +91,15 @@
9191
auditable = false; # Avoid cargo-auditable failures.
9292
doCheck = false; # Disable test as it requires network access.
9393
};
94-
mkWin64RustPackage = packageName:
95-
let
96-
pkgsWin64 = pkgs.pkgsCross.mingwW64;
97-
rustTarget = pkgsWin64.stdenv.hostPlatform.rust.rustcTarget;
98-
toolchainWin = fenixPkgs.combine [
99-
fenixPkgs.stable.rustc
100-
fenixPkgs.stable.cargo
101-
fenixPkgs.targets.${rustTarget}.stable.rust-std
102-
];
103-
naerskWin = pkgs.callPackage naersk {
104-
cargo = toolchainWin;
105-
rustc = toolchainWin;
106-
};
107-
in
108-
naerskWin.buildPackage rec {
109-
pname = packageName;
110-
cargoBuildOptions = x: x ++ [ "--package" packageName ];
111-
version = manifest.version;
112-
strictDeps = true;
113-
src = pkgs.lib.cleanSource ./.;
114-
nativeBuildInputs = [
115-
pkgs.perl # Needed to build vendored OpenSSL.
116-
];
117-
depsBuildBuild = [
118-
pkgsWin64.stdenv.cc
119-
];
120-
buildInputs = [
121-
pkgsWin64.windows.pthreads
122-
];
123-
auditable = false; # Avoid cargo-auditable failures.
124-
doCheck = false; # Disable test as it requires network access.
125-
126-
CARGO_BUILD_TARGET = rustTarget;
127-
TARGET_CC = "${pkgsWin64.stdenv.cc}/bin/${pkgsWin64.stdenv.cc.targetPrefix}cc";
128-
CARGO_BUILD_RUSTFLAGS = [
129-
"-C"
130-
"linker=${TARGET_CC}"
131-
"-L"
132-
"native=${pkgsWin64.windows.pthreads}/lib"
133-
];
134-
135-
CC = "${pkgsWin64.stdenv.cc}/bin/${pkgsWin64.stdenv.cc.targetPrefix}cc";
136-
LD = "${pkgsWin64.stdenv.cc}/bin/${pkgsWin64.stdenv.cc.targetPrefix}cc";
137-
};
138-
139-
mkWin32RustPackage = packageName:
140-
let
141-
pkgsWin32 = pkgs.pkgsCross.mingw32;
142-
rustTarget = pkgsWin32.stdenv.hostPlatform.rust.rustcTarget;
143-
toolchainWin = fenixPkgs.combine [
144-
fenixPkgs.stable.rustc
145-
fenixPkgs.stable.cargo
146-
fenixPkgs.targets.${rustTarget}.stable.rust-std
147-
];
148-
naerskWin = pkgs.callPackage naersk {
149-
cargo = toolchainWin;
150-
rustc = toolchainWin;
151-
};
152-
153-
# Get rid of MCF Gthread library.
154-
# See <https://github.com/NixOS/nixpkgs/issues/156343>
155-
# and <https://discourse.nixos.org/t/statically-linked-mingw-binaries/38395>
156-
# for details.
157-
#
158-
# Use DWARF-2 instead of SJLJ for exception handling.
159-
winCC = pkgsWin32.buildPackages.wrapCC (
160-
(pkgsWin32.buildPackages.gcc-unwrapped.override
161-
({
162-
threadsCross = {
163-
model = "win32";
164-
package = null;
165-
};
166-
})).overrideAttrs (oldAttr: {
167-
configureFlags = oldAttr.configureFlags ++ [
168-
"--disable-sjlj-exceptions"
169-
"--with-dwarf2"
170-
];
171-
})
172-
);
173-
in
174-
naerskWin.buildPackage rec {
175-
pname = packageName;
176-
cargoBuildOptions = x: x ++ [ "--package" packageName ];
177-
version = manifest.version;
178-
strictDeps = true;
179-
src = pkgs.lib.cleanSource ./.;
180-
nativeBuildInputs = [
181-
pkgs.perl # Needed to build vendored OpenSSL.
182-
];
183-
depsBuildBuild = [
184-
winCC
185-
];
186-
buildInputs = [
187-
pkgsWin32.windows.pthreads
188-
];
189-
auditable = false; # Avoid cargo-auditable failures.
190-
doCheck = false; # Disable test as it requires network access.
191-
192-
CARGO_BUILD_TARGET = rustTarget;
193-
TARGET_CC = "${winCC}/bin/${winCC.targetPrefix}cc";
194-
CARGO_BUILD_RUSTFLAGS = [
195-
"-C"
196-
"linker=${TARGET_CC}"
197-
"-L"
198-
"native=${pkgsWin32.windows.pthreads}/lib"
199-
];
94+
mkWin64RustPackage = pkgs.callPackage ./nix/win64-package.nix {
95+
inherit naersk system fenixPkgs;
96+
version = manifest.version;
97+
};
20098

201-
CC = "${winCC}/bin/${winCC.targetPrefix}cc";
202-
LD = "${winCC}/bin/${winCC.targetPrefix}cc";
203-
};
99+
mkWin32RustPackage = pkgs.callPackage ./nix/win32-package.nix {
100+
inherit naersk system fenixPkgs;
101+
version = manifest.version;
102+
};
204103

205104
mkCrossRustPackage = pkgs.callPackage ./nix/cross-rust-package.nix {
206105
inherit nixpkgs arch2targets naersk fenixPkgs system rustSrc;

nix/win32-package.nix

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
{ pkgs, naersk, fenixPkgs, system, version }:
2+
packageName:
3+
let
4+
pkgsWin32 = pkgs.pkgsCross.mingw32;
5+
rustTarget = pkgsWin32.stdenv.hostPlatform.rust.rustcTarget;
6+
toolchainWin = fenixPkgs.combine [
7+
fenixPkgs.stable.rustc
8+
fenixPkgs.stable.cargo
9+
fenixPkgs.targets.${rustTarget}.stable.rust-std
10+
];
11+
naerskWin = pkgs.callPackage naersk {
12+
cargo = toolchainWin;
13+
rustc = toolchainWin;
14+
};
15+
16+
# Get rid of MCF Gthread library.
17+
# See <https://github.com/NixOS/nixpkgs/issues/156343>
18+
# and <https://discourse.nixos.org/t/statically-linked-mingw-binaries/38395>
19+
# for details.
20+
#
21+
# Use DWARF-2 instead of SJLJ for exception handling.
22+
winCC = pkgsWin32.buildPackages.wrapCC (
23+
(pkgsWin32.buildPackages.gcc-unwrapped.override
24+
({
25+
threadsCross = {
26+
model = "win32";
27+
package = null;
28+
};
29+
})).overrideAttrs (oldAttr: {
30+
configureFlags = oldAttr.configureFlags ++ [
31+
"--disable-sjlj-exceptions"
32+
"--with-dwarf2"
33+
];
34+
})
35+
);
36+
in
37+
naerskWin.buildPackage rec {
38+
pname = packageName;
39+
cargoBuildOptions = x: x ++ [ "--package" packageName ];
40+
inherit version;
41+
strictDeps = true;
42+
src = pkgs.lib.cleanSource ../.;
43+
nativeBuildInputs = [
44+
pkgs.perl # Needed to build vendored OpenSSL.
45+
];
46+
depsBuildBuild = [
47+
winCC
48+
];
49+
buildInputs = [
50+
pkgsWin32.windows.pthreads
51+
];
52+
auditable = false; # Avoid cargo-auditable failures.
53+
doCheck = false; # Disable test as it requires network access.
54+
55+
CARGO_BUILD_TARGET = rustTarget;
56+
TARGET_CC = "${winCC}/bin/${winCC.targetPrefix}cc";
57+
CARGO_BUILD_RUSTFLAGS = [
58+
"-C"
59+
"linker=${TARGET_CC}"
60+
"-L"
61+
"native=${pkgsWin32.windows.pthreads}/lib"
62+
];
63+
64+
CC = "${winCC}/bin/${winCC.targetPrefix}cc";
65+
LD = "${winCC}/bin/${winCC.targetPrefix}cc";
66+
}

nix/win64-package.nix

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
{ pkgs, naersk, fenixPkgs, system, version }:
2+
packageName:
3+
let
4+
pkgsWin64 = pkgs.pkgsCross.mingwW64;
5+
rustTarget = pkgsWin64.stdenv.hostPlatform.rust.rustcTarget;
6+
toolchainWin = fenixPkgs.combine [
7+
fenixPkgs.stable.rustc
8+
fenixPkgs.stable.cargo
9+
fenixPkgs.targets.${rustTarget}.stable.rust-std
10+
];
11+
naerskWin = pkgs.callPackage naersk {
12+
cargo = toolchainWin;
13+
rustc = toolchainWin;
14+
};
15+
in
16+
naerskWin.buildPackage rec {
17+
pname = packageName;
18+
cargoBuildOptions = x: x ++ [ "--package" packageName ];
19+
inherit version;
20+
strictDeps = true;
21+
src = pkgs.lib.cleanSource ../.;
22+
nativeBuildInputs = [
23+
pkgs.perl # Needed to build vendored OpenSSL.
24+
];
25+
depsBuildBuild = [
26+
pkgsWin64.stdenv.cc
27+
];
28+
buildInputs = [
29+
pkgsWin64.windows.pthreads
30+
];
31+
auditable = false; # Avoid cargo-auditable failures.
32+
doCheck = false; # Disable test as it requires network access.
33+
34+
CARGO_BUILD_TARGET = rustTarget;
35+
TARGET_CC = "${pkgsWin64.stdenv.cc}/bin/${pkgsWin64.stdenv.cc.targetPrefix}cc";
36+
CARGO_BUILD_RUSTFLAGS = [
37+
"-C"
38+
"linker=${TARGET_CC}"
39+
"-L"
40+
"native=${pkgsWin64.windows.pthreads}/lib"
41+
];
42+
43+
CC = "${pkgsWin64.stdenv.cc}/bin/${pkgsWin64.stdenv.cc.targetPrefix}cc";
44+
LD = "${pkgsWin64.stdenv.cc}/bin/${pkgsWin64.stdenv.cc.targetPrefix}cc";
45+
}

0 commit comments

Comments
 (0)