Accepting request 729946 from home:federico-mena:branches:devel:languages:rust

Update for SLE12-SP5

OBS-URL: https://build.opensuse.org/request/show/729946
OBS-URL: https://build.opensuse.org/package/show/devel:languages:rust/rust?expand=0&rev=227
This commit is contained in:
Luke Jones 2019-09-11 20:29:10 +00:00 committed by Git OBS Bridge
parent 00e7250e8a
commit 5d9a019862
3 changed files with 124 additions and 6 deletions

View File

@ -0,0 +1,73 @@
commit 53fe76479aab03b1fbe5b7184f45484886f769b1
Author: Josh Stone <jistone@redhat.com>
Date: Wed Sep 4 16:02:31 2019 -0700
Assume non-git LLVM is fresh if the stamp file exists
Rustbuild usually writes the LLVM submodule commit in a stamp file, so
we can avoid rebuilding it unnecessarily. However, for builds from a
source tarball (non-git), we were assuming a rebuild is always needed.
This can cause a lot of extra work if any environment like `CFLAGS`
changed between steps like build and install, which are often separate
in distro builds.
Now we also write an empty stamp file if the git commit is unknown, and
its presence is trusted to indicate that no rebuild is needed. An info
message reports that this is happening, along with the stamp file path
that can be deleted to force a rebuild anyway.
diff --git a/src/bootstrap/native.rs b/src/bootstrap/native.rs
index f02def3e1b0..7bf9ea2688f 100644
--- a/src/bootstrap/native.rs
+++ b/src/bootstrap/native.rs
@@ -81,26 +81,29 @@ impl Step for Llvm {
(info, "src/llvm-project/llvm", builder.llvm_out(target), dir.join("bin"))
};
- if !llvm_info.is_git() {
- println!(
- "git could not determine the LLVM submodule commit hash. \
- Assuming that an LLVM build is necessary.",
- );
- }
-
let build_llvm_config = llvm_config_ret_dir
.join(exe("llvm-config", &*builder.config.build));
let done_stamp = out_dir.join("llvm-finished-building");
- if let Some(llvm_commit) = llvm_info.sha() {
- if done_stamp.exists() {
+ if done_stamp.exists() {
+ if let Some(llvm_commit) = llvm_info.sha() {
let done_contents = t!(fs::read(&done_stamp));
// If LLVM was already built previously and the submodule's commit didn't change
// from the previous build, then no action is required.
if done_contents == llvm_commit.as_bytes() {
- return build_llvm_config
+ return build_llvm_config;
}
+ } else {
+ builder.info(
+ "Could not determine the LLVM submodule commit hash. \
+ Assuming that an LLVM rebuild is not necessary.",
+ );
+ builder.info(&format!(
+ "To force LLVM to rebuild, remove the file `{}`",
+ done_stamp.display()
+ ));
+ return build_llvm_config;
}
}
@@ -303,9 +306,7 @@ impl Step for Llvm {
cfg.build();
- if let Some(llvm_commit) = llvm_info.sha() {
- t!(fs::write(&done_stamp, llvm_commit));
- }
+ t!(fs::write(&done_stamp, llvm_info.sha().unwrap_or("")));
build_llvm_config
}

View File

@ -1,3 +1,11 @@
-------------------------------------------------------------------
Tue Sep 10 18:11:30 UTC 2019 - federico@suse.com
- Use gcc7 on all of SLE12, since the embedded LLVM wants at least gcc 5.1.
- Add rust-61206-assume-tarball-llvm-is-fresh.patch - Upstream fix to make
LLVM not be rebuilt during the installation phase.
-------------------------------------------------------------------
Wed Aug 28 01:00:37 UTC 2019 - Luke Jones <luke@ljones.dev>

View File

@ -82,8 +82,23 @@
%define codegen_units --set rust.codegen-units=0
%define debug_info --enable-debuginfo --disable-debuginfo-only-std --enable-debuginfo-tools --disable-debuginfo-lines
%endif
# Use hardening ldflags.
%if 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 120500
# Use hardening ldflags, plus link path for gcc7's libstdc++
%global gcc_arch %{_arch}
%ifarch %{ix86}
# This is where gcc7 puts things in 32-bit x86.
%global gcc_arch i586
%endif
%ifarch ppc64le
# This is where gcc7 puts things in ppc64le.
%global gcc_arch powerpc64le
%endif
%global rustflags -Clink-arg=-Wl,-z,relro,-z,now -L%{_libdir}/gcc/%{gcc_arch}-suse-linux/7
%else
# Use hardening ldflags
%global rustflags -Clink-arg=-Wl,-z,relro,-z,now
%endif
# Exclude implicitly-scanned Provides, especially the libLLVM.so ones:
%global __provides_exclude_from ^%{rustlibdir}/.*$
@ -107,6 +122,8 @@ Source107: %{dl_url}/rust-%{version_bootstrap}-s390x-unknown-linux-gnu.tar.
Source108: %{dl_url}/rust-%{version_bootstrap}-powerpc-unknown-linux-gnu.tar.xz
# PATCH-FIX-OPENSUSE: edit src/librustc_llvm/build.rs to ignore GCC incompatible flag
Patch0: ignore-Wstring-conversion.patch
# PATCH-FIX-UPSTREAM: Fix bug with timestamps which caused LLVM to rebuild - https://github.com/rust-lang/rust/issues/61206
Patch1: rust-61206-assume-tarball-llvm-is-fresh.patch
BuildRequires: ccache
# Leap 42 to 42.3, SLE12 SP1, SP2
%if 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 120200
@ -118,7 +135,13 @@ BuildRequires: cmake
%endif
BuildRequires: curl
BuildRequires: fdupes
# In all of SLE12, the default gcc is 4.8. Rust's LLVM wants 5.1 at least.
# So, we'll just use gcc7.
%if 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 120500
BuildRequires: gcc7-c++
%else
BuildRequires: gcc-c++
%endif
BuildRequires: git
BuildRequires: pkgconfig
BuildRequires: procps
@ -127,7 +150,7 @@ BuildRequires: pkgconfig(libcurl)
# The following requires must mirror:
# LIBGIT2_SYS_USE_PKG_CONFIG &&
# LIBSSH2_SYS_USE_PKG_CONFIG
%if !%with rust_bootstrap || 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 120400
%if !%with rust_bootstrap || 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 120500
BuildRequires: pkgconfig(libgit2) >= 0.23
BuildRequires: pkgconfig(libssh2) >= 1.4.3
%endif
@ -352,6 +375,7 @@ This package includes HTML documentation for Cargo.
%setup -q -n rustc-%{version}-src
%patch0 -p1
%patch1 -p1
# use python3
sed -i -e "1s|#!.*|#!%{_bindir}/python3|" x.py
@ -427,14 +451,19 @@ fi
# If the environments between build and install and different,
# everything will be rebuilt during installation!
export RUSTFLAGS="%{rustflags}"
%if 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 120500
export CC=gcc-7
export CXX=g++-7
%endif
# Cargo use system libs if not bootstrapping
# restircted only to libgit due to version changes causing with cargo rpm deps
%if !%with rust_bootstrap || 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 120400
%if !%with rust_bootstrap || 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 120500
export LIBGIT2_SYS_USE_PKG_CONFIG=1
export LIBSSH2_SYS_USE_PKG_CONFIG=1
%endif
# eliminate complain from RPMlint
export CPPFLAGS="%{optflags}"
export DESTDIR=%{buildroot}
# END EXPORTS
./x.py build -v
@ -448,18 +477,23 @@ export CPPFLAGS="%{optflags}"
# If the environments between build and install and different,
# everything will be rebuilt during installation!
export RUSTFLAGS="%{rustflags}"
%if 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 120500
export CC=gcc-7
export CXX=g++-7
%endif
# Cargo use system libs if not bootstrapping
# restircted only to libgit due to version changes causing with cargo rpm deps
%if !%with rust_bootstrap || 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 120400
%if !%with rust_bootstrap || 0%{?sle_version} >= 120000 && 0%{?sle_version} <= 120500
export LIBGIT2_SYS_USE_PKG_CONFIG=1
export LIBSSH2_SYS_USE_PKG_CONFIG=1
%endif
# eliminate complain from RPMlint
export CPPFLAGS="%{optflags}"
export DESTDIR=%{buildroot}
# END EXPORTS
DESTDIR=%{buildroot} ./x.py install
DESTDIR=%{buildroot} ./x.py install src
./x.py install
./x.py install src
# Remove executable permission from HTML documentation
# to prevent RPMLINT errors.
@ -501,6 +535,9 @@ install -D %{buildroot}%{_sysconfdir}/bash_completion.d/cargo %{buildroot}%{_dat
# There should be nothing here at all
rm -rf %{buildroot}%{_sysconfdir}
# Remove llvm installation
rm -rf %{buildroot}/home
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig