Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at python-updates 137 lines 4.1 kB view raw
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}