public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] repo/proj/rust:master commit in: dev-lang/rust/, dev-lang/rust/files/, virtual/rust/
@ 2020-09-01  6:09 Mikhail Pukhlikov
  0 siblings, 0 replies; only message in thread
From: Mikhail Pukhlikov @ 2020-09-01  6:09 UTC (permalink / raw
  To: gentoo-commits

commit:     cc2208c51917e8e0ce9104f5d79a3100fc504dd4
Author:     o01eg <o01eg <AT> yandex <DOT> ru>
AuthorDate: Mon Aug 31 19:06:38 2020 +0000
Commit:     Mikhail Pukhlikov <cynede <AT> gentoo <DOT> org>
CommitDate: Tue Sep  1 06:09:22 2020 +0000
URL:        https://gitweb.gentoo.org/repo/proj/rust.git/commit/?id=cc2208c5

Update dev-lang/rust-9999 and virtual/rust-9999

Closes: https://github.com/gentoo/gentoo-rust/pull/501
Signed-off-by: Mikhail Pukhlikov <cynede <AT> gentoo.org>

 dev-lang/rust/files/1.43.1-fix-libdir.patch |  70 ----------
 dev-lang/rust/rust-9999.ebuild              | 191 +++++++++++++++++++++-------
 virtual/rust/rust-9999.ebuild               |  10 +-
 3 files changed, 152 insertions(+), 119 deletions(-)

diff --git a/dev-lang/rust/files/1.43.1-fix-libdir.patch b/dev-lang/rust/files/1.43.1-fix-libdir.patch
deleted file mode 100644
index e1dccf3..0000000
--- a/dev-lang/rust/files/1.43.1-fix-libdir.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs
-index eb0199fd020..c33657549ba 100644
---- a/src/bootstrap/builder.rs
-+++ b/src/bootstrap/builder.rs
-@@ -646,6 +646,7 @@ impl<'a> Builder<'a> {
-     pub fn sysroot_libdir_relative(&self, compiler: Compiler) -> &Path {
-         match self.config.libdir_relative() {
-             Some(relative_libdir) if compiler.stage >= 1 => relative_libdir,
-+            _ if compiler.stage == 0 => &self.build.initial_libdir,
-             _ => Path::new("lib"),
-         }
-     }
-diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs
-index a476d25f102..7fe4496ca45 100644
---- a/src/bootstrap/lib.rs
-+++ b/src/bootstrap/lib.rs
-@@ -242,6 +242,7 @@ pub struct Build {
-     initial_rustc: PathBuf,
-     initial_cargo: PathBuf,
-     initial_lld: PathBuf,
-+    initial_libdir: PathBuf,
- 
-     // Runtime state filled in later on
-     // C/C++ compilers and archiver for all targets
-@@ -343,18 +344,38 @@ impl Build {
-         // we always try to use git for LLVM builds
-         let in_tree_llvm_info = channel::GitInfo::new(false, &src.join("src/llvm-project"));
- 
--        let initial_sysroot = config.initial_rustc.parent().unwrap().parent().unwrap();
--        let initial_lld = initial_sysroot
--            .join("lib")
--            .join("rustlib")
--            .join(config.build)
--            .join("bin")
--            .join("rust-lld");
-+        let initial_target_libdir_str = output(
-+            Command::new(&config.initial_rustc)
-+                .arg("--target")
-+                .arg(config.build)
-+                .arg("--print")
-+                .arg("target-libdir"),
-+        );
-+        let initial_target_dir = Path::new(&initial_target_libdir_str).parent().unwrap();
-+        let initial_lld = initial_target_dir.join("bin").join("rust-lld");
-+
-+        let initial_sysroot = output(
-+            Command::new(&config.initial_rustc)
-+                .arg("--print")
-+                .arg("sysroot"),
-+        );
-+        println!("stage0 sysroot: {}", initial_sysroot);
-+        let initial_libdir_full = initial_target_dir
-+            .parent()
-+            .unwrap()
-+            .parent()
-+            .unwrap();
-+        println!("stage0 libdir: {}", initial_libdir_full.display());
-+        let initial_libdir = initial_libdir_full
-+            .strip_prefix(initial_sysroot.trim())
-+            .unwrap()
-+            .to_path_buf();
- 
-         let mut build = Build {
-             initial_rustc: config.initial_rustc.clone(),
-             initial_cargo: config.initial_cargo.clone(),
-             initial_lld,
-+            initial_libdir,
-             local_rebuild: config.local_rebuild,
-             fail_fast: config.cmd.fail_fast(),
-             doc_tests: config.cmd.doc_tests(),

diff --git a/dev-lang/rust/rust-9999.ebuild b/dev-lang/rust/rust-9999.ebuild
index b96c023..ab98c35 100644
--- a/dev-lang/rust/rust-9999.ebuild
+++ b/dev-lang/rust/rust-9999.ebuild
@@ -50,12 +50,24 @@ LLVM_DEPEND="
 "
 LLVM_MAX_SLOT=10
 
-# libgit2 should be at least same as bungled into libgit-sys #707746
-COMMON_DEPEND="
+BDEPEND="${PYTHON_DEPS}
+	app-eselect/eselect-rust
+	|| (
+		>=sys-devel/gcc-4.7
+		>=sys-devel/clang-3.5
+	)
+	!system-llvm? (
+		dev-util/cmake
+		dev-util/ninja
+	)
+"
+
+# libgit2 should be at least same as bundled into libgit-sys #707746
+DEPEND="
 	>=dev-libs/libgit2-0.99:=
 	net-libs/libssh2:=
 	net-libs/http-parser:=
-	net-misc/curl:=[ssl]
+	net-misc/curl:=[http2,ssl]
 	sys-libs/zlib:=
 	!libressl? ( dev-libs/openssl:0= )
 	libressl? ( dev-libs/libressl:0= )
@@ -65,20 +77,8 @@ COMMON_DEPEND="
 	)
 "
 
-DEPEND="${COMMON_DEPEND}
-	${PYTHON_DEPS}
-	|| (
-		>=sys-devel/gcc-4.7
-		>=sys-devel/clang-3.5
-	)
-	!system-llvm? (
-		dev-util/cmake
-		dev-util/ninja
-	)
-"
-
-RDEPEND="${COMMON_DEPEND}
-	>=app-eselect/eselect-rust-20190311
+RDEPEND="${DEPEND}
+	app-eselect/eselect-rust
 "
 
 REQUIRED_USE="|| ( ${ALL_LLVM_TARGETS[*]} )
@@ -87,22 +87,25 @@ REQUIRED_USE="|| ( ${ALL_LLVM_TARGETS[*]} )
 	?? ( system-llvm sanitize )
 "
 
+# we don't use cmake.eclass, but can get a warnin -l
+CMAKE_WARN_UNUSED_CLI=no
+
 QA_FLAGS_IGNORED="
 	usr/bin/.*-${PV}
-	usr/lib.*/lib.*.so
-	usr/lib.*/${P}/rustlib/.*/codegen-backends/librustc_codegen_llvm-llvm.so
-	usr/lib.*/${P}/rustlib/.*/lib/lib.*.so
+	usr/lib.*/${P}/lib.*.so.*
+	usr/lib.*/${P}/rustlib/.*/bin/.*
+	usr/lib.*/${P}/rustlib/.*/lib/lib.*.so.*
+"
+
+QA_SONAME="
+	usr/lib.*/${P}/lib.*.so.*
+	usr/lib.*/${P}/rustlib/.*/lib/lib.*.so.*
 "
 
 # tests need a bit more work, currently they are causing multiple
 # re-compilations and somewhat fragile.
 RESTRICT="test network-sandbox"
 
-QA_SONAME="usr/lib.*/librustc_macros.*.so"
-
-PATCHES=(
-	"${FILESDIR}"/1.43.1-fix-libdir.patch
-)
 
 S="${WORKDIR}/${MY_P}-src"
 
@@ -111,13 +114,21 @@ toml_usex() {
 }
 
 pre_build_checks() {
-	CHECKREQS_DISK_BUILD="9G"
+	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
-		CHECKREQS_DISK_BUILD="15G"
+		M=$(( 15 * ${M} / 10 ))
 	fi
 	eshopts_pop
-	check-reqs_pkg_setup
+	M=$(( $(usex doc 256 0) + ${M} ))
+	CHECKREQS_DISK_BUILD=${M}M check-reqs_pkg_${EBUILD_PHASE}
 }
 
 pkg_pretend() {
@@ -167,6 +178,11 @@ src_configure() {
 	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#,}"
 
@@ -184,8 +200,6 @@ src_configure() {
 		tools="\"rustfmt\",$tools"
 	fi
 
-	local rust_stage0_root="${WORKDIR}"/rust-stage0
-
 	rust_target="$(rust_abi)"
 
 	cat <<- EOF > "${S}"/config.toml
@@ -274,6 +288,83 @@ src_configure() {
 		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
 }
@@ -300,8 +391,6 @@ src_test() {
 }
 
 src_install() {
-	local rust_target abi_libdir
-
 	env $(cat "${S}"/config.env) DESTDIR="${D}" \
 		"${EPYTHON}" ./x.py install -vv --config="${S}"/config.toml -j$(makeopts_jobs) || die
 
@@ -311,8 +400,8 @@ src_install() {
 	dobashcomp build/tmp/dist/cargo-image/etc/bash_completion.d/cargo
 
 	# fix collision with stable rust #675026
-	rmdir "${ED}"/usr/share/bash-completion/completions/cargo || die
-	rmdir "${ED}"/usr/share/zsh/site-functions/_cargo || die
+	rm "${ED}"/usr/share/bash-completion/completions/cargo || die
+	rm "${ED}"/usr/share/zsh/site-functions/_cargo || die
 
 	mv "${ED}/usr/bin/rustc" "${ED}/usr/bin/rustc-${PV}" || die
 	mv "${ED}/usr/bin/rustdoc" "${ED}/usr/bin/rustdoc-${PV}" || die
@@ -336,22 +425,34 @@ src_install() {
 		mv "${ED}/usr/bin/cargo-fmt" "${ED}/usr/bin/cargo-fmt-${PV}" || die
 	fi
 
+	# Copy shared library versions of standard libraries for all targets
+	# into the system's abi-dependent lib directories because the rust
+	# installer only does so for the native ABI.
+
+	local abi_libdir rust_target
+	for v in $(multilib_get_enabled_abi_pairs); do
+		if [ ${v##*.} = ${DEFAULT_ABI} ]; then
+			continue
+		fi
+		abi_libdir=$(get_abi_LIBDIR ${v##*.})
+		rust_target=$(rust_abi $(get_abi_CHOST ${v##*.}))
+		mkdir -p "${ED}/usr/${abi_libdir}/${P}"
+		cp "${ED}/usr/$(get_libdir)/${P}/rustlib/${rust_target}/lib"/*.so \
+		   "${ED}/usr/${abi_libdir}/${P}" || die
+	done
+
+	# versioned libdir/mandir support
+	newenvd - "50${P}" <<-_EOF_
+		LDPATH="${EPREFIX}/usr/$(get_libdir)/${P}"
+		MANPATH="${EPREFIX}/usr/share/${P}/man"
+	_EOF_
+
 	dodoc COPYRIGHT
+	rm -rf "${ED}/usr/$(get_libdir)/${P}"/*.old || die
 	rm "${ED}/usr/share/doc/${P}"/*.old || die
 	rm "${ED}/usr/share/doc/${P}/LICENSE-APACHE" || die
 	rm "${ED}/usr/share/doc/${P}/LICENSE-MIT" || die
 
-	cat <<-EOF > "${T}"/50${P}
-		LDPATH="${EPREFIX}/usr/$(get_libdir)/${P}"
-		MANPATH="${EPREFIX}/usr/share/${P}/man"
-	EOF
-	if use rls; then
-		cat <<-EOF >> "${T}"/50${P}
-		RUST_SRC_PATH="${EPREFIX}/usr/lib/${P}/rustlib/src/rust/src/"
-		EOF
-	fi
-	doenvd "${T}"/50${P}
-
 	# note: eselect-rust adds EROOT to all paths below
 	cat <<-EOF > "${T}/provider-${P}"
 		/usr/bin/cargo

diff --git a/virtual/rust/rust-9999.ebuild b/virtual/rust/rust-9999.ebuild
index 8e78f71..3627fb6 100644
--- a/virtual/rust/rust-9999.ebuild
+++ b/virtual/rust/rust-9999.ebuild
@@ -1,7 +1,9 @@
-# Copyright 1999-2018 Gentoo Foundation
+# Copyright 1999-2020 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
-EAPI="6"
+EAPI=7
+
+inherit multilib-build
 
 DESCRIPTION="Virtual for Rust language compiler"
 HOMEPAGE=""
@@ -11,5 +13,5 @@ LICENSE=""
 SLOT="0"
 KEYWORDS=""
 
-DEPEND=""
-RDEPEND="|| ( =dev-lang/rust-${PV}* =dev-lang/rust-bin-${PV}* )"
+BDEPEND=""
+RDEPEND="|| ( =dev-lang/rust-${PVR}*[${MULTILIB_USEDEP}] =dev-lang/rust-bin-${PV}*[${MULTILIB_USEDEP}] )"


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2020-09-01  6:09 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-09-01  6:09 [gentoo-commits] repo/proj/rust:master commit in: dev-lang/rust/, dev-lang/rust/files/, virtual/rust/ Mikhail Pukhlikov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox