diff options
author | Georgy Yakovlev <gyakovlev@gentoo.org> | 2020-11-23 15:08:09 -0800 |
---|---|---|
committer | Georgy Yakovlev <gyakovlev@gentoo.org> | 2020-11-23 16:39:10 -0800 |
commit | 539b8728990de5bb5158e0be98fbf48838d14a35 (patch) | |
tree | 098009e055c45811df5a0a9f1df4c0bd2230a0fd /dev-lang | |
parent | dev-lang/rust-bin: bump to 1.48.0 (diff) | |
download | gentoo-539b8728990de5bb5158e0be98fbf48838d14a35.tar.gz gentoo-539b8728990de5bb5158e0be98fbf48838d14a35.tar.bz2 gentoo-539b8728990de5bb5158e0be98fbf48838d14a35.zip |
dev-lang/rust: bump to 1.48.0
Package-Manager: Portage-3.0.10, Repoman-3.0.2
Signed-off-by: Georgy Yakovlev <gyakovlev@gentoo.org>
Diffstat (limited to 'dev-lang')
-rw-r--r-- | dev-lang/rust/Manifest | 15 | ||||
-rw-r--r-- | dev-lang/rust/files/1.48.0-gentoo-musl-target-specs.patch | 164 | ||||
-rw-r--r-- | dev-lang/rust/rust-1.48.0.ebuild | 590 |
3 files changed, 769 insertions, 0 deletions
diff --git a/dev-lang/rust/Manifest b/dev-lang/rust/Manifest index 52fc44542f45..89bcd45b952e 100644 --- a/dev-lang/rust/Manifest +++ b/dev-lang/rust/Manifest @@ -40,6 +40,21 @@ DIST rust-1.46.0-powerpc64le-unknown-linux-gnu.tar.xz 130200900 BLAKE2B d38a7f13 DIST rust-1.46.0-s390x-unknown-linux-gnu.tar.xz 134521076 BLAKE2B d3efd71dd7db812736680929185ad5f58a2dbf7d1b8a6f851834dd7b41713fc171dbcdf2472bedc13751bfeed58070d919d2a1138765ab75c0f4bdf817cb6418 SHA512 b6146695225ff6d0516e7bb6bc4620599356bb89b14f429a09d9d7f8715a94e8e218402346d5c9a10eeb54c0bdc40fb179289216b0cb4edd5bdf886f6b69aab4 DIST rust-1.46.0-x86_64-unknown-linux-gnu.tar.xz 127200200 BLAKE2B 7d755e0622cda99d111490197b21ff4aaeb7b13292804566bc677b7b1d833eaa644b7a801863a1a01e3aa34be28a80344cae69edc57f8c8788884c78e037b750 SHA512 95f5adc2d2137010c7e5ac8a0fc70485250b4f9a909cb8b164b35fffff76ab88e9b09d305bfac37324ed080c5fc7643001d2abec5454ca911dc3513f1af52c88 DIST rust-1.46.0-x86_64-unknown-linux-musl.tar.xz 142372372 BLAKE2B 7d3672234b61b772e2311127db569b37296bf3a9bf86841fb78c6d20da6a6abfc6c866ba4aa7cc44c12eebb0744fbeb401b491314db9eb481b926792cadcca22 SHA512 e2599c4c10fe9725e63524d89c0be869d43347620b0f6ff1a93cee5e7219f5560c6171d8eda99e5624eba60b9d488bfe0942c23eacdbac2ba42e4cd63f14b7c9 +DIST rust-1.47.0-aarch64-unknown-linux-gnu.tar.xz 136486128 BLAKE2B 872226c232141e25466413d9a998bb021a6f4955dd8ccb5d68f8cca70ea8f7056a6f7b4125134b48a3106331dd3db2e77b32a0083fca3c66a348b77699c49e7a SHA512 7df7045df341f03508f1ad795a9117b39c1f4c4cc778c7fd9d78c42e7da662ce244d018084ac9e80d9409cf8b3b5d1ccc25ef4cb71a2b8727398d30a4e962e19 +DIST rust-1.47.0-arm-unknown-linux-gnueabi.tar.xz 133989400 BLAKE2B 301c17d6f9c048f43d460898ca352e189f7770539431721d178239d5cd64e9e62c05a63482049c18d6fe3fbaa463616d64cf6d82f2bd846576dedc6fc19bd3bd SHA512 db9caa96f142145c3f515730a1aee2fb24c9990f7b9b56e277997975409786904c6490609dfb29712acd9bba077acf36103e4d612bc6c2a74581b40fb50d12ad +DIST rust-1.47.0-arm-unknown-linux-gnueabihf.tar.xz 133431024 BLAKE2B ab94ee2961ac3060154834d21a47384dd09a55213f1a7082911e0976ab9e572b5b234e175ad068cee0fa9355ef2d85acd7ebfff109565be013f14c32e61a71ff SHA512 fa0643c4b2eb36c2bcf4c786517d27fee4428114b79565e0da3b5626700275e9368ce6a68e93b4eae9881265ecca474cced25d63f352ffe3c8617a725185cd28 +DIST rust-1.47.0-armv7-unknown-linux-gnueabihf.tar.xz 137060904 BLAKE2B 8e6cbd665cdffcdd059dc4278dfb1647d046a96619f784dfe45299a0c29f1af51de4511b87cb8c0d0d166ba76b484f4249819e22275e2c1775c53b2ee5b1ffb5 SHA512 b207ab7c478dce6db4018527888f539938c8e77b5ceccb460b9d52ffee13a2329d225d03a605b60729cae6254129245bdd69730aebb6ec91dd0c83005cf25253 +DIST rust-1.47.0-i686-unknown-linux-gnu.tar.xz 154793612 BLAKE2B a8063a9241fb9fa8b7f9c430d65fd2353d3a1014e51148c9cd1b5686338ccf5170fbde78cb6f95a9d4db5441392ad4e7bf14e5a39418208937cda4019cf4e2e2 SHA512 551204b4edfc1500aa83108c88b845997bb6befba0dd3401e9ae5294ab27960421f1b3130159946b996171c1d46f7532afa0c3ae767a9318985db0bb7c88dba0 +DIST rust-1.47.0-mips-unknown-linux-gnu.tar.xz 122428884 BLAKE2B 10778716e282f9b74ef1a3daeec70ed1bb4f4dcc4a31baeed90c26f398bbe313df58b62469595ced95c73df9aad4739210add4eb3c6f0f94b5fa3dc937967394 SHA512 0e39ef2cd814474c33adc38658cbc2e84879f0208fbb37c1a4bf3719d3cace071606e7b03fd8464ba80f6328cc0a0bd38ec8e7772cc460b5a2d2d8b704042c49 +DIST rust-1.47.0-mips64-unknown-linux-gnuabi64.tar.xz 125553888 BLAKE2B 27c9f5d860025ceff4acb1e40ecfa0ec4c053ac694e4bec3bab41e2a193492afb8b4ac22ca471d3170ebe5c3e0fce628d0bf8060b5831af10bd99d614caaceb6 SHA512 186324da11997a65586930e5f2422c687a6ad817e3e0a5766caadbd51153cd29dd1e0d472586117c654d5db20e0ea2bd4073e05a94f3197bed2403dc325b31d5 +DIST rust-1.47.0-mipsel-unknown-linux-gnu.tar.xz 122801616 BLAKE2B 667712f3441ce63bcfc245801dd580ba8a9a06e0695b9f9a713baa55d8f9b8ca208a02f043918814490166a4c3dd2cb6ffa0d669b9533845f9c241063ee9b9c1 SHA512 8cd441739a25af20298ed25d877f8da4b81969e6f591d45527b94187808b7ce04ef6106785fc050d1318f71fccd00c295f60cdbf8fb79288aac80d92be9e57c4 +DIST rust-1.47.0-powerpc-unknown-linux-gnu.tar.xz 125781632 BLAKE2B 00e966a5ba83702ee36fc2dadd9d058f655d4ea8b3b0072b61d221508ccddb82efae0f5028768a4744b6c439e0f7080db5f727e9f2f7facd7d57964bc332b5a3 SHA512 8a20462ed79f22b868a3e64ba147b32c32eb0b0a149a7a571cc91ffe1ae9fe2d71a244c910817f3c151464f6c417550923a4f02e9dc433670b38502684bf349f +DIST rust-1.47.0-powerpc64-unknown-linux-gnu.tar.xz 134272040 BLAKE2B c7b4256df6c7a031a53e022ba00999706674e273c041534b75743fee1d366567dcd86fb805ec9997737cff3902641e21269f2a95fef651227cac5da34c947091 SHA512 46fa1c042aebb06db4185fed6ef3bc7772f2a13f2290a20f5499757aae2a05dc984026315be7b5813aac172f52f50565e56aa074d32f6271858590a9ceb9e1c7 +DIST rust-1.47.0-powerpc64le-unknown-linux-gnu.tar.xz 141965604 BLAKE2B b4b7ce862b2201526e6a96249e509faa7bce2d841e571b6dd241c9a82bd9011c92e0918df649ffcce7f3c6c93aa47aa8f66b99e6529b1b3cecbe16622b08e0b2 SHA512 d5c6580861786545f0540cc9591884fb9f2036061bdd451d17cf8bfb427008d365cacd14e5054028c72b83d1d5eb347ab74478a882cbbd7fcc75a7421657561c +DIST rust-1.47.0-s390x-unknown-linux-gnu.tar.xz 146987276 BLAKE2B 1810e7bfbd235613563677449376167700c33960eb57b100e65058f6a00692316db518f2f4b79b39e414f3892c62bb1ec09b0866ff2221641c4a3056659a1668 SHA512 dd5877b6ff5c310ca6aa23c1cc621e6b0675d4c46f5a06b2a0b107641b604a1a2101109ba8e286267bab1158768c601d5d9a922a8da72486c91755ef465720c0 +DIST rust-1.47.0-x86_64-unknown-linux-gnu.tar.xz 150891572 BLAKE2B 45ff02465ba82ae96de25dd616fa08abb2396be21236d2f66f831effb349f39b047a380b38cb83254f27e56cecdbea8478f4de8ccc0aa23b11de2f11a28f501b SHA512 f695986ab8e67636b0e92ca7ea223984121e3c22788434a6f1062690e7932f6b30c0c302160fef96831f821acedaf8a909bd3d00a9aa873c7200d2b8fa39013f +DIST rust-1.47.0-x86_64-unknown-linux-musl.tar.xz 166456672 BLAKE2B d6ccfc574a81ae3e9e6a96805e6863009970b5c480f35ee0d582a204b782fe513b9c6c7094d1adea509de1a3097a8a0524ac00c2186b968f70f390615904eb5a SHA512 f71b162635955ecd8a6ec322818be69c788c18d4e923d84d901916648f2eb58573b1f97b460209294ee64198e76566b78e472f9cbca8665c59444adfc5ae603c DIST rustc-1.45.2-src.tar.xz 98683036 BLAKE2B a4102a5d4744b7ccc9b076aba00c39d69532f777e7d39e0e4ce2033b663b43e27b55034fdb3a1e13379fae9a16bff9e7748865a84507f7388ef0ebf9d421eac7 SHA512 cc6250c0bc844e77ca6dd7ae013e434ed3009b001914114866ed31f28edf3960221454d131e298b15050e3b8153fb8298d509559c2f7307c64611aa8e36b4d25 DIST rustc-1.46.0-src.tar.xz 101868452 BLAKE2B da9798596b124a10d79c236a871228f05e5f571d22c2259328e7026c91e088c85f5de9c0536a16531e0cb10477bfcd16d3ac11467979f5561cb6199442b877ef SHA512 099857f1d295043587a4e2a65ef3e6a90e12c8b6958e98535a1656c113c553f9a9b621aba8a19cf21bd8d2c79d27cbfa4b8e6fabbcb3cbfee23b545be7b450b4 DIST rustc-1.47.0-src.tar.xz 104143736 BLAKE2B 0454094dde35275488046826da87655e51bf0795481d6d08fd70d644bfc12481bca8641166106ef32f20494906025244715b16ff21a1c023f4bd2818aab42521 SHA512 6ba83c0158f8130ddeae7e070417a2121d8a548c8fe97e28bce116d84048636c75aaee78e0c92cd43a50f5679a1223fc226cc8c5ba9bbd1465e84c5c6034d5c9 +DIST rustc-1.48.0-src.tar.xz 105951736 BLAKE2B 42468fc5ac5e80c4793cfe0913cbb8e43a8def28cc8cf5ed25ab989561e2bf33e155c83e180183362535cbc9008f341eb1273087a2364672b1a4032ac2d6ca45 SHA512 4e12baa6893238a8d336ec9ebe891477d18676f271b32763474fa7a6a8b58fb3187dd4e2aa95bce482989b692cc2e1360221669d6811eec71b326f22a1756c23 diff --git a/dev-lang/rust/files/1.48.0-gentoo-musl-target-specs.patch b/dev-lang/rust/files/1.48.0-gentoo-musl-target-specs.patch new file mode 100644 index 000000000000..850257f932ea --- /dev/null +++ b/dev-lang/rust/files/1.48.0-gentoo-musl-target-specs.patch @@ -0,0 +1,164 @@ +From 671ef2d1c228aed031b4232b8bea96f17b825263 Mon Sep 17 00:00:00 2001 +From: Georgy Yakovlev <gyakovlev@gentoo.org> +Date: Mon, 23 Nov 2020 14:52:04 -0800 +Subject: [PATCH] add gentoo musl target specs + +--- + .../src/spec/aarch64_gentoo_linux_musl.rs | 11 +++++++++++ + .../src/spec/armv7_gentoo_linux_musleabihf.rs | 11 +++++++++++ + .../rustc_target/src/spec/i686_gentoo_linux_musl.rs | 11 +++++++++++ + compiler/rustc_target/src/spec/mod.rs | 8 ++++++++ + .../src/spec/powerpc64_gentoo_linux_musl.rs | 11 +++++++++++ + .../src/spec/powerpc64le_gentoo_linux_musl.rs | 11 +++++++++++ + .../src/spec/powerpc_gentoo_linux_musl.rs | 11 +++++++++++ + .../rustc_target/src/spec/x86_64_gentoo_linux_musl.rs | 11 +++++++++++ + 8 files changed, 85 insertions(+) + create mode 100644 compiler/rustc_target/src/spec/aarch64_gentoo_linux_musl.rs + create mode 100644 compiler/rustc_target/src/spec/armv7_gentoo_linux_musleabihf.rs + create mode 100644 compiler/rustc_target/src/spec/i686_gentoo_linux_musl.rs + create mode 100644 compiler/rustc_target/src/spec/powerpc64_gentoo_linux_musl.rs + create mode 100644 compiler/rustc_target/src/spec/powerpc64le_gentoo_linux_musl.rs + create mode 100644 compiler/rustc_target/src/spec/powerpc_gentoo_linux_musl.rs + create mode 100644 compiler/rustc_target/src/spec/x86_64_gentoo_linux_musl.rs + +diff --git a/compiler/rustc_target/src/spec/aarch64_gentoo_linux_musl.rs b/compiler/rustc_target/src/spec/aarch64_gentoo_linux_musl.rs +new file mode 100644 +index 0000000..420fe7c +--- /dev/null ++++ b/compiler/rustc_target/src/spec/aarch64_gentoo_linux_musl.rs +@@ -0,0 +1,11 @@ ++use crate::spec::TargetResult; ++ ++pub fn target() -> TargetResult { ++ let mut base = super::aarch64_unknown_linux_musl::target()?; ++ ++ base.llvm_target = "aarch64-gentoo-linux-musl".to_string(); ++ base.target_vendor = "gentoo".to_string(); ++ base.options.crt_static_default = false; ++ ++ Ok(base) ++} +diff --git a/compiler/rustc_target/src/spec/armv7_gentoo_linux_musleabihf.rs b/compiler/rustc_target/src/spec/armv7_gentoo_linux_musleabihf.rs +new file mode 100644 +index 0000000..067e2d6 +--- /dev/null ++++ b/compiler/rustc_target/src/spec/armv7_gentoo_linux_musleabihf.rs +@@ -0,0 +1,11 @@ ++use crate::spec::TargetResult; ++ ++pub fn target() -> TargetResult { ++ let mut base = super::armv7_unknown_linux_musleabihf::target()?; ++ ++ base.llvm_target = "armv7-gentoo-linux-musleabihf".to_string(); ++ base.target_vendor = "gentoo".to_string(); ++ base.options.crt_static_default = false; ++ ++ Ok(base) ++} +diff --git a/compiler/rustc_target/src/spec/i686_gentoo_linux_musl.rs b/compiler/rustc_target/src/spec/i686_gentoo_linux_musl.rs +new file mode 100644 +index 0000000..1cd39cd +--- /dev/null ++++ b/compiler/rustc_target/src/spec/i686_gentoo_linux_musl.rs +@@ -0,0 +1,11 @@ ++use crate::spec::TargetResult; ++ ++pub fn target() -> TargetResult { ++ let mut base = super::i686_unknown_linux_musl::target()?; ++ ++ base.llvm_target = "i686-gentoo-linux-musl".to_string(); ++ base.target_vendor = "gentoo".to_string(); ++ base.options.crt_static_default = false; ++ ++ Ok(base) ++} +diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs +index f1e8330..d8c0ba0 100644 +--- a/compiler/rustc_target/src/spec/mod.rs ++++ b/compiler/rustc_target/src/spec/mod.rs +@@ -490,6 +490,14 @@ macro_rules! supported_targets { + } + + supported_targets! { ++ ("aarch64-gentoo-linux-musl", aarch64_gentoo_linux_musl), ++ ("armv7-gentoo-linux-musleabihf", armv7_gentoo_linux_musleabihf), ++ ("i686-gentoo-linux-musl", i686_gentoo_linux_musl), ++ ("powerpc-gentoo-linux-musl", powerpc_gentoo_linux_musl), ++ ("powerpc64-gentoo-linux-musl", powerpc64_gentoo_linux_musl), ++ ("powerpc64le-gentoo-linux-musl", powerpc64le_gentoo_linux_musl), ++ ("x86_64-gentoo-linux-musl", x86_64_gentoo_linux_musl), ++ + ("x86_64-unknown-linux-gnu", x86_64_unknown_linux_gnu), + ("x86_64-unknown-linux-gnux32", x86_64_unknown_linux_gnux32), + ("i686-unknown-linux-gnu", i686_unknown_linux_gnu), +diff --git a/compiler/rustc_target/src/spec/powerpc64_gentoo_linux_musl.rs b/compiler/rustc_target/src/spec/powerpc64_gentoo_linux_musl.rs +new file mode 100644 +index 0000000..e840bb2 +--- /dev/null ++++ b/compiler/rustc_target/src/spec/powerpc64_gentoo_linux_musl.rs +@@ -0,0 +1,11 @@ ++use crate::spec::TargetResult; ++ ++pub fn target() -> TargetResult { ++ let mut base = super::powerpc64_unknown_linux_musl::target()?; ++ ++ base.llvm_target = "powerpc64-gentoo-linux-musl".to_string(); ++ base.target_vendor = "gentoo".to_string(); ++ base.options.crt_static_default = false; ++ ++ Ok(base) ++} +diff --git a/compiler/rustc_target/src/spec/powerpc64le_gentoo_linux_musl.rs b/compiler/rustc_target/src/spec/powerpc64le_gentoo_linux_musl.rs +new file mode 100644 +index 0000000..1037d82 +--- /dev/null ++++ b/compiler/rustc_target/src/spec/powerpc64le_gentoo_linux_musl.rs +@@ -0,0 +1,11 @@ ++use crate::spec::TargetResult; ++ ++pub fn target() -> TargetResult { ++ let mut base = super::powerpc64le_unknown_linux_musl::target()?; ++ ++ base.llvm_target = "powerpc64le-gentoo-linux-musl".to_string(); ++ base.target_vendor = "gentoo".to_string(); ++ base.options.crt_static_default = false; ++ ++ Ok(base) ++} +diff --git a/compiler/rustc_target/src/spec/powerpc_gentoo_linux_musl.rs b/compiler/rustc_target/src/spec/powerpc_gentoo_linux_musl.rs +new file mode 100644 +index 0000000..a623ffe +--- /dev/null ++++ b/compiler/rustc_target/src/spec/powerpc_gentoo_linux_musl.rs +@@ -0,0 +1,11 @@ ++use crate::spec::TargetResult; ++ ++pub fn target() -> TargetResult { ++ let mut base = super::powerpc_unknown_linux_musl::target()?; ++ ++ base.llvm_target = "powerpc-gentoo-linux-musl".to_string(); ++ base.target_vendor = "gentoo".to_string(); ++ base.options.crt_static_default = false; ++ ++ Ok(base) ++} +diff --git a/compiler/rustc_target/src/spec/x86_64_gentoo_linux_musl.rs b/compiler/rustc_target/src/spec/x86_64_gentoo_linux_musl.rs +new file mode 100644 +index 0000000..f330473 +--- /dev/null ++++ b/compiler/rustc_target/src/spec/x86_64_gentoo_linux_musl.rs +@@ -0,0 +1,11 @@ ++use crate::spec::TargetResult; ++ ++pub fn target() -> TargetResult { ++ let mut base = super::x86_64_unknown_linux_musl::target()?; ++ ++ base.llvm_target = "x86_64-gentoo-linux-musl".to_string(); ++ base.target_vendor = "gentoo".to_string(); ++ base.options.crt_static_default = false; ++ ++ Ok(base) ++} +-- +2.29.2 + diff --git a/dev-lang/rust/rust-1.48.0.ebuild b/dev-lang/rust/rust-1.48.0.ebuild new file mode 100644 index 000000000000..145293e816df --- /dev/null +++ b/dev-lang/rust/rust-1.48.0.ebuild @@ -0,0 +1,590 @@ +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +PYTHON_COMPAT=( python3_{6..9} ) + +inherit bash-completion-r1 check-reqs estack flag-o-matic llvm multiprocessing multilib-build python-any-r1 rust-toolchain toolchain-funcs + +if [[ ${PV} = *beta* ]]; then + betaver=${PV//*beta} + BETA_SNAPSHOT="${betaver:0:4}-${betaver:4:2}-${betaver:6:2}" + MY_P="rustc-beta" + SLOT="beta/${PV}" + SRC="${BETA_SNAPSHOT}/rustc-beta-src.tar.xz -> rustc-${PV}-src.tar.xz" +else + ABI_VER="$(ver_cut 1-2)" + SLOT="stable/${ABI_VER}" + MY_P="rustc-${PV}" + SRC="${MY_P}-src.tar.xz" + KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~x86" +fi + +RUST_STAGE0_VERSION="1.$(($(ver_cut 2) - 1)).0" + +DESCRIPTION="Systems programming language from Mozilla" +HOMEPAGE="https://www.rust-lang.org/" + +SRC_URI=" + https://static.rust-lang.org/dist/${SRC} + !system-bootstrap? ( $(rust_all_arch_uris rust-${RUST_STAGE0_VERSION}) ) +" + +# keep in sync with llvm ebuild of the same version as bundled one. +ALL_LLVM_TARGETS=( AArch64 AMDGPU ARM AVR BPF Hexagon Lanai Mips MSP430 + NVPTX PowerPC RISCV Sparc SystemZ WebAssembly X86 XCore ) +ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" ) +LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/?} + +LICENSE="|| ( MIT Apache-2.0 ) BSD-1 BSD-2 BSD-4 UoI-NCSA" + +IUSE="clippy cpu_flags_x86_sse2 debug doc libressl miri nightly parallel-compiler rls rustfmt +system-bootstrap system-llvm test wasm ${ALL_LLVM_TARGETS[*]}" + +# Please keep the LLVM dependency block separate. Since LLVM is slotted, +# we need to *really* make sure we're not pulling more than one slot +# simultaneously. + +# How to use it: +# 1. List all the working slots (with min versions) in ||, newest first. +# 2. Update the := to specify *max* version, e.g. < 12. +# 3. Specify LLVM_MAX_SLOT, e.g. 11. +LLVM_DEPEND=" + || ( + sys-devel/llvm:11[${LLVM_TARGET_USEDEPS// /,}] + ) + <sys-devel/llvm-12:= + wasm? ( sys-devel/lld ) +" +LLVM_MAX_SLOT=11 + +BOOTSTRAP_DEPEND="|| ( >=dev-lang/rust-1.$(($(ver_cut 2) - 1)) >=dev-lang/rust-bin-1.$(($(ver_cut 2) - 1)) )" + +BDEPEND="${PYTHON_DEPS} + app-eselect/eselect-rust + || ( + >=sys-devel/gcc-4.7 + >=sys-devel/clang-3.5 + ) + system-bootstrap? ( ${BOOTSTRAP_DEPEND} ) + !system-llvm? ( + dev-util/cmake + dev-util/ninja + ) +" + +DEPEND=" + >=dev-libs/libgit2-1.1.0:= + net-misc/curl:=[http2,ssl] + sys-libs/zlib:= + !libressl? ( dev-libs/openssl:0= ) + libressl? ( dev-libs/libressl:0= ) + elibc_musl? ( sys-libs/libunwind:= ) + system-llvm? ( + ${LLVM_DEPEND} + ) +" + +# we need to block versions older than 1.47.0 due to layout changes. +RDEPEND="${DEPEND} + app-eselect/eselect-rust + !<dev-lang/rust-1.47.0-r1 + !<dev-lang/rust-bin-1.47.0-r1 +" + +REQUIRED_USE="|| ( ${ALL_LLVM_TARGETS[*]} ) + miri? ( nightly ) + parallel-compiler? ( nightly ) + test? ( ${ALL_LLVM_TARGETS[*]} ) + wasm? ( llvm_targets_WebAssembly ) + x86? ( cpu_flags_x86_sse2 ) +" + +# we don't use cmake.eclass, but can get a warnings +CMAKE_WARN_UNUSED_CLI=no + +QA_FLAGS_IGNORED=" + usr/lib/${PN}/${PV}/bin/.* + usr/lib/${PN}/${PV}/lib/lib.*.so + usr/lib/${PN}/${PV}/lib/rustlib/.*/bin/.* + usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so +" + +QA_SONAME=" + usr/lib/${PN}/${PV}/lib/lib.*.so.* + usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so +" + +# causes double bootstrap +RESTRICT="test" + +PATCHES=( + "${FILESDIR}"/1.47.0-libressl.patch + "${FILESDIR}"/1.46.0-don-t-create-prefix-at-time-of-check.patch + "${FILESDIR}"/1.47.0-ignore-broken-and-non-applicable-tests.patch + "${FILESDIR}"/1.47.0-llvm-tensorflow-fix.patch + "${FILESDIR}"/1.48.0-gentoo-musl-target-specs.patch +) + +S="${WORKDIR}/${MY_P}-src" + +toml_usex() { + usex "$1" true false +} + +boostrap_rust_version_check() { + # never call from pkg_pretend. eselect-rust may be not installed yet. + [[ ${MERGE_TYPE} == binary ]] && return + local rustc_wanted="$(ver_cut 1).$(($(ver_cut 2) - 1))" + local rustc_version=( $(eselect --brief rust show 2>/dev/null) ) + rustc_version=${rustc_version[0]#rust-bin-} + rustc_version=${rustc_version#rust-} + + [[ -z "${rustc_version}" ]] && die "Failed to determine rustc version!" + + if ver_test "${rustc_version}" -lt "${rustc_wanted}" ; then + eerror "Rust >=${rustc_wanted} is required" + eerror "please run \'eselect rust\' and set correct rust version" + die + else + einfo "Using rust ${rustc_version} to build" + fi +} + +pre_build_checks() { + local M=6144 + M=$(( $(usex clippy 128 0) + ${M} )) + M=$(( $(usex miri 128 0) + ${M} )) + M=$(( $(usex rls 512 0) + ${M} )) + M=$(( $(usex rustfmt 256 0) + ${M} )) + M=$(( $(usex system-llvm 0 2048) + ${M} )) + M=$(( $(usex wasm 256 0) + ${M} )) + M=$(( $(usex debug 15 10) * ${M} / 10 )) + eshopts_push -s extglob + if is-flagq '-g?(gdb)?([1-9])'; then + M=$(( 15 * ${M} / 10 )) + fi + eshopts_pop + M=$(( $(usex system-bootstrap 0 1024) + ${M} )) + M=$(( $(usex doc 256 0) + ${M} )) + CHECKREQS_DISK_BUILD=${M}M check-reqs_pkg_${EBUILD_PHASE} +} + +pkg_pretend() { + pre_build_checks +} + +pkg_setup() { + pre_build_checks + python-any-r1_pkg_setup + + use system-bootstrap && boostrap_rust_version_check + + if use system-llvm; then + llvm_pkg_setup + + local llvm_config="$(get_llvm_prefix "$LLVM_MAX_SLOT")/bin/llvm-config" + export LLVM_LINK_SHARED=1 + export RUSTFLAGS="${RUSTFLAGS} -Lnative=$("${llvm_config}" --libdir)" + fi +} + +src_prepare() { + if ! use system-bootstrap; then + local rust_stage0_root="${WORKDIR}"/rust-stage0 + local rust_stage0="rust-${RUST_STAGE0_VERSION}-$(rust_abi)" + + "${WORKDIR}/${rust_stage0}"/install.sh --disable-ldconfig \ + --destdir="${rust_stage0_root}" --prefix=/ || die + fi + + default +} + +src_configure() { + local rust_target="" rust_targets="" arch_cflags + + # Collect rust target names to compile standard libs for all ABIs. + for v in $(multilib_get_enabled_abi_pairs); do + rust_targets="${rust_targets},\"$(rust_abi $(get_abi_CHOST ${v##*.}))\"" + done + if use wasm; then + rust_targets="${rust_targets},\"wasm32-unknown-unknown\"" + if use system-llvm; then + # un-hardcode rust-lld linker for this target + # https://bugs.gentoo.org/715348 + sed -i '/linker:/ s/rust-lld/wasm-ld/' src/librustc_target/spec/wasm32_base.rs || die + fi + fi + rust_targets="${rust_targets#,}" + + local tools="\"cargo\"," + if use clippy; then + tools="\"clippy\",$tools" + fi + if use miri; then + tools="\"miri\",$tools" + fi + if use rls; then + tools="\"rls\",\"analysis\",\"src\",$tools" + fi + if use rustfmt; then + tools="\"rustfmt\",$tools" + fi + + local rust_stage0_root + if use system-bootstrap; then + rust_stage0_root="$(rustc --print sysroot)" + else + rust_stage0_root="${WORKDIR}"/rust-stage0 + fi + + rust_target="$(rust_abi)" + + cat <<- _EOF_ > "${S}"/config.toml + [llvm] + optimize = $(toml_usex !debug) + release-debuginfo = $(toml_usex debug) + assertions = $(toml_usex debug) + ninja = true + targets = "${LLVM_TARGETS// /;}" + experimental-targets = "" + link-shared = $(toml_usex system-llvm) + [build] + build = "${rust_target}" + host = ["${rust_target}"] + target = [${rust_targets}] + cargo = "${rust_stage0_root}/bin/cargo" + rustc = "${rust_stage0_root}/bin/rustc" + docs = $(toml_usex doc) + compiler-docs = $(toml_usex doc) + submodules = false + python = "${EPYTHON}" + locked-deps = true + vendor = true + extended = true + tools = [${tools}] + verbose = 2 + sanitizers = false + profiler = false + cargo-native-static = false + [install] + prefix = "${EPREFIX}/usr/lib/${PN}/${PV}" + sysconfdir = "etc" + docdir = "share/doc/rust" + bindir = "bin" + libdir = "lib" + mandir = "share/man" + [rust] + # https://github.com/rust-lang/rust/issues/54872 + codegen-units-std = 1 + optimize = true + debug = $(toml_usex debug) + debug-assertions = $(toml_usex debug) + debuginfo-level-rustc = 0 + backtrace = true + incremental = false + default-linker = "$(tc-getCC)" + parallel-compiler = $(toml_usex parallel-compiler) + channel = "$(usex nightly nightly stable)" + rpath = false + verbose-tests = true + optimize-tests = $(toml_usex !debug) + codegen-tests = true + dist-src = false + remap-debuginfo = true + lld = $(usex system-llvm false $(toml_usex wasm)) + backtrace-on-ice = true + jemalloc = false + [dist] + src-tarball = false + _EOF_ + + for v in $(multilib_get_enabled_abi_pairs); do + rust_target=$(rust_abi $(get_abi_CHOST ${v##*.})) + arch_cflags="$(get_abi_CFLAGS ${v##*.})" + + cat <<- _EOF_ >> "${S}"/config.env + CFLAGS_${rust_target}=${arch_cflags} + _EOF_ + + cat <<- _EOF_ >> "${S}"/config.toml + [target.${rust_target}] + cc = "$(tc-getBUILD_CC)" + cxx = "$(tc-getBUILD_CXX)" + linker = "$(tc-getCC)" + ar = "$(tc-getAR)" + _EOF_ + # librustc_target/spec/linux_musl_base.rs sets base.crt_static_default = true; + if use elibc_musl; then + cat <<- _EOF_ >> "${S}"/config.toml + crt-static = false + _EOF_ + fi + if use system-llvm; then + cat <<- _EOF_ >> "${S}"/config.toml + llvm-config = "$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config" + _EOF_ + fi + done + if use wasm; then + cat <<- _EOF_ >> "${S}"/config.toml + [target.wasm32-unknown-unknown] + linker = "$(usex system-llvm lld rust-lld)" + _EOF_ + fi + + if [[ -n ${I_KNOW_WHAT_I_AM_DOING_CROSS} ]]; then # whitespace intentionally shifted below + # experimental cross support + # discussion: https://bugs.gentoo.org/679878 + # TODO: c*flags, clang, system-llvm, cargo.eclass target support + # it would be much better if we could split out stdlib + # complilation to separate ebuild and abuse CATEGORY to + # just install to /usr/lib/rustlib/<target> + + # extra targets defined as a bash array + # spec format: <LLVM target>:<rust-target>:<CTARGET> + # best place would be /etc/portage/env/dev-lang/rust + # Example: + # RUST_CROSS_TARGETS=( + # "AArch64:aarch64-unknown-linux-gnu:aarch64-unknown-linux-gnu" + # ) + # no extra hand holding is done, no target transformations, all + # values are passed as-is with just basic checks, so it's up to user to supply correct values + # valid rust targets can be obtained with + # rustc --print target-list + # matching cross toolchain has to be installed + # matching LLVM_TARGET has to be enabled for both rust and llvm (if using system one) + # only gcc toolchains installed with crossdev are checked for now. + + # BUG: we can't pass host flags to cross compiler, so just filter for now + # BUG: this should be more fine-grained. + filter-flags '-mcpu=*' '-march=*' '-mtune=*' + + local cross_target_spec + for cross_target_spec in "${RUST_CROSS_TARGETS[@]}";do + # extracts first element form <LLVM target>:<rust-target>:<CTARGET> + local cross_llvm_target="${cross_target_spec%%:*}" + # extracts toolchain triples, <rust-target>:<CTARGET> + local cross_triples="${cross_target_spec#*:}" + # extracts first element after before : separator + local cross_rust_target="${cross_triples%%:*}" + # extracts last element after : separator + local cross_toolchain="${cross_triples##*:}" + use llvm_targets_${cross_llvm_target} || die "need llvm_targets_${cross_llvm_target} target enabled" + command -v ${cross_toolchain}-gcc > /dev/null 2>&1 || die "need ${cross_toolchain} cross toolchain" + + cat <<- _EOF_ >> "${S}"/config.toml + [target.${cross_rust_target}] + cc = "${cross_toolchain}-gcc" + cxx = "${cross_toolchain}-g++" + linker = "${cross_toolchain}-gcc" + ar = "${cross_toolchain}-ar" + _EOF_ + if use system-llvm; then + cat <<- _EOF_ >> "${S}"/config.toml + llvm-config = "$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config" + _EOF_ + fi + + # append cross target to "normal" target list + # example 'target = ["powerpc64le-unknown-linux-gnu"]' + # becomes 'target = ["powerpc64le-unknown-linux-gnu","aarch64-unknown-linux-gnu"]' + + rust_targets="${rust_targets},\"${cross_rust_target}\"" + sed -i "/^target = \[/ s#\[.*\]#\[${rust_targets}\]#" config.toml || die + + ewarn + ewarn "Enabled ${cross_rust_target} rust target" + ewarn "Using ${cross_toolchain} cross toolchain" + ewarn + if ! has_version -b 'sys-devel/binutils[multitarget]' ; then + ewarn "'sys-devel/binutils[multitarget]' is not installed" + ewarn "'strip' will be unable to strip cross libraries" + ewarn "cross targets will be installed with full debug information" + ewarn "enable 'multitarget' USE flag for binutils to be able to strip object files" + ewarn + ewarn "Alternatively llvm-strip can be used, it supports stripping any target" + ewarn "define STRIP=\"llvm-strip\" to use it (experimental)" + ewarn + fi + done + fi # I_KNOW_WHAT_I_AM_DOING_CROSS + + einfo "Rust configured with the following settings:" + cat "${S}"/config.toml || die +} + +src_compile() { + # we need \n IFS to have config.env with spaces loaded properly. #734018 + ( + IFS=$'\n' + env $(cat "${S}"/config.env) RUST_BACKTRACE=1\ + "${EPYTHON}" ./x.py dist -vv --config="${S}"/config.toml -j$(makeopts_jobs) || die + ) +} + +src_test() { + # https://rustc-dev-guide.rust-lang.org/tests/intro.html + + # those are basic and codegen tests. + local tests=( + codegen + codegen-units + compile-fail + incremental + mir-opt + pretty + run-make + ) + + # fails if llvm is not built with ALL targets. + # and known to fail with system llvm sometimes. + use system-llvm || tests+=( assembly ) + + # fragile/expensive/less important tests + # or tests that require extra builds + # TODO: instead of skipping, just make some nonfatal. + if [[ ${ERUST_RUN_EXTRA_TESTS:-no} != no ]]; then + tests+=( + rustdoc + rustdoc-js + rustdoc-js-std + rustdoc-ui + run-make-fulldeps + ui + ui-fulldeps + ) + fi + + local i failed=() + einfo "rust_src_test: enabled tests ${tests[@]/#/src/test/}" + for i in "${tests[@]}"; do + local t="src/test/${i}" + einfo "rust_src_test: running ${t}" + if ! ( + IFS=$'\n' + env $(cat "${S}"/config.env) RUST_BACKTRACE=1 \ + "${EPYTHON}" ./x.py test -vv --config="${S}"/config.toml \ + -j$(makeopts_jobs) --no-doc --no-fail-fast "${t}" + ) + then + failed+=( "${t}" ) + eerror "rust_src_test: ${t} failed" + fi + done + + if [[ ${#failed[@]} -ne 0 ]]; then + eerror "rust_src_test: failure summary: ${failed[@]}" + die "aborting due to test failures" + fi +} + +src_install() { + # https://github.com/rust-lang/rust/issues/77721 + # also 1.46.0-don-t-create-prefix-at-time-of-check.patch + dodir "/usr/lib/${PN}/${PV}" + ( + IFS=$'\n' + env $(cat "${S}"/config.env) DESTDIR="${D}" \ + "${EPYTHON}" ./x.py install -vv --config="${S}"/config.toml || die + ) + + # bug #689562, #689160 + rm -v "${D}/usr/lib/${PN}/${PV}/etc/bash_completion.d/cargo" || die + rmdir -v "${D}/usr/lib/${PN}/${PV}"/etc{/bash_completion.d,} || die + dobashcomp build/tmp/dist/cargo-image/etc/bash_completion.d/cargo + + local symlinks=( + cargo + rustc + rustdoc + rust-gdb + rust-gdbgui + rust-lldb + ) + + use clippy && symlinks+=( clippy-driver cargo-clippy ) + use miri && symlinks+=( miri cargo-miri ) + use rls && symlinks+=( rls ) + use rustfmt && symlinks+=( rustfmt cargo-fmt ) + + einfo "installing eselect-rust symlinks and paths: ${symlinks[@]}" + local i + for i in "${symlinks[@]}"; do + # we need realpath on /usr/bin/* symlink return version-appended binary path. + # so /usr/bin/rustc should point to /usr/lib/rust/<ver>/bin/rustc-<ver> + # need to fix eselect-rust to remove this hack. + local ver_i="${i}-${PV}" + ln -v "${ED}/usr/lib/${PN}/${PV}/bin/${i}" "${ED}/usr/lib/${PN}/${PV}/bin/${ver_i}" || die + dosym "../lib/${PN}/${PV}/bin/${ver_i}" "/usr/bin/${ver_i}" + done + + # symlinks to switch components to active rust in eselect + dosym "${PV}/lib" "/usr/lib/${PN}/lib-${PV}" + dosym "${PV}/share/man" "/usr/lib/${PN}/man-${PV}" + dosym "rust/${PV}/lib/rustlib" "/usr/lib/rustlib-${PV}" + dosym "../../lib/${PN}/${PV}/share/doc" "/usr/share/doc/${P}" + + newenvd - "50${P}" <<-_EOF_ + LDPATH="${EPREFIX}/usr/lib/rust/lib" + MANPATH="${EPREFIX}/usr/lib/rust/man" + $(usex elibc_musl 'CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="-C target-feature=-crt-static"' '') + _EOF_ + + rm -rf "${ED}/usr/lib/${PN}/${PV}"/*.old || die + rm -rf "${ED}/usr/lib/${PN}/${PV}/doc"/*.old || die + + # note: eselect-rust adds EROOT to all paths below + cat <<-_EOF_ > "${T}/provider-${P}" + /usr/bin/cargo + /usr/bin/rustdoc + /usr/bin/rust-gdb + /usr/bin/rust-gdbgui + /usr/bin/rust-lldb + /usr/lib/rustlib + /usr/lib/rust/lib + /usr/lib/rust/man + /usr/share/doc/rust + _EOF_ + + if use clippy; then + echo /usr/bin/clippy-driver >> "${T}/provider-${P}" + echo /usr/bin/cargo-clippy >> "${T}/provider-${P}" + fi + if use miri; then + echo /usr/bin/miri >> "${T}/provider-${P}" + echo /usr/bin/cargo-miri >> "${T}/provider-${P}" + fi + if use rls; then + echo /usr/bin/rls >> "${T}/provider-${P}" + fi + if use rustfmt; then + echo /usr/bin/rustfmt >> "${T}/provider-${P}" + echo /usr/bin/cargo-fmt >> "${T}/provider-${P}" + fi + + insinto /etc/env.d/rust + doins "${T}/provider-${P}" +} + +pkg_postinst() { + eselect rust update + + if has_version sys-devel/gdb || has_version dev-util/lldb; then + elog "Rust installs a helper script for calling GDB and LLDB," + elog "for your convenience it is installed under /usr/bin/rust-{gdb,lldb}-${PV}." + fi + + if has_version app-editors/emacs; then + elog "install app-emacs/rust-mode to get emacs support for rust." + fi + + if has_version app-editors/gvim || has_version app-editors/vim; then + elog "install app-vim/rust-vim to get vim support for rust." + fi +} + +pkg_postrm() { + eselect rust cleanup +} |