-
Notifications
You must be signed in to change notification settings - Fork 13
/
build.nix
79 lines (71 loc) · 1.98 KB
/
build.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
{
pkgs,
lib ? pkgs.lib,
darwin ? pkgs.darwin,
windows ? pkgs.windows,
hostPlatform ? pkgs.hostPlatform,
stdenv ? pkgs.stdenv,
naersk,
crossTarget ? null,
static ? false,
enableMimalloc ? true,
enableRayon ? true,
enableFfmpeg ? false,
enableDevtools ? enableFfmpeg,
...
}:
let
inherit (builtins)
concatStringsSep
replaceStrings
isNull
;
jxlOxideCliToml = builtins.fromTOML (builtins.readFile ./crates/jxl-oxide-cli/Cargo.toml);
toScreamingSnakeCase = s: replaceStrings [ "-" ] [ "_" ] (lib.strings.toUpper s);
cargoEnvPrefix = "CARGO_TARGET_${toScreamingSnakeCase crossTarget}_";
commonBuildArgs = {
inherit (jxlOxideCliToml.package) name version;
pname = "jxl-oxide";
src = ./.;
strictDeps = true;
overrideMain = old: {
preConfigure = ''
cargo_build_options="$cargo_build_options -p jxl-oxide-cli"
'';
};
};
cargoBuildArgs =
let
featureList =
[ ]
++ lib.optional enableMimalloc "mimalloc"
++ lib.optional enableRayon "rayon"
++ lib.optional enableDevtools "__devtools"
++ lib.optional enableFfmpeg "__ffmpeg";
featureListStr = concatStringsSep "," featureList;
in
[ "--no-default-features" ]
++ lib.optionals (featureList != [ ]) [
"--features"
featureListStr
];
isMinGW = stdenv.cc.isGNU or false && hostPlatform.isWindows;
in
naersk.buildPackage (
commonBuildArgs
// {
cargoBuildOptions = args: args ++ cargoBuildArgs;
buildInputs = lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.SystemConfiguration ];
}
// lib.optionalAttrs (!isNull crossTarget) rec {
depsBuildBuild = [
stdenv.cc
] ++ lib.optional isMinGW windows.pthreads;
CARGO_BUILD_TARGET = crossTarget;
TARGET_CC = "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc";
"${cargoEnvPrefix}LINKER" = TARGET_CC;
}
// lib.optionalAttrs static {
"${cargoEnvPrefix}RUSTFLAGS" = "-C target-feature=+crt-static";
}
)