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.
This commit is contained in:
parent
fecd99b105
commit
e3e57b8f18
@ -43,6 +43,10 @@ rec {
|
|||||||
elaborate = args': let
|
elaborate = args': let
|
||||||
args = if lib.isString args' then { system = args'; }
|
args = if lib.isString args' then { system = args'; }
|
||||||
else args';
|
else args';
|
||||||
|
|
||||||
|
# TODO: deprecate args.rustc in favour of args.rust after 23.05 is EOL.
|
||||||
|
rust = assert !(args ? rust && args ? rustc); args.rust or args.rustc or {};
|
||||||
|
|
||||||
final = {
|
final = {
|
||||||
# Prefer to parse `config` as it is strictly more informative.
|
# Prefer to parse `config` as it is strictly more informative.
|
||||||
parsed = parse.mkSystemFromString (if args ? config then args.config else args.system);
|
parsed = parse.mkSystemFromString (if args ? config then args.config else args.system);
|
||||||
@ -159,9 +163,101 @@ rec {
|
|||||||
({
|
({
|
||||||
linux-kernel = args.linux-kernel or {};
|
linux-kernel = args.linux-kernel or {};
|
||||||
gcc = args.gcc or {};
|
gcc = args.gcc or {};
|
||||||
rustc = args.rustc or {};
|
|
||||||
} // platforms.select final)
|
} // platforms.select final)
|
||||||
linux-kernel gcc rustc;
|
linux-kernel gcc;
|
||||||
|
|
||||||
|
# TODO: remove after 23.05 is EOL, with an error pointing to the rust.* attrs.
|
||||||
|
rustc = args.rustc or {};
|
||||||
|
|
||||||
|
rust = rust // {
|
||||||
|
# Once args.rustc.platform.target-family is deprecated and
|
||||||
|
# removed, there will no longer be any need to modify any
|
||||||
|
# values from args.rust.platform, so we can drop all the
|
||||||
|
# "args ? rust" etc. checks, and merge args.rust.platform in
|
||||||
|
# /after/.
|
||||||
|
platform = rust.platform or {} // {
|
||||||
|
# https://doc.rust-lang.org/reference/conditional-compilation.html#target_arch
|
||||||
|
arch =
|
||||||
|
/**/ if rust ? platform then rust.platform.arch
|
||||||
|
else if final.isAarch32 then "arm"
|
||||||
|
else if final.isMips64 then "mips64" # never add "el" suffix
|
||||||
|
else if final.isPower64 then "powerpc64" # never add "le" suffix
|
||||||
|
else final.parsed.cpu.name;
|
||||||
|
|
||||||
|
# https://doc.rust-lang.org/reference/conditional-compilation.html#target_os
|
||||||
|
os =
|
||||||
|
/**/ if rust ? platform then rust.platform.os or "none"
|
||||||
|
else if final.isDarwin then "macos"
|
||||||
|
else final.parsed.kernel.name;
|
||||||
|
|
||||||
|
# https://doc.rust-lang.org/reference/conditional-compilation.html#target_family
|
||||||
|
target-family =
|
||||||
|
/**/ if args ? rust.platform.target-family then args.rust.platform.target-family
|
||||||
|
else if args ? rustc.platform.target-family
|
||||||
|
then
|
||||||
|
(
|
||||||
|
# Since https://github.com/rust-lang/rust/pull/84072
|
||||||
|
# `target-family` is a list instead of single value.
|
||||||
|
let
|
||||||
|
f = args.rustc.platform.target-family;
|
||||||
|
in
|
||||||
|
if builtins.isList f then f else [ f ]
|
||||||
|
)
|
||||||
|
else lib.optional final.isUnix "unix"
|
||||||
|
++ lib.optional final.isWindows "windows";
|
||||||
|
|
||||||
|
# https://doc.rust-lang.org/reference/conditional-compilation.html#target_vendor
|
||||||
|
vendor = let
|
||||||
|
inherit (final.parsed) vendor;
|
||||||
|
in rust.platform.vendor or {
|
||||||
|
"w64" = "pc";
|
||||||
|
}.${vendor.name} or vendor.name;
|
||||||
|
};
|
||||||
|
|
||||||
|
# The name of the rust target, even if it is custom. Adjustments are
|
||||||
|
# because rust has slightly different naming conventions than we do.
|
||||||
|
rustcTarget = let
|
||||||
|
inherit (final.parsed) cpu kernel abi;
|
||||||
|
cpu_ = rust.platform.arch or {
|
||||||
|
"armv7a" = "armv7";
|
||||||
|
"armv7l" = "armv7";
|
||||||
|
"armv6l" = "arm";
|
||||||
|
"armv5tel" = "armv5te";
|
||||||
|
"riscv64" = "riscv64gc";
|
||||||
|
}.${cpu.name} or cpu.name;
|
||||||
|
vendor_ = final.rust.platform.vendor;
|
||||||
|
in rust.config
|
||||||
|
or "${cpu_}-${vendor_}-${kernel.name}${lib.optionalString (abi.name != "unknown") "-${abi.name}"}";
|
||||||
|
|
||||||
|
# The name of the rust target if it is standard, or the json file
|
||||||
|
# containing the custom target spec.
|
||||||
|
rustcTargetSpec =
|
||||||
|
/**/ if rust ? platform
|
||||||
|
then builtins.toFile (final.rust.rustcTarget + ".json") (builtins.toJSON rust.platform)
|
||||||
|
else final.rust.rustcTarget;
|
||||||
|
|
||||||
|
# The name of the rust target if it is standard, or the
|
||||||
|
# basename of the file containing the custom target spec,
|
||||||
|
# without the .json extension.
|
||||||
|
#
|
||||||
|
# This is the name used by Cargo for target subdirectories.
|
||||||
|
cargoShortTarget =
|
||||||
|
lib.removeSuffix ".json" (baseNameOf "${final.rust.rustcTargetSpec}");
|
||||||
|
|
||||||
|
# When used as part of an environment variable name, triples are
|
||||||
|
# uppercased and have all hyphens replaced by underscores:
|
||||||
|
#
|
||||||
|
# https://github.com/rust-lang/cargo/pull/9169
|
||||||
|
# https://github.com/rust-lang/cargo/issues/8285#issuecomment-634202431
|
||||||
|
cargoEnvVarTarget =
|
||||||
|
lib.strings.replaceStrings ["-"] ["_"]
|
||||||
|
(lib.strings.toUpper final.rust.cargoShortTarget);
|
||||||
|
|
||||||
|
# True if the target is no_std
|
||||||
|
# https://github.com/rust-lang/rust/blob/2e44c17c12cec45b6a682b1e53a04ac5b5fcc9d2/src/bootstrap/config.rs#L415-L421
|
||||||
|
isNoStdTarget =
|
||||||
|
builtins.any (t: lib.hasInfix t final.rust.rustcTarget) ["-none" "nvptx" "switch" "-uefi"];
|
||||||
|
};
|
||||||
|
|
||||||
linuxArch =
|
linuxArch =
|
||||||
if final.isAarch32 then "arm"
|
if final.isAarch32 then "arm"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{ autoreconfHook, boost180, cargo, coreutils, curl, cxx-rs, db62, fetchFromGitHub
|
{ autoreconfHook, boost180, cargo, coreutils, curl, cxx-rs, db62, fetchFromGitHub
|
||||||
, git, hexdump, lib, libevent, libsodium, makeWrapper, rust, rustPlatform
|
, git, hexdump, lib, libevent, libsodium, makeWrapper, rustPlatform
|
||||||
, pkg-config, Security, stdenv, testers, tl-expected, utf8cpp, util-linux, zcash, zeromq
|
, pkg-config, Security, stdenv, testers, tl-expected, utf8cpp, util-linux, zcash, zeromq
|
||||||
}:
|
}:
|
||||||
|
|
||||||
@ -57,7 +57,7 @@ rustPlatform.buildRustPackage.override { inherit stdenv; } rec {
|
|||||||
configureFlags = [
|
configureFlags = [
|
||||||
"--disable-tests"
|
"--disable-tests"
|
||||||
"--with-boost-libdir=${lib.getLib boost180}/lib"
|
"--with-boost-libdir=${lib.getLib boost180}/lib"
|
||||||
"RUST_TARGET=${rust.toRustTargetSpec stdenv.hostPlatform}"
|
"RUST_TARGET=${stdenv.hostPlatform.rust.rustcTargetSpec}"
|
||||||
];
|
];
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
enableParallelBuilding = true;
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
, openssl
|
, openssl
|
||||||
, gtk3
|
, gtk3
|
||||||
, stdenv
|
, stdenv
|
||||||
, rust
|
|
||||||
}:
|
}:
|
||||||
|
|
||||||
rustPlatform.buildRustPackage rec {
|
rustPlatform.buildRustPackage rec {
|
||||||
@ -28,7 +27,7 @@ rustPlatform.buildRustPackage rec {
|
|||||||
# default installPhase don't install assets
|
# default installPhase don't install assets
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
runHook preInstall
|
runHook preInstall
|
||||||
make install PREFIX="$out" TARGET="target/${rust.toRustTarget stdenv.hostPlatform}/release/effitask"
|
make install PREFIX="$out" TARGET="target/${stdenv.hostPlatform.rust.rustcTarget}/release/effitask"
|
||||||
runHook postInstall
|
runHook postInstall
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
{ lib, stdenv, fetchFromGitHub, rust, rustPlatform
|
{ lib, stdenv, fetchFromGitHub, rustPlatform
|
||||||
, cargo, just, pkg-config, util-linuxMinimal
|
, cargo, just, pkg-config, util-linuxMinimal
|
||||||
, dbus, glib, libxkbcommon, pulseaudio, wayland
|
, dbus, glib, libxkbcommon, pulseaudio, wayland
|
||||||
}:
|
}:
|
||||||
@ -41,11 +41,11 @@ rustPlatform.buildRustPackage {
|
|||||||
|
|
||||||
justFlags = [
|
justFlags = [
|
||||||
"--set" "prefix" (placeholder "out")
|
"--set" "prefix" (placeholder "out")
|
||||||
"--set" "target" "${rust.lib.toRustTargetSpecShort stdenv.hostPlatform}/release"
|
"--set" "target" "${stdenv.hostPlatform.rust.cargoShortTarget}/release"
|
||||||
];
|
];
|
||||||
|
|
||||||
# Force linking to libwayland-client, which is always dlopen()ed.
|
# Force linking to libwayland-client, which is always dlopen()ed.
|
||||||
"CARGO_TARGET_${rust.toRustTargetForUseInEnvVars stdenv.hostPlatform}_RUSTFLAGS" =
|
"CARGO_TARGET_${stdenv.hostPlatform.rust.cargoEnvVarTarget}_RUSTFLAGS" =
|
||||||
map (a: "-C link-arg=${a}") [
|
map (a: "-C link-arg=${a}") [
|
||||||
"-Wl,--push-state,--no-as-needed"
|
"-Wl,--push-state,--no-as-needed"
|
||||||
"-lwayland-client"
|
"-lwayland-client"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
{ lib, stdenv, fetchFromGitHub, cargo, just, pkg-config, rust, rustPlatform
|
{ lib, stdenv, fetchFromGitHub, cargo, just, pkg-config, rustPlatform
|
||||||
, libglvnd, libxkbcommon, wayland
|
, libglvnd, libxkbcommon, wayland
|
||||||
}:
|
}:
|
||||||
|
|
||||||
@ -33,11 +33,11 @@ rustPlatform.buildRustPackage {
|
|||||||
|
|
||||||
justFlags = [
|
justFlags = [
|
||||||
"--set" "prefix" (placeholder "out")
|
"--set" "prefix" (placeholder "out")
|
||||||
"--set" "bin-src" "target/${rust.lib.toRustTargetSpecShort stdenv.hostPlatform}/release/cosmic-panel"
|
"--set" "bin-src" "target/${stdenv.hostPlatform.rust.cargoShortTarget}/release/cosmic-panel"
|
||||||
];
|
];
|
||||||
|
|
||||||
# Force linking to libEGL, which is always dlopen()ed.
|
# Force linking to libEGL, which is always dlopen()ed.
|
||||||
"CARGO_TARGET_${rust.toRustTargetForUseInEnvVars stdenv.hostPlatform}_RUSTFLAGS" =
|
"CARGO_TARGET_${stdenv.hostPlatform.rust.cargoEnvVarTarget}_RUSTFLAGS" =
|
||||||
map (a: "-C link-arg=${a}") [
|
map (a: "-C link-arg=${a}") [
|
||||||
"-Wl,--push-state,--no-as-needed"
|
"-Wl,--push-state,--no-as-needed"
|
||||||
"-lEGL"
|
"-lEGL"
|
||||||
|
@ -61,7 +61,7 @@ rustPlatform.buildRustPackage {
|
|||||||
(placeholder "out")
|
(placeholder "out")
|
||||||
"--set"
|
"--set"
|
||||||
"bin-src"
|
"bin-src"
|
||||||
"target/${rust.lib.toRustTargetSpecShort stdenv.hostPlatform}/release/cosmic-settings"
|
"target/${stdenv.hostPlatform.rust.cargoShortTarget}/release/cosmic-settings"
|
||||||
];
|
];
|
||||||
|
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
{ lib, stdenv
|
{ lib, stdenv
|
||||||
, mkRustcDepArgs, mkRustcFeatureArgs, needUnstableCLI
|
, mkRustcDepArgs, mkRustcFeatureArgs, needUnstableCLI
|
||||||
, rust
|
|
||||||
}:
|
}:
|
||||||
|
|
||||||
{ crateName,
|
{ crateName,
|
||||||
@ -21,7 +20,7 @@
|
|||||||
(mkRustcDepArgs dependencies crateRenames)
|
(mkRustcDepArgs dependencies crateRenames)
|
||||||
(mkRustcFeatureArgs crateFeatures)
|
(mkRustcFeatureArgs crateFeatures)
|
||||||
] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
|
] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
|
||||||
"--target" (rust.toRustTargetSpec stdenv.hostPlatform)
|
"--target" stdenv.hostPlatform.rust.rustcTargetSpec
|
||||||
] ++ lib.optionals (needUnstableCLI dependencies) [
|
] ++ lib.optionals (needUnstableCLI dependencies) [
|
||||||
"-Z" "unstable-options"
|
"-Z" "unstable-options"
|
||||||
] ++ extraRustcOpts
|
] ++ extraRustcOpts
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
{ lib, stdenv, rust, echo_colored, noisily, mkRustcDepArgs, mkRustcFeatureArgs }:
|
{ lib, stdenv, echo_colored, noisily, mkRustcDepArgs, mkRustcFeatureArgs }:
|
||||||
{
|
{
|
||||||
build
|
build
|
||||||
, buildDependencies
|
, buildDependencies
|
||||||
@ -124,8 +124,8 @@ in ''
|
|||||||
export CARGO_PKG_AUTHORS="${authors}"
|
export CARGO_PKG_AUTHORS="${authors}"
|
||||||
export CARGO_PKG_DESCRIPTION="${crateDescription}"
|
export CARGO_PKG_DESCRIPTION="${crateDescription}"
|
||||||
|
|
||||||
export CARGO_CFG_TARGET_ARCH=${rust.toTargetArch stdenv.hostPlatform}
|
export CARGO_CFG_TARGET_ARCH=${stdenv.hostPlatform.rust.platform.arch}
|
||||||
export CARGO_CFG_TARGET_OS=${rust.toTargetOs stdenv.hostPlatform}
|
export CARGO_CFG_TARGET_OS=${stdenv.hostPlatform.rust.platform.os}
|
||||||
export CARGO_CFG_TARGET_FAMILY="unix"
|
export CARGO_CFG_TARGET_FAMILY="unix"
|
||||||
export CARGO_CFG_UNIX=1
|
export CARGO_CFG_UNIX=1
|
||||||
export CARGO_CFG_TARGET_ENV="gnu"
|
export CARGO_CFG_TARGET_ENV="gnu"
|
||||||
@ -136,8 +136,8 @@ in ''
|
|||||||
export CARGO_MANIFEST_DIR=$(pwd)
|
export CARGO_MANIFEST_DIR=$(pwd)
|
||||||
export DEBUG="${toString (!release)}"
|
export DEBUG="${toString (!release)}"
|
||||||
export OPT_LEVEL="${toString optLevel}"
|
export OPT_LEVEL="${toString optLevel}"
|
||||||
export TARGET="${rust.toRustTargetSpec stdenv.hostPlatform}"
|
export TARGET="${stdenv.hostPlatform.rust.rustcTargetSpec}"
|
||||||
export HOST="${rust.toRustTargetSpec stdenv.buildPlatform}"
|
export HOST="${stdenv.buildPlatform.rust.rustcTargetSpec}"
|
||||||
export PROFILE=${if release then "release" else "debug"}
|
export PROFILE=${if release then "release" else "debug"}
|
||||||
export OUT_DIR=$(pwd)/target/build/${crateName}.out
|
export OUT_DIR=$(pwd)/target/build/${crateName}.out
|
||||||
export CARGO_PKG_VERSION_MAJOR=${lib.elemAt version 0}
|
export CARGO_PKG_VERSION_MAJOR=${lib.elemAt version 0}
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
, fetchCrate
|
, fetchCrate
|
||||||
, pkgsBuildBuild
|
, pkgsBuildBuild
|
||||||
, rustc
|
, rustc
|
||||||
, rust
|
|
||||||
, cargo
|
, cargo
|
||||||
, jq
|
, jq
|
||||||
, libiconv
|
, libiconv
|
||||||
@ -71,18 +70,14 @@ let
|
|||||||
inherit (import ./log.nix { inherit lib; }) noisily echo_colored;
|
inherit (import ./log.nix { inherit lib; }) noisily echo_colored;
|
||||||
|
|
||||||
configureCrate = import ./configure-crate.nix {
|
configureCrate = import ./configure-crate.nix {
|
||||||
inherit lib stdenv rust echo_colored noisily mkRustcDepArgs mkRustcFeatureArgs;
|
inherit lib stdenv echo_colored noisily mkRustcDepArgs mkRustcFeatureArgs;
|
||||||
};
|
};
|
||||||
|
|
||||||
buildCrate = import ./build-crate.nix {
|
buildCrate = import ./build-crate.nix {
|
||||||
inherit lib stdenv mkRustcDepArgs mkRustcFeatureArgs needUnstableCLI rust;
|
inherit lib stdenv mkRustcDepArgs mkRustcFeatureArgs needUnstableCLI;
|
||||||
};
|
};
|
||||||
|
|
||||||
installCrate = import ./install-crate.nix { inherit stdenv; };
|
installCrate = import ./install-crate.nix { inherit stdenv; };
|
||||||
|
|
||||||
# Allow access to the rust attribute set from inside buildRustCrate, which
|
|
||||||
# has a parameter that shadows the name.
|
|
||||||
rustAttrs = rust;
|
|
||||||
in
|
in
|
||||||
|
|
||||||
/* The overridable pkgs.buildRustCrate function.
|
/* The overridable pkgs.buildRustCrate function.
|
||||||
@ -310,7 +305,7 @@ crate_: lib.makeOverridable
|
|||||||
depsMetadata = lib.foldl' (str: dep: str + dep.metadata) "" (dependencies ++ buildDependencies);
|
depsMetadata = lib.foldl' (str: dep: str + dep.metadata) "" (dependencies ++ buildDependencies);
|
||||||
hashedMetadata = builtins.hashString "sha256"
|
hashedMetadata = builtins.hashString "sha256"
|
||||||
(crateName + "-" + crateVersion + "___" + toString (mkRustcFeatureArgs crateFeatures) +
|
(crateName + "-" + crateVersion + "___" + toString (mkRustcFeatureArgs crateFeatures) +
|
||||||
"___" + depsMetadata + "___" + rustAttrs.toRustTarget stdenv.hostPlatform);
|
"___" + depsMetadata + "___" + stdenv.hostPlatform.rust.rustcTarget);
|
||||||
in
|
in
|
||||||
lib.substring 0 10 hashedMetadata;
|
lib.substring 0 10 hashedMetadata;
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
{ lib
|
{ lib
|
||||||
, importCargoLock
|
, importCargoLock
|
||||||
, fetchCargoTarball
|
, fetchCargoTarball
|
||||||
, rust
|
|
||||||
, stdenv
|
, stdenv
|
||||||
, callPackage
|
, callPackage
|
||||||
, cargoBuildHook
|
, cargoBuildHook
|
||||||
@ -78,13 +77,13 @@ let
|
|||||||
sha256 = args.cargoSha256;
|
sha256 = args.cargoSha256;
|
||||||
} // depsExtraArgs);
|
} // depsExtraArgs);
|
||||||
|
|
||||||
target = rust.toRustTargetSpec stdenv.hostPlatform;
|
target = stdenv.hostPlatform.rust.rustcTargetSpec;
|
||||||
targetIsJSON = lib.hasSuffix ".json" target;
|
targetIsJSON = lib.hasSuffix ".json" target;
|
||||||
useSysroot = targetIsJSON && !__internal_dontAddSysroot;
|
useSysroot = targetIsJSON && !__internal_dontAddSysroot;
|
||||||
|
|
||||||
sysroot = callPackage ./sysroot { } {
|
sysroot = callPackage ./sysroot { } {
|
||||||
inherit target;
|
inherit target;
|
||||||
shortTarget = rust.lib.toRustTargetSpecShort stdenv.hostPlatform;
|
shortTarget = stdenv.hostPlatform.rust.cargoShortTarget;
|
||||||
RUSTFLAGS = args.RUSTFLAGS or "";
|
RUSTFLAGS = args.RUSTFLAGS or "";
|
||||||
originalCargoToml = src + /Cargo.toml; # profile info is later extracted
|
originalCargoToml = src + /Cargo.toml; # profile info is later extracted
|
||||||
};
|
};
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
{ lib, stdenv, rust, rustPlatform, buildPackages }:
|
{ lib, stdenv, rustPlatform, buildPackages }:
|
||||||
|
|
||||||
{ shortTarget, originalCargoToml, target, RUSTFLAGS }:
|
{ shortTarget, originalCargoToml, target, RUSTFLAGS }:
|
||||||
|
|
||||||
@ -26,7 +26,7 @@ in rustPlatform.buildRustPackage {
|
|||||||
done
|
done
|
||||||
|
|
||||||
export RUST_SYSROOT=$(rustc --print=sysroot)
|
export RUST_SYSROOT=$(rustc --print=sysroot)
|
||||||
host=${rust.toRustTarget stdenv.buildPlatform}
|
host=${stdenv.buildPlatform.rust.rustcTarget}
|
||||||
cp -r $RUST_SYSROOT/lib/rustlib/$host $out
|
cp -r $RUST_SYSROOT/lib/rustlib/$host $out
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
# This confusingly-named parameter indicates the *subdirectory of
|
# This confusingly-named parameter indicates the *subdirectory of
|
||||||
# `target/` from which to copy the build artifacts. It is derived
|
# `target/` from which to copy the build artifacts. It is derived
|
||||||
# from a stdenv platform (or a JSON file).
|
# from a stdenv platform (or a JSON file).
|
||||||
, target ? rust.lib.toRustTargetSpecShort stdenv.hostPlatform
|
, target ? stdenv.hostPlatform.rust.cargoShortTarget
|
||||||
}:
|
}:
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -65,10 +65,10 @@
|
|||||||
diff = "${lib.getBin buildPackages.diffutils}/bin/diff";
|
diff = "${lib.getBin buildPackages.diffutils}/bin/diff";
|
||||||
|
|
||||||
cargoConfig = ''
|
cargoConfig = ''
|
||||||
[target."${rust.toRustTarget stdenv.buildPlatform}"]
|
[target."${stdenv.buildPlatform.rust.rustcTarget}"]
|
||||||
"linker" = "${rust.envVars.ccForBuild}"
|
"linker" = "${rust.envVars.ccForBuild}"
|
||||||
${lib.optionalString (stdenv.buildPlatform.config != stdenv.hostPlatform.config) ''
|
${lib.optionalString (stdenv.buildPlatform.config != stdenv.hostPlatform.config) ''
|
||||||
[target."${rust.toRustTarget stdenv.hostPlatform}"]
|
[target."${stdenv.hostPlatform.rust.rustcTarget}"]
|
||||||
"linker" = "${rust.envVars.ccForHost}"
|
"linker" = "${rust.envVars.ccForHost}"
|
||||||
''}
|
''}
|
||||||
"rustflags" = [ "-C", "target-feature=${if stdenv.hostPlatform.isStatic then "+" else "-"}crt-static" ]
|
"rustflags" = [ "-C", "target-feature=${if stdenv.hostPlatform.isStatic then "+" else "-"}crt-static" ]
|
||||||
|
@ -5,89 +5,6 @@
|
|||||||
}:
|
}:
|
||||||
|
|
||||||
rec {
|
rec {
|
||||||
# https://doc.rust-lang.org/reference/conditional-compilation.html#target_arch
|
|
||||||
toTargetArch = platform:
|
|
||||||
/**/ if platform ? rustc.platform then platform.rustc.platform.arch
|
|
||||||
else if platform.isAarch32 then "arm"
|
|
||||||
else if platform.isMips64 then "mips64" # never add "el" suffix
|
|
||||||
else if platform.isPower64 then "powerpc64" # never add "le" suffix
|
|
||||||
else platform.parsed.cpu.name;
|
|
||||||
|
|
||||||
# https://doc.rust-lang.org/reference/conditional-compilation.html#target_os
|
|
||||||
toTargetOs = platform:
|
|
||||||
/**/ if platform ? rustc.platform then platform.rustc.platform.os or "none"
|
|
||||||
else if platform.isDarwin then "macos"
|
|
||||||
else platform.parsed.kernel.name;
|
|
||||||
|
|
||||||
# https://doc.rust-lang.org/reference/conditional-compilation.html#target_family
|
|
||||||
toTargetFamily = platform:
|
|
||||||
if platform ? rustc.platform.target-family
|
|
||||||
then
|
|
||||||
(
|
|
||||||
# Since https://github.com/rust-lang/rust/pull/84072
|
|
||||||
# `target-family` is a list instead of single value.
|
|
||||||
let
|
|
||||||
f = platform.rustc.platform.target-family;
|
|
||||||
in
|
|
||||||
if builtins.isList f then f else [ f ]
|
|
||||||
)
|
|
||||||
else lib.optional platform.isUnix "unix"
|
|
||||||
++ lib.optional platform.isWindows "windows";
|
|
||||||
|
|
||||||
# https://doc.rust-lang.org/reference/conditional-compilation.html#target_vendor
|
|
||||||
toTargetVendor = platform: let
|
|
||||||
inherit (platform.parsed) vendor;
|
|
||||||
in platform.rustc.platform.vendor or {
|
|
||||||
"w64" = "pc";
|
|
||||||
}.${vendor.name} or vendor.name;
|
|
||||||
|
|
||||||
# Returns the name of the rust target, even if it is custom. Adjustments are
|
|
||||||
# because rust has slightly different naming conventions than we do.
|
|
||||||
toRustTarget = platform: let
|
|
||||||
inherit (platform.parsed) cpu kernel abi;
|
|
||||||
cpu_ = platform.rustc.platform.arch or {
|
|
||||||
"armv7a" = "armv7";
|
|
||||||
"armv7l" = "armv7";
|
|
||||||
"armv6l" = "arm";
|
|
||||||
"armv5tel" = "armv5te";
|
|
||||||
"riscv64" = "riscv64gc";
|
|
||||||
}.${cpu.name} or cpu.name;
|
|
||||||
vendor_ = toTargetVendor platform;
|
|
||||||
in platform.rustc.config
|
|
||||||
or "${cpu_}-${vendor_}-${kernel.name}${lib.optionalString (abi.name != "unknown") "-${abi.name}"}";
|
|
||||||
|
|
||||||
# Returns the name of the rust target if it is standard, or the json file
|
|
||||||
# containing the custom target spec.
|
|
||||||
toRustTargetSpec = platform:
|
|
||||||
if platform ? rustc.platform
|
|
||||||
then builtins.toFile (toRustTarget platform + ".json") (builtins.toJSON platform.rustc.platform)
|
|
||||||
else toRustTarget platform;
|
|
||||||
|
|
||||||
# Returns the name of the rust target if it is standard, or the
|
|
||||||
# basename of the file containing the custom target spec, without
|
|
||||||
# the .json extension.
|
|
||||||
#
|
|
||||||
# This is the name used by Cargo for target subdirectories.
|
|
||||||
toRustTargetSpecShort = platform:
|
|
||||||
lib.removeSuffix ".json"
|
|
||||||
(baseNameOf "${toRustTargetSpec platform}");
|
|
||||||
|
|
||||||
# When used as part of an environment variable name, triples are
|
|
||||||
# uppercased and have all hyphens replaced by underscores:
|
|
||||||
#
|
|
||||||
# https://github.com/rust-lang/cargo/pull/9169
|
|
||||||
# https://github.com/rust-lang/cargo/issues/8285#issuecomment-634202431
|
|
||||||
#
|
|
||||||
toRustTargetForUseInEnvVars = platform:
|
|
||||||
lib.strings.replaceStrings ["-"] ["_"]
|
|
||||||
(lib.strings.toUpper
|
|
||||||
(toRustTargetSpecShort platform));
|
|
||||||
|
|
||||||
# Returns true if the target is no_std
|
|
||||||
# https://github.com/rust-lang/rust/blob/2e44c17c12cec45b6a682b1e53a04ac5b5fcc9d2/src/bootstrap/config.rs#L415-L421
|
|
||||||
IsNoStdTarget = platform: let rustTarget = toRustTarget platform; in
|
|
||||||
builtins.any (t: lib.hasInfix t rustTarget) ["-none" "nvptx" "switch" "-uefi"];
|
|
||||||
|
|
||||||
# These environment variables must be set when using `cargo-c` and
|
# These environment variables must be set when using `cargo-c` and
|
||||||
# several other tools which do not deal well with cross
|
# several other tools which do not deal well with cross
|
||||||
# compilation. The symptom of the problem they fix is errors due
|
# compilation. The symptom of the problem they fix is errors due
|
||||||
@ -107,12 +24,12 @@ rec {
|
|||||||
ccForTarget = "${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}cc";
|
ccForTarget = "${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}cc";
|
||||||
cxxForTarget = "${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}c++";
|
cxxForTarget = "${targetPackages.stdenv.cc}/bin/${targetPackages.stdenv.cc.targetPrefix}c++";
|
||||||
|
|
||||||
rustBuildPlatform = toRustTarget stdenv.buildPlatform;
|
rustBuildPlatform = stdenv.buildPlatform.rust.rustcTarget;
|
||||||
rustBuildPlatformSpec = toRustTargetSpec stdenv.buildPlatform;
|
rustBuildPlatformSpec = stdenv.buildPlatform.rust.rustcTargetSpec;
|
||||||
rustHostPlatform = toRustTarget stdenv.hostPlatform;
|
rustHostPlatform = stdenv.hostPlatform.rust.rustcTarget;
|
||||||
rustHostPlatformSpec = toRustTargetSpec stdenv.hostPlatform;
|
rustHostPlatformSpec = stdenv.hostPlatform.rust.rustcTargetSpec;
|
||||||
rustTargetPlatform = toRustTarget stdenv.targetPlatform;
|
rustTargetPlatform = stdenv.targetPlatform.rust.rustcTarget;
|
||||||
rustTargetPlatformSpec = toRustTargetSpec stdenv.targetPlatform;
|
rustTargetPlatformSpec = stdenv.targetPlatform.rust.rustcTargetSpec;
|
||||||
in {
|
in {
|
||||||
inherit
|
inherit
|
||||||
ccForBuild cxxForBuild rustBuildPlatform rustBuildPlatformSpec
|
ccForBuild cxxForBuild rustBuildPlatform rustBuildPlatformSpec
|
||||||
@ -131,20 +48,34 @@ rec {
|
|||||||
# the following lines when rustTargetPlatform collides with
|
# the following lines when rustTargetPlatform collides with
|
||||||
# rustHostPlatform.
|
# rustHostPlatform.
|
||||||
+ lib.optionalString (rustTargetPlatform != rustHostPlatform) ''
|
+ lib.optionalString (rustTargetPlatform != rustHostPlatform) ''
|
||||||
"CC_${toRustTargetForUseInEnvVars stdenv.targetPlatform}=${ccForTarget}" \
|
"CC_${stdenv.targetPlatform.rust.cargoEnvVarTarget}=${ccForTarget}" \
|
||||||
"CXX_${toRustTargetForUseInEnvVars stdenv.targetPlatform}=${cxxForTarget}" \
|
"CXX_${stdenv.targetPlatform.rust.cargoEnvVarTarget}=${cxxForTarget}" \
|
||||||
"CARGO_TARGET_${toRustTargetForUseInEnvVars stdenv.targetPlatform}_LINKER=${ccForTarget}" \
|
"CARGO_TARGET_${stdenv.targetPlatform.rust.cargoEnvVarTarget}_LINKER=${ccForTarget}" \
|
||||||
'' + ''
|
'' + ''
|
||||||
"CC_${toRustTargetForUseInEnvVars stdenv.hostPlatform}=${ccForHost}" \
|
"CC_${stdenv.hostPlatform.rust.cargoEnvVarTarget}=${ccForHost}" \
|
||||||
"CXX_${toRustTargetForUseInEnvVars stdenv.hostPlatform}=${cxxForHost}" \
|
"CXX_${stdenv.hostPlatform.rust.cargoEnvVarTarget}=${cxxForHost}" \
|
||||||
"CARGO_TARGET_${toRustTargetForUseInEnvVars stdenv.hostPlatform}_LINKER=${ccForHost}" \
|
"CARGO_TARGET_${stdenv.hostPlatform.rust.cargoEnvVarTarget}_LINKER=${ccForHost}" \
|
||||||
'' + ''
|
'' + ''
|
||||||
"CC_${toRustTargetForUseInEnvVars stdenv.buildPlatform}=${ccForBuild}" \
|
"CC_${stdenv.buildPlatform.rust.cargoEnvVarTarget}=${ccForBuild}" \
|
||||||
"CXX_${toRustTargetForUseInEnvVars stdenv.buildPlatform}=${cxxForBuild}" \
|
"CXX_${stdenv.buildPlatform.rust.cargoEnvVarTarget}=${cxxForBuild}" \
|
||||||
"CARGO_TARGET_${toRustTargetForUseInEnvVars stdenv.buildPlatform}_LINKER=${ccForBuild}" \
|
"CARGO_TARGET_${stdenv.buildPlatform.rust.cargoEnvVarTarget}_LINKER=${ccForBuild}" \
|
||||||
"CARGO_BUILD_TARGET=${rustBuildPlatform}" \
|
"CARGO_BUILD_TARGET=${rustBuildPlatform}" \
|
||||||
"HOST_CC=${buildPackages.stdenv.cc}/bin/cc" \
|
"HOST_CC=${buildPackages.stdenv.cc}/bin/cc" \
|
||||||
"HOST_CXX=${buildPackages.stdenv.cc}/bin/c++" \
|
"HOST_CXX=${buildPackages.stdenv.cc}/bin/c++" \
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
} // lib.mapAttrs (old: new: platform:
|
||||||
|
# TODO: enable warning after 23.05 is EOL.
|
||||||
|
# lib.warn "`rust.${old} platform` is deprecated. Use `platform.rust.${new}` instead."
|
||||||
|
lib.getAttrFromPath new platform.rust)
|
||||||
|
{
|
||||||
|
toTargetArch = [ "platform" "arch" ];
|
||||||
|
toTargetOs = [ "platform" "os" ];
|
||||||
|
toTargetFamily = [ "platform" "target-family" ];
|
||||||
|
toTargetVendor = [ "platform" "vendor" ];
|
||||||
|
toRustTarget = [ "rustcTarget" ];
|
||||||
|
toRustTargetSpec = [ "rustcTargetSpec" ];
|
||||||
|
toRustTargetSpecShort = [ "cargoShortTarget" ];
|
||||||
|
toRustTargetForUseInEnvVars = [ "cargoEnvVarTarget" ];
|
||||||
|
IsNoStdTarget = [ "isNoStdTarget" ];
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
, libadwaita
|
, libadwaita
|
||||||
, librsvg
|
, librsvg
|
||||||
, rustc
|
, rustc
|
||||||
, rust
|
|
||||||
, writeText
|
, writeText
|
||||||
, cargo
|
, cargo
|
||||||
}:
|
}:
|
||||||
@ -65,7 +64,7 @@ stdenv.mkDerivation rec {
|
|||||||
# ERROR: 'rust' compiler binary not defined in cross or native file
|
# ERROR: 'rust' compiler binary not defined in cross or native file
|
||||||
crossFile = writeText "cross-file.conf" ''
|
crossFile = writeText "cross-file.conf" ''
|
||||||
[binaries]
|
[binaries]
|
||||||
rust = [ 'rustc', '--target', '${rust.toRustTargetSpec stdenv.hostPlatform}' ]
|
rust = [ 'rustc', '--target', '${stdenv.hostPlatform.rust.rustcTargetSpec}' ]
|
||||||
'';
|
'';
|
||||||
in
|
in
|
||||||
lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ "--cross-file=${crossFile}" ];
|
lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ "--cross-file=${crossFile}" ];
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
, fetchurl
|
, fetchurl
|
||||||
, mrustc
|
, mrustc
|
||||||
, mrustc-minicargo
|
, mrustc-minicargo
|
||||||
, rust
|
|
||||||
, llvm_12
|
, llvm_12
|
||||||
, llvmPackages_12
|
, llvmPackages_12
|
||||||
, libffi
|
, libffi
|
||||||
@ -74,7 +73,7 @@ stdenv.mkDerivation rec {
|
|||||||
"MRUSTC=${mrustc}/bin/mrustc"
|
"MRUSTC=${mrustc}/bin/mrustc"
|
||||||
#"MINICARGO=${mrustc-minicargo}/bin/minicargo" # FIXME: we need to rebuild minicargo locally so --manifest-overrides is applied
|
#"MINICARGO=${mrustc-minicargo}/bin/minicargo" # FIXME: we need to rebuild minicargo locally so --manifest-overrides is applied
|
||||||
"LLVM_CONFIG=${llvm_12.dev}/bin/llvm-config"
|
"LLVM_CONFIG=${llvm_12.dev}/bin/llvm-config"
|
||||||
"RUSTC_TARGET=${rust.toRustTarget stdenv.targetPlatform}"
|
"RUSTC_TARGET=${stdenv.targetPlatform.rust.rustcTarget}"
|
||||||
];
|
];
|
||||||
|
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
@ -129,7 +128,7 @@ stdenv.mkDerivation rec {
|
|||||||
cp run_rustc/${outputDir}/prefix/bin/rustc_binary $out/bin/rustc
|
cp run_rustc/${outputDir}/prefix/bin/rustc_binary $out/bin/rustc
|
||||||
|
|
||||||
cp -r run_rustc/${outputDir}/prefix/lib/* $out/lib/
|
cp -r run_rustc/${outputDir}/prefix/lib/* $out/lib/
|
||||||
cp $out/lib/rustlib/${rust.toRustTarget stdenv.targetPlatform}/lib/*.so $out/lib/
|
cp $out/lib/rustlib/${stdenv.targetPlatform.rust.rustcTarget}/lib/*.so $out/lib/
|
||||||
runHook postInstall
|
runHook postInstall
|
||||||
'';
|
'';
|
||||||
|
|
||||||
@ -146,4 +145,3 @@ stdenv.mkDerivation rec {
|
|||||||
platforms = [ "x86_64-linux" ];
|
platforms = [ "x86_64-linux" ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{ stdenv, fetchurl, rust, callPackage, version, hashes }:
|
{ stdenv, fetchurl, callPackage, version, hashes }:
|
||||||
|
|
||||||
let
|
let
|
||||||
platform = rust.toRustTarget stdenv.hostPlatform;
|
platform = stdenv.hostPlatform.rust.rustcTarget;
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "https://static.rust-lang.org/dist/rust-${version}-${platform}.tar.gz";
|
url = "https://static.rust-lang.org/dist/rust-${version}-${platform}.tar.gz";
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{ lib, stdenv, pkgsBuildHost, pkgsHostHost
|
{ lib, stdenv, pkgsBuildHost, pkgsHostHost
|
||||||
, file, curl, pkg-config, python3, openssl, cmake, zlib
|
, file, curl, pkg-config, python3, openssl, cmake, zlib
|
||||||
, installShellFiles, makeWrapper, rustPlatform, rust, rustc
|
, installShellFiles, makeWrapper, rustPlatform, rustc
|
||||||
, CoreFoundation, Security
|
, CoreFoundation, Security
|
||||||
, auditable ? !cargo-auditable.meta.broken
|
, auditable ? !cargo-auditable.meta.broken
|
||||||
, cargo-auditable
|
, cargo-auditable
|
||||||
@ -116,6 +116,6 @@ rustPlatform.buildRustPackage.override {
|
|||||||
broken = stdenv.hostPlatform.isx86 && stdenv.buildPlatform != stdenv.hostPlatform;
|
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";
|
HOST_PKG_CONFIG_PATH="${pkgsBuildBuild.pkg-config}/bin/pkg-config";
|
||||||
})
|
})
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{ lib, stdenv, removeReferencesTo, pkgsBuildBuild, pkgsBuildHost, pkgsBuildTarget, targetPackages
|
{ lib, stdenv, removeReferencesTo, pkgsBuildBuild, pkgsBuildHost, pkgsBuildTarget, targetPackages
|
||||||
, llvmShared, llvmSharedForBuild, llvmSharedForHost, llvmSharedForTarget, llvmPackages
|
, llvmShared, llvmSharedForBuild, llvmSharedForHost, llvmSharedForTarget, llvmPackages
|
||||||
, fetchurl, file, python3
|
, fetchurl, file, python3
|
||||||
, darwin, cargo, cmake, rust, rustc
|
, darwin, cargo, cmake, rustc
|
||||||
, pkg-config, openssl, xz
|
, pkg-config, openssl, xz
|
||||||
, libiconv
|
, libiconv
|
||||||
, which, libffi
|
, which, libffi
|
||||||
@ -51,7 +51,7 @@ in stdenv.mkDerivation rec {
|
|||||||
# but it does support checking these idiosyncratic PKG_CONFIG_${TRIPLE}
|
# but it does support checking these idiosyncratic PKG_CONFIG_${TRIPLE}
|
||||||
# environment variables.
|
# environment variables.
|
||||||
# [1]: https://github.com/rust-lang/pkg-config-rs/issues/53
|
# [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";
|
"${pkgsBuildHost.stdenv.cc.targetPrefix}pkg-config";
|
||||||
|
|
||||||
NIX_LDFLAGS = toString (
|
NIX_LDFLAGS = toString (
|
||||||
@ -69,9 +69,9 @@ in stdenv.mkDerivation rec {
|
|||||||
prefixForStdenv = stdenv: "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}";
|
prefixForStdenv = stdenv: "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}";
|
||||||
ccPrefixForStdenv = stdenv: "${prefixForStdenv stdenv}${if (stdenv.cc.isClang or false) then "clang" else "cc"}";
|
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++"}";
|
cxxPrefixForStdenv = stdenv: "${prefixForStdenv stdenv}${if (stdenv.cc.isClang or false) then "clang++" else "c++"}";
|
||||||
setBuild = "--set=target.${rust.toRustTarget stdenv.buildPlatform}";
|
setBuild = "--set=target.${stdenv.buildPlatform.rust.rustcTarget}";
|
||||||
setHost = "--set=target.${rust.toRustTarget stdenv.hostPlatform}";
|
setHost = "--set=target.${stdenv.hostPlatform.rust.rustcTarget}";
|
||||||
setTarget = "--set=target.${rust.toRustTarget stdenv.targetPlatform}";
|
setTarget = "--set=target.${stdenv.targetPlatform.rust.rustcTarget}";
|
||||||
ccForBuild = ccPrefixForStdenv pkgsBuildBuild.targetPackages.stdenv;
|
ccForBuild = ccPrefixForStdenv pkgsBuildBuild.targetPackages.stdenv;
|
||||||
cxxForBuild = cxxPrefixForStdenv pkgsBuildBuild.targetPackages.stdenv;
|
cxxForBuild = cxxPrefixForStdenv pkgsBuildBuild.targetPackages.stdenv;
|
||||||
ccForHost = ccPrefixForStdenv pkgsBuildHost.targetPackages.stdenv;
|
ccForHost = ccPrefixForStdenv pkgsBuildHost.targetPackages.stdenv;
|
||||||
@ -85,23 +85,23 @@ in stdenv.mkDerivation rec {
|
|||||||
"--tools=rustc,rust-analyzer-proc-macro-srv"
|
"--tools=rustc,rust-analyzer-proc-macro-srv"
|
||||||
"--enable-rpath"
|
"--enable-rpath"
|
||||||
"--enable-vendor"
|
"--enable-vendor"
|
||||||
"--build=${rust.toRustTargetSpec stdenv.buildPlatform}"
|
"--build=${stdenv.buildPlatform.rust.rustcTargetSpec}"
|
||||||
"--host=${rust.toRustTargetSpec stdenv.hostPlatform}"
|
"--host=${stdenv.hostPlatform.rust.rustcTargetSpec}"
|
||||||
# std is built for all platforms in --target.
|
# std is built for all platforms in --target.
|
||||||
"--target=${concatStringsSep "," ([
|
"--target=${concatStringsSep "," ([
|
||||||
(rust.toRustTargetSpec stdenv.targetPlatform)
|
stdenv.targetPlatform.rust.rustcTargetSpec
|
||||||
|
|
||||||
# (build!=target): When cross-building a compiler we need to add
|
# (build!=target): When cross-building a compiler we need to add
|
||||||
# the build platform as well so rustc can compile build.rs
|
# the build platform as well so rustc can compile build.rs
|
||||||
# scripts.
|
# scripts.
|
||||||
] ++ optionals (stdenv.buildPlatform != stdenv.targetPlatform && !fastCross) [
|
] ++ optionals (stdenv.buildPlatform != stdenv.targetPlatform && !fastCross) [
|
||||||
(rust.toRustTargetSpec stdenv.buildPlatform)
|
stdenv.buildPlatform.rust.rustcTargetSpec
|
||||||
|
|
||||||
# (host!=target): When building a cross-targeting compiler we
|
# (host!=target): When building a cross-targeting compiler we
|
||||||
# need to add the host platform as well so rustc can compile
|
# need to add the host platform as well so rustc can compile
|
||||||
# build.rs scripts.
|
# build.rs scripts.
|
||||||
] ++ optionals (stdenv.hostPlatform != stdenv.targetPlatform && !fastCross) [
|
] ++ optionals (stdenv.hostPlatform != stdenv.targetPlatform && !fastCross) [
|
||||||
(rust.toRustTargetSpec stdenv.hostPlatform)
|
stdenv.hostPlatform.rust.rustcTargetSpec
|
||||||
])}"
|
])}"
|
||||||
|
|
||||||
"${setBuild}.cc=${ccForBuild}"
|
"${setBuild}.cc=${ccForBuild}"
|
||||||
@ -132,7 +132,7 @@ in stdenv.mkDerivation rec {
|
|||||||
"${setHost}.musl-root=${pkgsBuildHost.targetPackages.stdenv.cc.libc}"
|
"${setHost}.musl-root=${pkgsBuildHost.targetPackages.stdenv.cc.libc}"
|
||||||
] ++ optionals stdenv.targetPlatform.isMusl [
|
] ++ optionals stdenv.targetPlatform.isMusl [
|
||||||
"${setTarget}.musl-root=${pkgsBuildTarget.targetPackages.stdenv.cc.libc}"
|
"${setTarget}.musl-root=${pkgsBuildTarget.targetPackages.stdenv.cc.libc}"
|
||||||
] ++ optionals (rust.IsNoStdTarget stdenv.targetPlatform) [
|
] ++ optionals stdenv.targetPlatform.rust.isNoStdTarget [
|
||||||
"--disable-docs"
|
"--disable-docs"
|
||||||
] ++ optionals (stdenv.isDarwin && stdenv.isx86_64) [
|
] ++ optionals (stdenv.isDarwin && stdenv.isx86_64) [
|
||||||
# https://github.com/rust-lang/rust/issues/92173
|
# https://github.com/rust-lang/rust/issues/92173
|
||||||
@ -144,12 +144,12 @@ in stdenv.mkDerivation rec {
|
|||||||
buildPhase = if fastCross then "
|
buildPhase = if fastCross then "
|
||||||
runHook preBuild
|
runHook preBuild
|
||||||
|
|
||||||
mkdir -p build/${rust.toRustTargetSpec stdenv.hostPlatform}/stage0-{std,rustc}/${rust.toRustTargetSpec stdenv.hostPlatform}/release/
|
mkdir -p build/${stdenv.hostPlatform.rust.rustcTargetSpec}/stage0-{std,rustc}/${stdenv.hostPlatform.rust.rustcTargetSpec}/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/${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/${rust.toRustTargetSpec stdenv.hostPlatform}/librustc_driver-*.so build/${rust.toRustTargetSpec stdenv.hostPlatform}/stage0-rustc/${rust.toRustTargetSpec stdenv.hostPlatform}/release/librustc.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/${rust.toRustTargetSpec stdenv.hostPlatform}/stage0-rustc/${rust.toRustTargetSpec stdenv.hostPlatform}/release/rustc-main
|
ln -s ${rustc}/bin/rustc build/${stdenv.hostPlatform.rust.rustcTargetSpec}/stage0-rustc/${stdenv.hostPlatform.rust.rustcTargetSpec}/release/rustc-main
|
||||||
touch build/${rust.toRustTargetSpec stdenv.hostPlatform}/stage0-std/${rust.toRustTargetSpec stdenv.hostPlatform}/release/.libstd.stamp
|
touch build/${stdenv.hostPlatform.rust.rustcTargetSpec}/stage0-std/${stdenv.hostPlatform.rust.rustcTargetSpec}/release/.libstd.stamp
|
||||||
touch build/${rust.toRustTargetSpec stdenv.hostPlatform}/stage0-rustc/${rust.toRustTargetSpec stdenv.hostPlatform}/release/.librustc.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
|
python ./x.py --keep-stage=0 --stage=1 build library/std
|
||||||
|
|
||||||
runHook postBuild
|
runHook postBuild
|
||||||
@ -162,8 +162,8 @@ in stdenv.mkDerivation rec {
|
|||||||
mkdir -v $out/bin $doc $man
|
mkdir -v $out/bin $doc $man
|
||||||
makeWrapper ${rustc}/bin/rustc $out/bin/rustc --add-flags "--sysroot $out"
|
makeWrapper ${rustc}/bin/rustc $out/bin/rustc --add-flags "--sysroot $out"
|
||||||
makeWrapper ${rustc}/bin/rustdoc $out/bin/rustdoc --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/
|
ln -s ${rustc}/lib/rustlib/{manifest-rust-std-,}${stdenv.hostPlatform.rust.rustcTargetSpec} $out/lib/rustlib/
|
||||||
echo rust-std-${rust.toRustTargetSpec stdenv.hostPlatform} >> $out/lib/rustlib/components
|
echo rust-std-${stdenv.hostPlatform.rust.rustcTargetSpec} >> $out/lib/rustlib/components
|
||||||
lndir ${rustc.doc} $doc
|
lndir ${rustc.doc} $doc
|
||||||
lndir ${rustc.man} $man
|
lndir ${rustc.man} $man
|
||||||
|
|
||||||
|
@ -183,16 +183,14 @@ in {
|
|||||||
};
|
};
|
||||||
} ./setuptools-check-hook.sh) {};
|
} ./setuptools-check-hook.sh) {};
|
||||||
|
|
||||||
setuptoolsRustBuildHook = callPackage ({ makePythonHook, setuptools-rust, rust }:
|
setuptoolsRustBuildHook = callPackage ({ makePythonHook, setuptools-rust }:
|
||||||
makePythonHook {
|
makePythonHook {
|
||||||
name = "setuptools-rust-setup-hook";
|
name = "setuptools-rust-setup-hook";
|
||||||
propagatedBuildInputs = [ setuptools-rust ];
|
propagatedBuildInputs = [ setuptools-rust ];
|
||||||
substitutions = {
|
substitutions = {
|
||||||
pyLibDir = "${python}/lib/${python.libPrefix}";
|
pyLibDir = "${python}/lib/${python.libPrefix}";
|
||||||
cargoBuildTarget = rust.toRustTargetSpec stdenv.hostPlatform;
|
cargoBuildTarget = stdenv.hostPlatform.rust.rustcTargetSpec;
|
||||||
cargoLinkerVar = lib.toUpper (
|
cargoLinkerVar = stdenv.hostPlatform.rust.cargoEnvVarTarget;
|
||||||
builtins.replaceStrings ["-"] ["_"] (
|
|
||||||
rust.toRustTarget stdenv.hostPlatform));
|
|
||||||
targetLinker = "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc";
|
targetLinker = "${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc";
|
||||||
};
|
};
|
||||||
} ./setuptools-rust-hook.sh) {};
|
} ./setuptools-rust-hook.sh) {};
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
, ninja
|
, ninja
|
||||||
, python3
|
, python3
|
||||||
, pkg-config
|
, pkg-config
|
||||||
, rust
|
|
||||||
, rustc
|
, rustc
|
||||||
, cargo
|
, cargo
|
||||||
, cargo-c
|
, cargo-c
|
||||||
@ -208,7 +207,7 @@ stdenv.mkDerivation rec {
|
|||||||
] ++ (let
|
] ++ (let
|
||||||
crossFile = writeText "cross-file.conf" ''
|
crossFile = writeText "cross-file.conf" ''
|
||||||
[binaries]
|
[binaries]
|
||||||
rust = [ 'rustc', '--target', '${rust.toRustTargetSpec stdenv.hostPlatform}' ]
|
rust = [ 'rustc', '--target', '${stdenv.hostPlatform.rust.rustcTargetSpec}' ]
|
||||||
'';
|
'';
|
||||||
in lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
|
in lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
|
||||||
"--cross-file=${crossFile}"
|
"--cross-file=${crossFile}"
|
||||||
|
@ -5,9 +5,7 @@
|
|||||||
, rust
|
, rust
|
||||||
, stdenv
|
, stdenv
|
||||||
}:
|
}:
|
||||||
let
|
|
||||||
rustTargetPlatformSpec = rust.toRustTargetSpec stdenv.hostPlatform;
|
|
||||||
in
|
|
||||||
rustPlatform.buildRustPackage rec {
|
rustPlatform.buildRustPackage rec {
|
||||||
pname = "libdovi";
|
pname = "libdovi";
|
||||||
version = "3.1.2";
|
version = "3.1.2";
|
||||||
@ -28,19 +26,19 @@ rustPlatform.buildRustPackage rec {
|
|||||||
|
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
runHook preBuild
|
runHook preBuild
|
||||||
${rust.envVars.setEnv} cargo cbuild -j $NIX_BUILD_CORES --release --frozen --prefix=${placeholder "out"} --target ${rustTargetPlatformSpec}
|
${rust.envVars.setEnv} cargo cbuild -j $NIX_BUILD_CORES --release --frozen --prefix=${placeholder "out"} --target ${stdenv.hostPlatform.rust.rustcTarget}
|
||||||
runHook postBuild
|
runHook postBuild
|
||||||
'';
|
'';
|
||||||
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
runHook preInstall
|
runHook preInstall
|
||||||
${rust.envVars.setEnv} cargo cinstall -j $NIX_BUILD_CORES --release --frozen --prefix=${placeholder "out"} --target ${rustTargetPlatformSpec}
|
${rust.envVars.setEnv} cargo cinstall -j $NIX_BUILD_CORES --release --frozen --prefix=${placeholder "out"} --target ${stdenv.hostPlatform.rust.rustcTarget}
|
||||||
runHook postInstall
|
runHook postInstall
|
||||||
'';
|
'';
|
||||||
|
|
||||||
checkPhase = ''
|
checkPhase = ''
|
||||||
runHook preCheck
|
runHook preCheck
|
||||||
${rust.envVars.setEnv} cargo ctest -j $NIX_BUILD_CORES --release --frozen --prefix=${placeholder "out"} --target ${rustTargetPlatformSpec}
|
${rust.envVars.setEnv} cargo ctest -j $NIX_BUILD_CORES --release --frozen --prefix=${placeholder "out"} --target ${stdenv.hostPlatform.rust.rustcTarget}
|
||||||
runHook postCheck
|
runHook postCheck
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
{ lib, stdenv, fetchFromGitHub, fetchurl, rust, rustPlatform, cargo-c, python3 }:
|
{ lib, stdenv, fetchFromGitHub, fetchurl, rust, rustPlatform, cargo-c, python3 }:
|
||||||
|
|
||||||
let
|
|
||||||
rustTargetPlatformSpec = rust.toRustTargetSpec stdenv.hostPlatform;
|
|
||||||
in
|
|
||||||
rustPlatform.buildRustPackage rec {
|
rustPlatform.buildRustPackage rec {
|
||||||
pname = "libimagequant";
|
pname = "libimagequant";
|
||||||
version = "4.2.2";
|
version = "4.2.2";
|
||||||
@ -26,13 +23,13 @@ rustPlatform.buildRustPackage rec {
|
|||||||
|
|
||||||
postBuild = ''
|
postBuild = ''
|
||||||
pushd imagequant-sys
|
pushd imagequant-sys
|
||||||
${rust.envVars.setEnv} cargo cbuild --release --frozen --prefix=${placeholder "out"} --target ${rustTargetPlatformSpec}
|
${rust.envVars.setEnv} cargo cbuild --release --frozen --prefix=${placeholder "out"} --target ${stdenv.hostPlatform.rust.rustcTarget}
|
||||||
popd
|
popd
|
||||||
'';
|
'';
|
||||||
|
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
pushd imagequant-sys
|
pushd imagequant-sys
|
||||||
${rust.envVars.setEnv} cargo cinstall --release --frozen --prefix=${placeholder "out"} --target ${rustTargetPlatformSpec}
|
${rust.envVars.setEnv} cargo cinstall --release --frozen --prefix=${placeholder "out"} --target ${stdenv.hostPlatform.rust.rustcTarget}
|
||||||
popd
|
popd
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
, libobjc
|
, libobjc
|
||||||
, rustPlatform
|
, rustPlatform
|
||||||
, rustc
|
, rustc
|
||||||
, rust
|
|
||||||
, cargo-auditable-cargo-wrapper
|
, cargo-auditable-cargo-wrapper
|
||||||
, gi-docgen
|
, gi-docgen
|
||||||
, python3Packages
|
, python3Packages
|
||||||
@ -106,7 +105,7 @@ stdenv.mkDerivation (finalAttrs: {
|
|||||||
|
|
||||||
"--enable-always-build-tests"
|
"--enable-always-build-tests"
|
||||||
] ++ lib.optional stdenv.isDarwin "--disable-Bsymbolic"
|
] ++ lib.optional stdenv.isDarwin "--disable-Bsymbolic"
|
||||||
++ lib.optional (stdenv.buildPlatform != stdenv.hostPlatform) "RUST_TARGET=${rust.toRustTarget stdenv.hostPlatform}";
|
++ lib.optional (stdenv.buildPlatform != stdenv.hostPlatform) "RUST_TARGET=${stdenv.hostPlatform.rust.rustcTarget}";
|
||||||
|
|
||||||
doCheck = false; # all tests fail on libtool-generated rsvg-convert not being able to find coreutils
|
doCheck = false; # all tests fail on libtool-generated rsvg-convert not being able to find coreutils
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ redoxRustPlatform.buildRustPackage rec {
|
|||||||
'';
|
'';
|
||||||
|
|
||||||
# TODO: should be hostPlatform
|
# TODO: should be hostPlatform
|
||||||
TARGET = buildPackages.rust.toRustTargetSpec stdenvNoCC.targetPlatform;
|
TARGET = stdenvNoCC.targetPlatform.rust.rustcTargetSpec;
|
||||||
|
|
||||||
cargoLock = {
|
cargoLock = {
|
||||||
lockFile = ./Cargo.lock;
|
lockFile = ./Cargo.lock;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
{ rustPlatform, fetchFromGitHub, rust, lib, stdenv }:
|
{ rustPlatform, fetchFromGitHub, lib, stdenv }:
|
||||||
|
|
||||||
rustPlatform.buildRustPackage rec {
|
rustPlatform.buildRustPackage rec {
|
||||||
pname = "rustc-demangle";
|
pname = "rustc-demangle";
|
||||||
@ -24,7 +24,7 @@ rustPlatform.buildRustPackage rec {
|
|||||||
|
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
mkdir -p $out/lib
|
mkdir -p $out/lib
|
||||||
cp target/${rust.toRustTargetSpec stdenv.hostPlatform}/release/librustc_demangle.so $out/lib
|
cp target/${stdenv.hostPlatform.rust.rustcTargetSpec}/release/librustc_demangle.so $out/lib
|
||||||
cp -R crates/capi/include $out
|
cp -R crates/capi/include $out
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
{ lib
|
{ lib
|
||||||
, rustPlatform
|
, rustPlatform
|
||||||
, rust
|
|
||||||
, fetchFromGitHub
|
, fetchFromGitHub
|
||||||
, substituteAll
|
, substituteAll
|
||||||
, stdenv
|
, stdenv
|
||||||
@ -24,7 +23,7 @@ rustPlatform.buildRustPackage rec {
|
|||||||
patches = [
|
patches = [
|
||||||
(substituteAll {
|
(substituteAll {
|
||||||
src = ./use-correct-binary-path-in-tests.patch;
|
src = ./use-correct-binary-path-in-tests.patch;
|
||||||
target_triple = rust.toRustTarget stdenv.hostPlatform;
|
target_triple = stdenv.hostPlatform.rust.rustcTarget;
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
, rustPlatform
|
, rustPlatform
|
||||||
, fetchFromGitHub
|
, fetchFromGitHub
|
||||||
, substituteAll
|
, substituteAll
|
||||||
, rust
|
|
||||||
, stdenv
|
, stdenv
|
||||||
}:
|
}:
|
||||||
|
|
||||||
@ -23,7 +22,7 @@ rustPlatform.buildRustPackage rec {
|
|||||||
# patch the binary path so tests can find the binary when `--target` is present
|
# patch the binary path so tests can find the binary when `--target` is present
|
||||||
(substituteAll {
|
(substituteAll {
|
||||||
src = ./fix-test-binary-path.patch;
|
src = ./fix-test-binary-path.patch;
|
||||||
shortTarget = rust.toRustTarget stdenv.hostPlatform;
|
shortTarget = stdenv.hostPlatform.rust.rustcTarget;
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
, Cocoa
|
, Cocoa
|
||||||
, CoreServices
|
, CoreServices
|
||||||
, Foundation
|
, Foundation
|
||||||
, rust
|
|
||||||
, libiconv
|
, libiconv
|
||||||
}:
|
}:
|
||||||
|
|
||||||
@ -27,7 +26,7 @@ rustPlatform.buildRustPackage rec {
|
|||||||
# `test with_cargo` tries to call cargo-watch as a cargo subcommand
|
# `test with_cargo` tries to call cargo-watch as a cargo subcommand
|
||||||
# (calling cargo-watch with command `cargo watch`)
|
# (calling cargo-watch with command `cargo watch`)
|
||||||
preCheck = ''
|
preCheck = ''
|
||||||
export PATH="$(pwd)/target/${rust.toRustTarget stdenv.hostPlatform}/release:$PATH"
|
export PATH="$(pwd)/target/${stdenv.hostPlatform.rust.rustcTarget}/release:$PATH"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
# auto-generated file -- DO NOT EDIT!
|
# auto-generated file -- DO NOT EDIT!
|
||||||
{ rust, stdenv, fetchurl }:
|
{ stdenv, fetchurl }:
|
||||||
|
|
||||||
let
|
let
|
||||||
arch = rust.toRustTarget stdenv.hostPlatform;
|
|
||||||
fetch_librusty_v8 = args: fetchurl {
|
fetch_librusty_v8 = args: fetchurl {
|
||||||
name = "librusty_v8-${args.version}";
|
name = "librusty_v8-${args.version}";
|
||||||
url = "https://github.com/denoland/rusty_v8/releases/download/v${args.version}/librusty_v8_release_${arch}.a";
|
url = "https://github.com/denoland/rusty_v8/releases/download/v${args.version}/librusty_v8_release_${stdenv.hostPlatform.rust.rustcTarget}.a";
|
||||||
sha256 = args.shas.${stdenv.hostPlatform.system};
|
sha256 = args.shas.${stdenv.hostPlatform.system};
|
||||||
meta = { inherit (args) version; };
|
meta = { inherit (args) version; };
|
||||||
};
|
};
|
||||||
|
@ -40,13 +40,12 @@ fetchurl {
|
|||||||
|
|
||||||
const templateDeps = (version: string, deps: PrefetchResult[]) =>
|
const templateDeps = (version: string, deps: PrefetchResult[]) =>
|
||||||
`# auto-generated file -- DO NOT EDIT!
|
`# auto-generated file -- DO NOT EDIT!
|
||||||
{ rust, stdenv, fetchurl }:
|
{ stdenv, fetchurl }:
|
||||||
|
|
||||||
let
|
let
|
||||||
arch = rust.toRustTarget stdenv.hostPlatform;
|
|
||||||
fetch_librusty_v8 = args: fetchurl {
|
fetch_librusty_v8 = args: fetchurl {
|
||||||
name = "librusty_v8-\${args.version}";
|
name = "librusty_v8-\${args.version}";
|
||||||
url = "https://github.com/denoland/rusty_v8/releases/download/v\${args.version}/librusty_v8_release_\${arch}.a";
|
url = "https://github.com/denoland/rusty_v8/releases/download/v\${args.version}/librusty_v8_release_\${stdenv.hostPlatform.rust.rustcTarget}.a";
|
||||||
sha256 = args.shas.\${stdenv.hostPlatform.system};
|
sha256 = args.shas.\${stdenv.hostPlatform.system};
|
||||||
meta = { inherit (args) version; };
|
meta = { inherit (args) version; };
|
||||||
};
|
};
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
# auto-generated file -- DO NOT EDIT!
|
# auto-generated file -- DO NOT EDIT!
|
||||||
{ rust, stdenv, fetchurl }:
|
{ stdenv, fetchurl }:
|
||||||
|
|
||||||
let
|
let
|
||||||
arch = rust.toRustTarget stdenv.hostPlatform;
|
|
||||||
fetch_librusty_v8 = args: fetchurl {
|
fetch_librusty_v8 = args: fetchurl {
|
||||||
name = "librusty_v8-${args.version}";
|
name = "librusty_v8-${args.version}";
|
||||||
url = "https://github.com/denoland/rusty_v8/releases/download/v${args.version}/librusty_v8_release_${arch}.a";
|
url = "https://github.com/denoland/rusty_v8/releases/download/v${args.version}/librusty_v8_release_${stdenv.hostPlatform.rust.rustcTarget}.a";
|
||||||
sha256 = args.shas.${stdenv.hostPlatform.system};
|
sha256 = args.shas.${stdenv.hostPlatform.system};
|
||||||
meta = { inherit (args) version; };
|
meta = { inherit (args) version; };
|
||||||
};
|
};
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
{ rust, stdenv, fetchurl }:
|
{ stdenv, fetchurl }:
|
||||||
|
|
||||||
let
|
let
|
||||||
arch = rust.toRustTarget stdenv.hostPlatform;
|
|
||||||
fetch_librusty_v8 = args: fetchurl {
|
fetch_librusty_v8 = args: fetchurl {
|
||||||
name = "librusty_v8-${args.version}";
|
name = "librusty_v8-${args.version}";
|
||||||
url = "https://github.com/denoland/rusty_v8/releases/download/v${args.version}/librusty_v8_release_${arch}.a";
|
url = "https://github.com/denoland/rusty_v8/releases/download/v${args.version}/librusty_v8_release_${stdenv.hostPlatform.rust.rustcTarget}.a";
|
||||||
sha256 = args.shas.${stdenv.hostPlatform.system};
|
sha256 = args.shas.${stdenv.hostPlatform.system};
|
||||||
meta = { inherit (args) version; };
|
meta = { inherit (args) version; };
|
||||||
};
|
};
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
, makeWrapper
|
, makeWrapper
|
||||||
, matrix-sdk-crypto-nodejs
|
, matrix-sdk-crypto-nodejs
|
||||||
, mkYarnPackage
|
, mkYarnPackage
|
||||||
, rust
|
|
||||||
, cargo
|
, cargo
|
||||||
, rustPlatform
|
, rustPlatform
|
||||||
, rustc
|
, rustc
|
||||||
@ -60,7 +59,7 @@ mkYarnPackage rec {
|
|||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
runHook preBuild
|
runHook preBuild
|
||||||
cd deps/${pname}
|
cd deps/${pname}
|
||||||
napi build --target ${rust.toRustTargetSpec stdenv.targetPlatform} --dts ../src/libRs.d.ts --release ./lib
|
napi build --target ${stdenv.targetPlatform.rust.rustcTargetSpec} --dts ../src/libRs.d.ts --release ./lib
|
||||||
yarn run build:app:fix-defs
|
yarn run build:app:fix-defs
|
||||||
yarn run build:app
|
yarn run build:app
|
||||||
yarn run build:web
|
yarn run build:web
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
, pixman
|
, pixman
|
||||||
, pkg-config
|
, pkg-config
|
||||||
, python3
|
, python3
|
||||||
, rust
|
|
||||||
, rustfmt
|
, rustfmt
|
||||||
, stdenv
|
, stdenv
|
||||||
, swagger-cli
|
, swagger-cli
|
||||||
@ -70,11 +69,10 @@ rustPlatform.buildRustPackage {
|
|||||||
SQLX_OFFLINE = "true";
|
SQLX_OFFLINE = "true";
|
||||||
RUSTY_V8_ARCHIVE =
|
RUSTY_V8_ARCHIVE =
|
||||||
let
|
let
|
||||||
arch = rust.toRustTarget stdenv.hostPlatform;
|
|
||||||
fetch_librusty_v8 = args:
|
fetch_librusty_v8 = args:
|
||||||
fetchurl {
|
fetchurl {
|
||||||
name = "librusty_v8-${args.version}";
|
name = "librusty_v8-${args.version}";
|
||||||
url = "https://github.com/denoland/rusty_v8/releases/download/v${args.version}/librusty_v8_release_${arch}.a";
|
url = "https://github.com/denoland/rusty_v8/releases/download/v${args.version}/librusty_v8_release_${stdenv.hostPlatform.rust.rustcTarget}.a";
|
||||||
sha256 = args.shas.${stdenv.hostPlatform.system} or (throw "Unsupported platform ${stdenv.hostPlatform.system}");
|
sha256 = args.shas.${stdenv.hostPlatform.system} or (throw "Unsupported platform ${stdenv.hostPlatform.system}");
|
||||||
meta = { inherit (args) version; };
|
meta = { inherit (args) version; };
|
||||||
};
|
};
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
, stdenv
|
, stdenv
|
||||||
, darwin
|
, darwin
|
||||||
, unixtools
|
, unixtools
|
||||||
, rust
|
|
||||||
}:
|
}:
|
||||||
|
|
||||||
rustPlatform.buildRustPackage rec {
|
rustPlatform.buildRustPackage rec {
|
||||||
@ -48,7 +47,7 @@ rustPlatform.buildRustPackage rec {
|
|||||||
|
|
||||||
postPatch = ''
|
postPatch = ''
|
||||||
substituteInPlace src/helper/args/mod.rs \
|
substituteInPlace src/helper/args/mod.rs \
|
||||||
--subst-var-by releaseDir target/${rust.toRustTargetSpec stdenv.hostPlatform}/$cargoCheckType
|
--subst-var-by releaseDir target/${stdenv.hostPlatform.rust.rustcTargetSpec}/$cargoCheckType
|
||||||
'';
|
'';
|
||||||
|
|
||||||
preCheck = ''
|
preCheck = ''
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
{ lib
|
{ lib
|
||||||
, stdenv
|
, stdenv
|
||||||
, fetchFromGitHub
|
, fetchFromGitHub
|
||||||
, rust
|
|
||||||
, rustPlatform
|
, rustPlatform
|
||||||
, pkg-config
|
, pkg-config
|
||||||
, ronn
|
, ronn
|
||||||
@ -28,7 +27,7 @@ rustPlatform.buildRustPackage rec {
|
|||||||
postPatch = ''
|
postPatch = ''
|
||||||
cp ${./Cargo.lock} Cargo.lock
|
cp ${./Cargo.lock} Cargo.lock
|
||||||
substituteInPlace Makefile \
|
substituteInPlace Makefile \
|
||||||
--replace 'target/$(BUILDTYPE)' 'target/${rust.toRustTargetSpec stdenv.hostPlatform}/$(BUILDTYPE)'
|
--replace 'target/$(BUILDTYPE)' 'target/${stdenv.hostPlatform.rust.rustcTargetSpec}/$(BUILDTYPE)'
|
||||||
substituteInPlace src/generator.rs \
|
substituteInPlace src/generator.rs \
|
||||||
--replace 'Command::new("systemd-detect-virt")' 'Command::new("${systemd}/bin/systemd-detect-virt")' \
|
--replace 'Command::new("systemd-detect-virt")' 'Command::new("${systemd}/bin/systemd-detect-virt")' \
|
||||||
--replace 'Command::new("modprobe")' 'Command::new("${kmod}/bin/modprobe")'
|
--replace 'Command::new("modprobe")' 'Command::new("${kmod}/bin/modprobe")'
|
||||||
|
@ -13,10 +13,7 @@
|
|||||||
, buildPackages
|
, buildPackages
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
rustPlatform.buildRustPackage rec {
|
||||||
rustTargetPlatformSpec = rust.toRustTargetSpec stdenv.hostPlatform;
|
|
||||||
|
|
||||||
in rustPlatform.buildRustPackage rec {
|
|
||||||
pname = "rav1e";
|
pname = "rav1e";
|
||||||
version = "0.6.6";
|
version = "0.6.6";
|
||||||
|
|
||||||
@ -47,11 +44,11 @@ in rustPlatform.buildRustPackage rec {
|
|||||||
checkType = "debug";
|
checkType = "debug";
|
||||||
|
|
||||||
postBuild = ''
|
postBuild = ''
|
||||||
${rust.envVars.setEnv} cargo cbuild --release --frozen --prefix=${placeholder "out"} --target ${rustTargetPlatformSpec}
|
${rust.envVars.setEnv} cargo cbuild --release --frozen --prefix=${placeholder "out"} --target ${stdenv.hostPlatform.rust.rustcTarget}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
${rust.envVars.setEnv} cargo cinstall --release --frozen --prefix=${placeholder "out"} --target ${rustTargetPlatformSpec}
|
${rust.envVars.setEnv} cargo cinstall --release --frozen --prefix=${placeholder "out"} --target ${stdenv.hostPlatform.rust.rustcTarget}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
|
Loading…
Reference in New Issue
Block a user