Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{
2 cargo-nextest,
3 clang,
4 diffutils,
5 lib,
6 makeSetupHook,
7 rust,
8 stdenv,
9 pkgsHostTarget,
10 pkgsTargetTarget,
11
12 # This confusingly-named parameter indicates the *subdirectory of
13 # `target/` from which to copy the build artifacts. It is derived
14 # from a stdenv platform (or a JSON file).
15 target ? stdenv.targetPlatform.rust.cargoShortTarget,
16 tests,
17 pkgsCross,
18}:
19{
20 cargoBuildHook = makeSetupHook {
21 name = "cargo-build-hook.sh";
22 substitutions = {
23 inherit (stdenv.targetPlatform.rust) rustcTarget;
24 inherit (rust.envVars) setEnv;
25
26 };
27 passthru.tests = {
28 test = tests.rust-hooks.cargoBuildHook;
29 }
30 // lib.optionalAttrs (stdenv.isLinux) {
31 testCross = pkgsCross.riscv64.tests.rust-hooks.cargoBuildHook;
32 };
33 } ./cargo-build-hook.sh;
34
35 cargoCheckHook = makeSetupHook {
36 name = "cargo-check-hook.sh";
37 substitutions = {
38 inherit (stdenv.targetPlatform.rust) rustcTarget;
39 inherit (rust.envVars) setEnv;
40 };
41 passthru.tests = {
42 test = tests.rust-hooks.cargoCheckHook;
43 }
44 // lib.optionalAttrs (stdenv.isLinux) {
45 testCross = pkgsCross.riscv64.tests.rust-hooks.cargoCheckHook;
46 };
47 } ./cargo-check-hook.sh;
48
49 cargoInstallHook = makeSetupHook {
50 name = "cargo-install-hook.sh";
51 substitutions = {
52 targetSubdirectory = target;
53 };
54 passthru.tests = {
55 test = tests.rust-hooks.cargoInstallHook;
56 }
57 // lib.optionalAttrs (stdenv.isLinux) {
58 testCross = pkgsCross.riscv64.tests.rust-hooks.cargoInstallHook;
59 };
60 } ./cargo-install-hook.sh;
61
62 cargoNextestHook = makeSetupHook {
63 name = "cargo-nextest-hook.sh";
64 propagatedBuildInputs = [ cargo-nextest ];
65 substitutions = {
66 inherit (stdenv.targetPlatform.rust) rustcTarget;
67 };
68 passthru.tests = {
69 test = tests.rust-hooks.cargoNextestHook;
70 }
71 // lib.optionalAttrs (stdenv.isLinux) {
72 testCross = pkgsCross.riscv64.tests.rust-hooks.cargoNextestHook;
73 };
74 } ./cargo-nextest-hook.sh;
75
76 cargoSetupHook = makeSetupHook {
77 name = "cargo-setup-hook.sh";
78 propagatedBuildInputs = [ ];
79 substitutions = {
80 defaultConfig = ../fetchcargo-default-config.toml;
81
82 # Specify the stdenv's `diff` by abspath to ensure that the user's build
83 # inputs do not cause us to find the wrong `diff`.
84 diff = "${lib.getBin diffutils}/bin/diff";
85
86 cargoConfig =
87 lib.optionalString (stdenv.hostPlatform.config != stdenv.targetPlatform.config) ''
88 [target."${stdenv.targetPlatform.rust.rustcTarget}"]
89 "linker" = "${pkgsTargetTarget.stdenv.cc}/bin/${pkgsTargetTarget.stdenv.cc.targetPrefix}cc"
90 "rustflags" = [ ${
91 lib.concatStringsSep ", " (
92 [
93 ''"-Ctarget-feature=${if stdenv.targetPlatform.isStatic then "+" else "-"}crt-static"''
94 ]
95 ++ lib.optional (!stdenv.targetPlatform.isx86_32) ''"-Cforce-frame-pointers=yes"''
96 )
97 } ]
98 ''
99 + ''
100 [target."${stdenv.hostPlatform.rust.rustcTarget}"]
101 "linker" = "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc"
102 "rustflags" = [ ${
103 lib.optionalString (!stdenv.hostPlatform.isx86_32) ''"-Cforce-frame-pointers=yes"''
104 } ]
105 '';
106 };
107
108 passthru.tests = {
109 test = tests.rust-hooks.cargoSetupHook;
110 }
111 // lib.optionalAttrs (stdenv.isLinux) {
112 testCross = pkgsCross.riscv64.tests.rust-hooks.cargoSetupHook;
113 };
114 } ./cargo-setup-hook.sh;
115
116 maturinBuildHook = makeSetupHook {
117 name = "maturin-build-hook.sh";
118 propagatedBuildInputs = [
119 pkgsHostTarget.maturin
120 pkgsHostTarget.cargo
121 pkgsHostTarget.rustc
122 ];
123 substitutions = {
124 inherit (stdenv.targetPlatform.rust) rustcTarget;
125 inherit (rust.envVars) setEnv;
126
127 };
128 } ./maturin-build-hook.sh;
129
130 bindgenHook = makeSetupHook {
131 name = "rust-bindgen-hook";
132 substitutions = {
133 libclang = (lib.getLib clang.cc);
134 inherit clang;
135 };
136 } ./rust-bindgen-hook.sh;
137}