diff options
author | Alyssa Ross <hi@alyssa.is> | 2023-05-09 13:38:32 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2023-11-09 10:02:24 +0100 |
commit | e3e57b8f1885bf1dc4787728479711f46a4171cc (patch) | |
tree | e83bec78d2ee16e3453cfb39b45c03f759cb06c8 /pkgs/development/compilers/rust | |
parent | fecd99b105c644b1b61abfec6c203b304269e1e2 (diff) | |
download | nixlib-e3e57b8f1885bf1dc4787728479711f46a4171cc.tar nixlib-e3e57b8f1885bf1dc4787728479711f46a4171cc.tar.gz nixlib-e3e57b8f1885bf1dc4787728479711f46a4171cc.tar.bz2 nixlib-e3e57b8f1885bf1dc4787728479711f46a4171cc.tar.lz nixlib-e3e57b8f1885bf1dc4787728479711f46a4171cc.tar.xz nixlib-e3e57b8f1885bf1dc4787728479711f46a4171cc.tar.zst nixlib-e3e57b8f1885bf1dc4787728479711f46a4171cc.zip |
lib.systems: elaborate Rust metadata
We need this stuff to be available in lib so make-derivation.nix can access it to construct the Meson cross file. This has a couple of other advantages: - It makes Rust less special. Now figuring out what Rust calls a platform is the same as figuring out what Linux or QEMU call it. - We can unify the schema used to define Rust targets, and the schema used to access those values later. Just like you can set "config" or "system" in a platform definition, and then access those same keys on the elaborated platform, you can now set "rustcTarget" in your crossSystem, and then access "stdenv.hostPlatform.rustcTarget" in your code. "rustcTarget", "rustcTargetSpec", "cargoShortTarget", and "cargoEnvVarTarget" have the "rustc" and "cargo" prefixes because these are not exposed to code by the compiler, and are not standardized. The arch/os/etc. variables are all named to match the forms in the Rust target spec JSON. The new rust.target-family only takes a list, since we don't need to worry about backwards compatibility when that name is used. The old APIs are all still functional with no warning for now, so that it's possible for external code to use a single API on both 23.05 and 23.11. We can introduce the warnings once 23.05 is EOL, and make them hard errors when 23.11 is EOL.
Diffstat (limited to 'pkgs/development/compilers/rust')
-rw-r--r-- | pkgs/development/compilers/rust/bootstrap.nix | 4 | ||||
-rw-r--r-- | pkgs/development/compilers/rust/cargo.nix | 4 | ||||
-rw-r--r-- | pkgs/development/compilers/rust/rustc.nix | 38 |
3 files changed, 23 insertions, 23 deletions
diff --git a/pkgs/development/compilers/rust/bootstrap.nix b/pkgs/development/compilers/rust/bootstrap.nix index 7c0b46d55931..97ac69270252 100644 --- a/pkgs/development/compilers/rust/bootstrap.nix +++ b/pkgs/development/compilers/rust/bootstrap.nix @@ -1,7 +1,7 @@ -{ stdenv, fetchurl, rust, callPackage, version, hashes }: +{ stdenv, fetchurl, callPackage, version, hashes }: let - platform = rust.toRustTarget stdenv.hostPlatform; + platform = stdenv.hostPlatform.rust.rustcTarget; src = fetchurl { url = "https://static.rust-lang.org/dist/rust-${version}-${platform}.tar.gz"; diff --git a/pkgs/development/compilers/rust/cargo.nix b/pkgs/development/compilers/rust/cargo.nix index 46e238ff4797..8eb628aa536b 100644 --- a/pkgs/development/compilers/rust/cargo.nix +++ b/pkgs/development/compilers/rust/cargo.nix @@ -1,6 +1,6 @@ { lib, stdenv, pkgsBuildHost, pkgsHostHost , file, curl, pkg-config, python3, openssl, cmake, zlib -, installShellFiles, makeWrapper, rustPlatform, rust, rustc +, installShellFiles, makeWrapper, rustPlatform, rustc , CoreFoundation, Security , auditable ? !cargo-auditable.meta.broken , cargo-auditable @@ -116,6 +116,6 @@ rustPlatform.buildRustPackage.override { broken = stdenv.hostPlatform.isx86 && stdenv.buildPlatform != stdenv.hostPlatform; }; } -// lib.optionalAttrs (rust.toRustTarget stdenv.buildPlatform != rust.toRustTarget stdenv.hostPlatform) { +// lib.optionalAttrs (stdenv.buildPlatform.rust.rustcTarget != stdenv.hostPlatform.rust.rustcTarget) { HOST_PKG_CONFIG_PATH="${pkgsBuildBuild.pkg-config}/bin/pkg-config"; }) diff --git a/pkgs/development/compilers/rust/rustc.nix b/pkgs/development/compilers/rust/rustc.nix index 44c290acbd3a..5f97b0f4019d 100644 --- a/pkgs/development/compilers/rust/rustc.nix +++ b/pkgs/development/compilers/rust/rustc.nix @@ -1,7 +1,7 @@ { lib, stdenv, removeReferencesTo, pkgsBuildBuild, pkgsBuildHost, pkgsBuildTarget, targetPackages , llvmShared, llvmSharedForBuild, llvmSharedForHost, llvmSharedForTarget, llvmPackages , fetchurl, file, python3 -, darwin, cargo, cmake, rust, rustc +, darwin, cargo, cmake, rustc , pkg-config, openssl, xz , libiconv , which, libffi @@ -51,7 +51,7 @@ in stdenv.mkDerivation rec { # but it does support checking these idiosyncratic PKG_CONFIG_${TRIPLE} # environment variables. # [1]: https://github.com/rust-lang/pkg-config-rs/issues/53 - "PKG_CONFIG_${builtins.replaceStrings ["-"] ["_"] (rust.toRustTarget stdenv.buildPlatform)}" = + "PKG_CONFIG_${builtins.replaceStrings ["-"] ["_"] stdenv.buildPlatform.rust.rustcTarget}" = "${pkgsBuildHost.stdenv.cc.targetPrefix}pkg-config"; NIX_LDFLAGS = toString ( @@ -69,9 +69,9 @@ in stdenv.mkDerivation rec { prefixForStdenv = stdenv: "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}"; ccPrefixForStdenv = stdenv: "${prefixForStdenv stdenv}${if (stdenv.cc.isClang or false) then "clang" else "cc"}"; cxxPrefixForStdenv = stdenv: "${prefixForStdenv stdenv}${if (stdenv.cc.isClang or false) then "clang++" else "c++"}"; - setBuild = "--set=target.${rust.toRustTarget stdenv.buildPlatform}"; - setHost = "--set=target.${rust.toRustTarget stdenv.hostPlatform}"; - setTarget = "--set=target.${rust.toRustTarget stdenv.targetPlatform}"; + setBuild = "--set=target.${stdenv.buildPlatform.rust.rustcTarget}"; + setHost = "--set=target.${stdenv.hostPlatform.rust.rustcTarget}"; + setTarget = "--set=target.${stdenv.targetPlatform.rust.rustcTarget}"; ccForBuild = ccPrefixForStdenv pkgsBuildBuild.targetPackages.stdenv; cxxForBuild = cxxPrefixForStdenv pkgsBuildBuild.targetPackages.stdenv; ccForHost = ccPrefixForStdenv pkgsBuildHost.targetPackages.stdenv; @@ -85,23 +85,23 @@ in stdenv.mkDerivation rec { "--tools=rustc,rust-analyzer-proc-macro-srv" "--enable-rpath" "--enable-vendor" - "--build=${rust.toRustTargetSpec stdenv.buildPlatform}" - "--host=${rust.toRustTargetSpec stdenv.hostPlatform}" + "--build=${stdenv.buildPlatform.rust.rustcTargetSpec}" + "--host=${stdenv.hostPlatform.rust.rustcTargetSpec}" # std is built for all platforms in --target. "--target=${concatStringsSep "," ([ - (rust.toRustTargetSpec stdenv.targetPlatform) + stdenv.targetPlatform.rust.rustcTargetSpec # (build!=target): When cross-building a compiler we need to add # the build platform as well so rustc can compile build.rs # scripts. ] ++ optionals (stdenv.buildPlatform != stdenv.targetPlatform && !fastCross) [ - (rust.toRustTargetSpec stdenv.buildPlatform) + stdenv.buildPlatform.rust.rustcTargetSpec # (host!=target): When building a cross-targeting compiler we # need to add the host platform as well so rustc can compile # build.rs scripts. ] ++ optionals (stdenv.hostPlatform != stdenv.targetPlatform && !fastCross) [ - (rust.toRustTargetSpec stdenv.hostPlatform) + stdenv.hostPlatform.rust.rustcTargetSpec ])}" "${setBuild}.cc=${ccForBuild}" @@ -132,7 +132,7 @@ in stdenv.mkDerivation rec { "${setHost}.musl-root=${pkgsBuildHost.targetPackages.stdenv.cc.libc}" ] ++ optionals stdenv.targetPlatform.isMusl [ "${setTarget}.musl-root=${pkgsBuildTarget.targetPackages.stdenv.cc.libc}" - ] ++ optionals (rust.IsNoStdTarget stdenv.targetPlatform) [ + ] ++ optionals stdenv.targetPlatform.rust.isNoStdTarget [ "--disable-docs" ] ++ optionals (stdenv.isDarwin && stdenv.isx86_64) [ # https://github.com/rust-lang/rust/issues/92173 @@ -144,12 +144,12 @@ in stdenv.mkDerivation rec { buildPhase = if fastCross then " runHook preBuild - mkdir -p build/${rust.toRustTargetSpec stdenv.hostPlatform}/stage0-{std,rustc}/${rust.toRustTargetSpec stdenv.hostPlatform}/release/ - ln -s ${rustc}/lib/rustlib/${rust.toRustTargetSpec stdenv.hostPlatform}/libstd-*.so build/${rust.toRustTargetSpec stdenv.hostPlatform}/stage0-std/${rust.toRustTargetSpec stdenv.hostPlatform}/release/libstd.so - ln -s ${rustc}/lib/rustlib/${rust.toRustTargetSpec stdenv.hostPlatform}/librustc_driver-*.so build/${rust.toRustTargetSpec stdenv.hostPlatform}/stage0-rustc/${rust.toRustTargetSpec stdenv.hostPlatform}/release/librustc.so - ln -s ${rustc}/bin/rustc build/${rust.toRustTargetSpec stdenv.hostPlatform}/stage0-rustc/${rust.toRustTargetSpec stdenv.hostPlatform}/release/rustc-main - touch build/${rust.toRustTargetSpec stdenv.hostPlatform}/stage0-std/${rust.toRustTargetSpec stdenv.hostPlatform}/release/.libstd.stamp - touch build/${rust.toRustTargetSpec stdenv.hostPlatform}/stage0-rustc/${rust.toRustTargetSpec stdenv.hostPlatform}/release/.librustc.stamp + mkdir -p build/${stdenv.hostPlatform.rust.rustcTargetSpec}/stage0-{std,rustc}/${stdenv.hostPlatform.rust.rustcTargetSpec}/release/ + ln -s ${rustc}/lib/rustlib/${stdenv.hostPlatform.rust.rustcTargetSpec}/libstd-*.so build/${stdenv.hostPlatform.rust.rustcTargetSpec}/stage0-std/${stdenv.hostPlatform.rust.rustcTargetSpec}/release/libstd.so + ln -s ${rustc}/lib/rustlib/${stdenv.hostPlatform.rust.rustcTargetSpec}/librustc_driver-*.so build/${stdenv.hostPlatform.rust.rustcTargetSpec}/stage0-rustc/${stdenv.hostPlatform.rust.rustcTargetSpec}/release/librustc.so + ln -s ${rustc}/bin/rustc build/${stdenv.hostPlatform.rust.rustcTargetSpec}/stage0-rustc/${stdenv.hostPlatform.rust.rustcTargetSpec}/release/rustc-main + touch build/${stdenv.hostPlatform.rust.rustcTargetSpec}/stage0-std/${stdenv.hostPlatform.rust.rustcTargetSpec}/release/.libstd.stamp + touch build/${stdenv.hostPlatform.rust.rustcTargetSpec}/stage0-rustc/${stdenv.hostPlatform.rust.rustcTargetSpec}/release/.librustc.stamp python ./x.py --keep-stage=0 --stage=1 build library/std runHook postBuild @@ -162,8 +162,8 @@ in stdenv.mkDerivation rec { mkdir -v $out/bin $doc $man makeWrapper ${rustc}/bin/rustc $out/bin/rustc --add-flags "--sysroot $out" makeWrapper ${rustc}/bin/rustdoc $out/bin/rustdoc --add-flags "--sysroot $out" - ln -s ${rustc}/lib/rustlib/{manifest-rust-std-,}${rust.toRustTargetSpec stdenv.hostPlatform} $out/lib/rustlib/ - echo rust-std-${rust.toRustTargetSpec stdenv.hostPlatform} >> $out/lib/rustlib/components + ln -s ${rustc}/lib/rustlib/{manifest-rust-std-,}${stdenv.hostPlatform.rust.rustcTargetSpec} $out/lib/rustlib/ + echo rust-std-${stdenv.hostPlatform.rust.rustcTargetSpec} >> $out/lib/rustlib/components lndir ${rustc.doc} $doc lndir ${rustc.man} $man |