!10 Upgrade rust from 1.29 to 1.45

From: @jeff200902
Reviewed-by: @doraemon2020
Signed-off-by: @doraemon2020
This commit is contained in:
openeuler-ci-bot 2020-10-13 09:52:30 +08:00 committed by Gitee
commit e8b439f0b5
4 changed files with 291 additions and 512 deletions

View File

@ -1,186 +0,0 @@
From 4b95b1a4fd035a73998dc21b265ce4594e35f8ae Mon Sep 17 00:00:00 2001
From: Alex Crichton <alex@alexcrichton.com>
Date: Thu, 16 Aug 2018 13:19:04 -0700
Subject: [PATCH] Set more llvm function attributes for __rust_try
This shim is generated elsewhere in the compiler so this commit adds support to
ensure it goes through similar paths as the rest of the compiler to set llvm
function attributes like target features.
cc #53372
---
src/librustc_codegen_llvm/attributes.rs | 52 +++++++++++++++++++------
src/librustc_codegen_llvm/base.rs | 21 ----------
src/librustc_codegen_llvm/callee.rs | 2 +-
src/librustc_codegen_llvm/intrinsic.rs | 2 +
src/librustc_codegen_llvm/mono_item.rs | 2 +-
5 files changed, 44 insertions(+), 35 deletions(-)
diff --git a/src/librustc_codegen_llvm/attributes.rs b/src/librustc_codegen_llvm/attributes.rs
index 3b5f927d52f0..2a79ce2f2285 100644
--- a/src/librustc_codegen_llvm/attributes.rs
+++ b/src/librustc_codegen_llvm/attributes.rs
@@ -11,7 +11,7 @@
use std::ffi::{CStr, CString};
-use rustc::hir::CodegenFnAttrFlags;
+use rustc::hir::{CodegenFnAttrFlags, CodegenFnAttrs};
use rustc::hir::def_id::{DefId, LOCAL_CRATE};
use rustc::session::Session;
use rustc::session::config::Sanitizer;
@@ -123,11 +123,37 @@ pub fn llvm_target_features(sess: &Session) -> impl Iterator<Item = &str> {
/// Composite function which sets LLVM attributes for function depending on its AST (#[attribute])
/// attributes.
-pub fn from_fn_attrs(cx: &CodegenCx, llfn: ValueRef, id: DefId) {
- let codegen_fn_attrs = cx.tcx.codegen_fn_attrs(id);
+pub fn from_fn_attrs(
+ cx: &CodegenCx,
+ llfn: ValueRef,
+ id: Option<DefId>,
+) {
+ let codegen_fn_attrs = id.map(|id| cx.tcx.codegen_fn_attrs(id))
+ .unwrap_or(CodegenFnAttrs::new());
inline(llfn, codegen_fn_attrs.inline);
+ // The `uwtable` attribute according to LLVM is:
+ //
+ // This attribute indicates that the ABI being targeted requires that an
+ // unwind table entry be produced for this function even if we can show
+ // that no exceptions passes by it. This is normally the case for the
+ // ELF x86-64 abi, but it can be disabled for some compilation units.
+ //
+ // Typically when we're compiling with `-C panic=abort` (which implies this
+ // `no_landing_pads` check) we don't need `uwtable` because we can't
+ // generate any exceptions! On Windows, however, exceptions include other
+ // events such as illegal instructions, segfaults, etc. This means that on
+ // Windows we end up still needing the `uwtable` attribute even if the `-C
+ // panic=abort` flag is passed.
+ //
+ // You can also find more info on why Windows is whitelisted here in:
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1302078
+ if !cx.sess().no_landing_pads() ||
+ cx.sess().target.target.options.requires_uwtable {
+ attributes::emit_uwtable(llfn, true);
+ }
+
set_frame_pointer_elimination(cx, llfn);
set_probestack(cx, llfn);
@@ -151,7 +177,7 @@ pub fn from_fn_attrs(cx: &CodegenCx, llfn: ValueRef, id: DefId) {
// *in Rust code* may unwind. Foreign items like `extern "C" {
// fn foo(); }` are assumed not to unwind **unless** they have
// a `#[unwind]` attribute.
- } else if !cx.tcx.is_foreign_item(id) {
+ } else if id.map(|id| !cx.tcx.is_foreign_item(id)).unwrap_or(false) {
Some(true)
} else {
None
@@ -188,14 +214,16 @@ pub fn from_fn_attrs(cx: &CodegenCx, llfn: ValueRef, id: DefId) {
// Note that currently the `wasm-import-module` doesn't do anything, but
// eventually LLVM 7 should read this and ferry the appropriate import
// module to the output file.
- if cx.tcx.sess.target.target.arch == "wasm32" {
- if let Some(module) = wasm_import_module(cx.tcx, id) {
- llvm::AddFunctionAttrStringValue(
- llfn,
- llvm::AttributePlace::Function,
- cstr("wasm-import-module\0"),
- &module,
- );
+ if let Some(id) = id {
+ if cx.tcx.sess.target.target.arch == "wasm32" {
+ if let Some(module) = wasm_import_module(cx.tcx, id) {
+ llvm::AddFunctionAttrStringValue(
+ llfn,
+ llvm::AttributePlace::Function,
+ cstr("wasm-import-module\0"),
+ &module,
+ );
+ }
}
}
}
diff --git a/src/librustc_codegen_llvm/base.rs b/src/librustc_codegen_llvm/base.rs
index 223c04f420f3..b0461582ddcb 100644
--- a/src/librustc_codegen_llvm/base.rs
+++ b/src/librustc_codegen_llvm/base.rs
@@ -486,27 +486,6 @@ pub fn codegen_instance<'a, 'tcx>(cx: &CodegenCx<'a, 'tcx>, instance: Instance<'
cx.stats.borrow_mut().n_closures += 1;
- // The `uwtable` attribute according to LLVM is:
- //
- // This attribute indicates that the ABI being targeted requires that an
- // unwind table entry be produced for this function even if we can show
- // that no exceptions passes by it. This is normally the case for the
- // ELF x86-64 abi, but it can be disabled for some compilation units.
- //
- // Typically when we're compiling with `-C panic=abort` (which implies this
- // `no_landing_pads` check) we don't need `uwtable` because we can't
- // generate any exceptions! On Windows, however, exceptions include other
- // events such as illegal instructions, segfaults, etc. This means that on
- // Windows we end up still needing the `uwtable` attribute even if the `-C
- // panic=abort` flag is passed.
- //
- // You can also find more info on why Windows is whitelisted here in:
- // https://bugzilla.mozilla.org/show_bug.cgi?id=1302078
- if !cx.sess().no_landing_pads() ||
- cx.sess().target.target.options.requires_uwtable {
- attributes::emit_uwtable(lldecl, true);
- }
-
let mir = cx.tcx.instance_mir(instance.def);
mir::codegen_mir(cx, lldecl, &mir, instance, sig);
}
diff --git a/src/librustc_codegen_llvm/callee.rs b/src/librustc_codegen_llvm/callee.rs
index 2c01bd42cc77..97f07792ede8 100644
--- a/src/librustc_codegen_llvm/callee.rs
+++ b/src/librustc_codegen_llvm/callee.rs
@@ -97,7 +97,7 @@ pub fn get_fn<'a, 'tcx>(cx: &CodegenCx<'a, 'tcx>,
if instance.def.is_inline(tcx) {
attributes::inline(llfn, attributes::InlineAttr::Hint);
}
- attributes::from_fn_attrs(cx, llfn, instance.def.def_id());
+ attributes::from_fn_attrs(cx, llfn, Some(instance.def.def_id()));
let instance_def_id = instance.def_id();
diff --git a/src/librustc_codegen_llvm/intrinsic.rs b/src/librustc_codegen_llvm/intrinsic.rs
index 9c5c0f730c16..f69fce15dc55 100644
--- a/src/librustc_codegen_llvm/intrinsic.rs
+++ b/src/librustc_codegen_llvm/intrinsic.rs
@@ -10,6 +10,7 @@
#![allow(non_upper_case_globals)]
+use attributes;
use intrinsics::{self, Intrinsic};
use llvm;
use llvm::{ValueRef};
@@ -936,6 +937,7 @@ fn gen_fn<'a, 'tcx>(cx: &CodegenCx<'a, 'tcx>,
Abi::Rust
)));
let llfn = declare::define_internal_fn(cx, name, rust_fn_ty);
+ attributes::from_fn_attrs(cx, llfn, None);
let bx = Builder::new_block(cx, llfn, "entry-block");
codegen(bx);
llfn
diff --git a/src/librustc_codegen_llvm/mono_item.rs b/src/librustc_codegen_llvm/mono_item.rs
index a528008e3b4b..32d8b24e3c15 100644
--- a/src/librustc_codegen_llvm/mono_item.rs
+++ b/src/librustc_codegen_llvm/mono_item.rs
@@ -183,7 +183,7 @@ fn predefine_fn<'a, 'tcx>(cx: &CodegenCx<'a, 'tcx>,
if instance.def.is_inline(cx.tcx) {
attributes::inline(lldecl, attributes::InlineAttr::Hint);
}
- attributes::from_fn_attrs(cx, lldecl, instance.def.def_id());
+ attributes::from_fn_attrs(cx, lldecl, Some(instance.def.def_id()));
cx.instances.borrow_mut().insert(instance, lldecl);
}
--
2.17.1

View File

@ -1,122 +0,0 @@
From f4e8d57b6ad6f599de54c020ba185db83cb011a3 Mon Sep 17 00:00:00 2001
From: Josh Stone <jistone@redhat.com>
Date: Thu, 16 Aug 2018 11:26:27 -0700
Subject: [PATCH] std: stop backtracing when the frames are full
---
src/libstd/sys/cloudabi/backtrace.rs | 18 ++++++++++--------
src/libstd/sys/redox/backtrace/tracing.rs | 18 ++++++++++--------
src/libstd/sys/unix/backtrace/tracing/gcc_s.rs | 18 ++++++++++--------
3 files changed, 30 insertions(+), 24 deletions(-)
diff --git a/src/libstd/sys/cloudabi/backtrace.rs b/src/libstd/sys/cloudabi/backtrace.rs
index 1b970187558c..2c43b5937ce5 100644
--- a/src/libstd/sys/cloudabi/backtrace.rs
+++ b/src/libstd/sys/cloudabi/backtrace.rs
@@ -64,6 +64,10 @@ extern "C" fn trace_fn(
arg: *mut libc::c_void,
) -> uw::_Unwind_Reason_Code {
let cx = unsafe { &mut *(arg as *mut Context) };
+ if cx.idx >= cx.frames.len() {
+ return uw::_URC_NORMAL_STOP;
+ }
+
let mut ip_before_insn = 0;
let mut ip = unsafe { uw::_Unwind_GetIPInfo(ctx, &mut ip_before_insn) as *mut libc::c_void };
if !ip.is_null() && ip_before_insn == 0 {
@@ -73,14 +77,12 @@ extern "C" fn trace_fn(
}
let symaddr = unsafe { uw::_Unwind_FindEnclosingFunction(ip) };
- if cx.idx < cx.frames.len() {
- cx.frames[cx.idx] = Frame {
- symbol_addr: symaddr as *mut u8,
- exact_position: ip as *mut u8,
- inline_context: 0,
- };
- cx.idx += 1;
- }
+ cx.frames[cx.idx] = Frame {
+ symbol_addr: symaddr as *mut u8,
+ exact_position: ip as *mut u8,
+ inline_context: 0,
+ };
+ cx.idx += 1;
uw::_URC_NO_REASON
}
diff --git a/src/libstd/sys/redox/backtrace/tracing.rs b/src/libstd/sys/redox/backtrace/tracing.rs
index bb70ca360370..c0414b78f8d6 100644
--- a/src/libstd/sys/redox/backtrace/tracing.rs
+++ b/src/libstd/sys/redox/backtrace/tracing.rs
@@ -68,6 +68,10 @@ pub fn unwind_backtrace(frames: &mut [Frame])
extern fn trace_fn(ctx: *mut uw::_Unwind_Context,
arg: *mut libc::c_void) -> uw::_Unwind_Reason_Code {
let cx = unsafe { &mut *(arg as *mut Context) };
+ if cx.idx >= cx.frames.len() {
+ return uw::_URC_NORMAL_STOP;
+ }
+
let mut ip_before_insn = 0;
let mut ip = unsafe {
uw::_Unwind_GetIPInfo(ctx, &mut ip_before_insn) as *mut libc::c_void
@@ -94,14 +98,12 @@ extern fn trace_fn(ctx: *mut uw::_Unwind_Context,
unsafe { uw::_Unwind_FindEnclosingFunction(ip) }
};
- if cx.idx < cx.frames.len() {
- cx.frames[cx.idx] = Frame {
- symbol_addr: symaddr as *mut u8,
- exact_position: ip as *mut u8,
- inline_context: 0,
- };
- cx.idx += 1;
- }
+ cx.frames[cx.idx] = Frame {
+ symbol_addr: symaddr as *mut u8,
+ exact_position: ip as *mut u8,
+ inline_context: 0,
+ };
+ cx.idx += 1;
uw::_URC_NO_REASON
}
diff --git a/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs b/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs
index 1b92fc0e6ad0..6e8415686792 100644
--- a/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs
+++ b/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs
@@ -68,6 +68,10 @@ pub fn unwind_backtrace(frames: &mut [Frame])
extern fn trace_fn(ctx: *mut uw::_Unwind_Context,
arg: *mut libc::c_void) -> uw::_Unwind_Reason_Code {
let cx = unsafe { &mut *(arg as *mut Context) };
+ if cx.idx >= cx.frames.len() {
+ return uw::_URC_NORMAL_STOP;
+ }
+
let mut ip_before_insn = 0;
let mut ip = unsafe {
uw::_Unwind_GetIPInfo(ctx, &mut ip_before_insn) as *mut libc::c_void
@@ -94,14 +98,12 @@ extern fn trace_fn(ctx: *mut uw::_Unwind_Context,
unsafe { uw::_Unwind_FindEnclosingFunction(ip) }
};
- if cx.idx < cx.frames.len() {
- cx.frames[cx.idx] = Frame {
- symbol_addr: symaddr as *mut u8,
- exact_position: ip as *mut u8,
- inline_context: 0,
- };
- cx.idx += 1;
- }
+ cx.frames[cx.idx] = Frame {
+ symbol_addr: symaddr as *mut u8,
+ exact_position: ip as *mut u8,
+ inline_context: 0,
+ };
+ cx.idx += 1;
uw::_URC_NO_REASON
}
--
2.17.1

View File

@ -1,26 +0,0 @@
From 1ea2765918d1212a07e1359537470c477d82a681 Mon Sep 17 00:00:00 2001
From: Josh Stone <jistone@redhat.com>
Date: Mon, 30 Jul 2018 13:08:56 -0700
Subject: [PATCH] run-pass/const-endianness: negate before to_le()
`const LE_I128` needs parentheses to negate the value *before* calling
`to_le()`, otherwise it doesn't match the operations performed in the
black-boxed part of the test. This only makes a tangible difference on
big-endian targets.
---
src/test/run-pass/const-endianess.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/test/run-pass/const-endianess.rs b/src/test/run-pass/const-endianess.rs
index fa34b49210a6..95c738d3ec49 100644
--- a/src/test/run-pass/const-endianess.rs
+++ b/src/test/run-pass/const-endianess.rs
@@ -25,7 +25,7 @@ fn main() {
#[cfg(not(target_arch = "asmjs"))]
{
const BE_U128: u128 = 999999u128.to_be();
- const LE_I128: i128 = -999999i128.to_le();
+ const LE_I128: i128 = (-999999i128).to_le();
assert_eq!(BE_U128, b(999999u128).to_be());
assert_eq!(LE_I128, b(-999999i128).to_le());
}

469
rust.spec
View File

@ -1,226 +1,327 @@
%global rustlibdir %{_prefix}/lib/rustlib %{!?channel: %global channel stable}
%global rust_triple %{_target_cpu}-unknown-linux-gnu %global bootstrap_rust 1.44.0
%global bootstrap_cargo 1.44.0
%global bootstrap_channel 1.44.0
%global bootstrap_date 2020-06-04
%bcond_with llvm_static
%bcond_with bundled_llvm
%bcond_without bundled_libgit2
Name: rust
Version: 1.45.2
Release: 1
Summary: The Rust Programming Language
License: (ASL 2.0 or MIT) and (BSD and MIT)
URL: https://www.rust-lang.org
%if "%{channel}" == "stable"
%global rustc_package rustc-%{version}-src
%else
%global rustc_package rustc-%{channel}-src
%endif
Source0: https://static.rust-lang.org/dist/%{rustc_package}.tar.xz
%{lua: function rust_triple(arch)
local abi = "gnu"
if arch == "armv7hl" then
arch = "armv7"
abi = "gnueabihf"
elseif arch == "ppc64" then
arch = "powerpc64"
elseif arch == "ppc64le" then
arch = "powerpc64le"
end
return arch.."-unknown-linux-"..abi
end}
%global rust_triple %{lua: print(rust_triple(rpm.expand("%{_target_cpu}")))}
%if %defined bootstrap_arches
%{lua: do
local bootstrap_arches = {}
for arch in string.gmatch(rpm.expand("%{bootstrap_arches}"), "%S+") do
table.insert(bootstrap_arches, arch)
end
local base = rpm.expand("https://static.rust-lang.org/dist/%{bootstrap_date}"
.."/rust-%{bootstrap_channel}")
local target_arch = rpm.expand("%{_target_cpu}")
for i, arch in ipairs(bootstrap_arches) do
print(string.format("Source%d: %s-%s.tar.xz\n",
i, base, rust_triple(arch)))
if arch == target_arch then
rpm.define("bootstrap_source "..i)
end
end
end}
%endif
%ifarch %{bootstrap_arches}
%global bootstrap_root rust-%{bootstrap_channel}-%{rust_triple}
%global local_rust_root %{_builddir}/%{bootstrap_root}/usr
Provides: bundled(%{name}-bootstrap) = %{bootstrap_rust}
%else
BuildRequires: cargo >= %{bootstrap_cargo}
BuildRequires: (%{name} >= %{bootstrap_rust} with %{name} <= %{version})
%global local_rust_root %{_prefix}
%endif
BuildRequires: make gcc gcc-c++ ncurses-devel curl pkgconfig(libcurl) pkgconfig(liblzma)
BuildRequires: pkgconfig(openssl) pkgconfig(zlib) pkgconfig(libssh2) >= 1.6.0
%global python python3
BuildRequires: %{python}
%if %with bundled_llvm
BuildRequires: cmake3 >= 3.4.3
Provides: bundled(llvm) = 10.0.1
%else
BuildRequires: cmake >= 2.8.11
%if %defined llvm
%global llvm_root %{_libdir}/%{llvm}
%else
%global llvm llvm
%global llvm_root %{_prefix}
%endif
BuildRequires: %{llvm}-devel >= 8.0
%if %with llvm_static
BuildRequires: %{llvm}-static libffi-devel
%endif
%endif
BuildRequires: procps-ng gdb
Provides: bundled(libbacktrace) = 1.0.20200219
Provides: rustc = %{version}-%{release}
Provides: rustc%{?_isa} = %{version}-%{release}
Requires: %{name}-std-static%{?_isa} = %{version}-%{release}
Requires: /usr/bin/cc
%global _privatelibs lib(.*-[[:xdigit:]]{16}*|rustc.*)[.]so.* %global _privatelibs lib(.*-[[:xdigit:]]{16}*|rustc.*)[.]so.*
%global __provides_exclude ^(%{_privatelibs})$ %global __provides_exclude ^(%{_privatelibs})$
%global __requires_exclude ^(%{_privatelibs})$ %global __requires_exclude ^(%{_privatelibs})$
%global __provides_exclude_from ^(%{_docdir}|%{rustlibdir}/src)/.*$ %global __provides_exclude_from ^(%{_docdir}|%{rustlibdir}/src)/.*$
%global __requires_exclude_from ^(%{_docdir}|%{rustlibdir}/src)/.*$ %global __requires_exclude_from ^(%{_docdir}|%{rustlibdir}/src)/.*$
%global _find_debuginfo_opts --keep-section .rustc %global _find_debuginfo_opts --keep-section .rustc
%bcond_with bundled_llvm %global rustflags -Clink-arg=-Wl,-z,relro,-z,now
%global llvm_root %{_prefix} %if %{without bundled_llvm}
%if "%{llvm_root}" == "%{_prefix}" || 0%{?scl:1}
Name: rust %global llvm_has_filecheck 1
Version: 1.29.1 %endif
Release: 4 %endif
Summary: A systems programming language
License: (ASL 2.0 or MIT) and (BSD and MIT)
URL: https://www.rust-lang.org
Source0: https://static.rust-lang.org/dist/rustc-1.29.1-src.tar.xz
Patch0000: rust-52876-const-endianess.patch
Patch0001: 0001-std-stop-backtracing-when-the-frames-are-full.patch
Patch0002: 0001-Set-more-llvm-function-attributes-for-__rust_try.patch
BuildRequires: cargo >= 1.28.0 (%{name} >= 1.28.0 with %{name} <= 1.29.1) llvm-devel
BuildRequires: make gcc-c++ ncurses-devel curl python3 cmake3 >= 3.4.3 procps-ng
BuildRequires: pkgconfig(libcurl) pkgconfig(liblzma) pkgconfig(openssl) pkgconfig(zlib) gdb
Requires: %{name}-devel = 1.29.1-%{release}
Provides: bundled(libbacktrace) = 8.1.0 bundled(miniz) = 1.16~beta+r1
Provides: rustc = 1.29.1-%{release}
%description %description
Rust is a systems programming language focused on three goals:safety, Rust is a systems programming language that runs blazingly fast, prevents
speed,and concurrency.It maintains these goals without having a garbage segfaults, and guarantees thread safety.
collector, making it a useful language for a number of use cases other This package includes the Rust compiler and documentation generator.
languages are not good at: embedding in other languages, programs with
specific space and time requirements,and writing low-level code, like
device drivers and operating systems. It improves on current languages
targeting this space by having a number of compile-time safety checks
that produce no runtime overhead,while eliminating all data races.
%package devel %package std-static
Summary: Libraries and header files for developing applications that use appstream-glib Summary: Standard library for Rust
Provides: %{name}-std-static = %{version}-%{release} %description std-static
Obsoletes: %{name}-std-static < %{version}-%{release} This package includes the standard libraries for building applications
written in Rust.
%description devel
Libraries and header files for developing applications that use appstream-glib.
%package debugger-common %package debugger-common
Summary: Common debugger pretty printers for Rust Summary: Common debugger pretty printers for Rust
BuildArch: noarch BuildArch: noarch
%description debugger-common %description debugger-common
This package includes the common functionality for %{name}-gdb and %{name}-lldb. This package includes the common functionality for %{name}-gdb and %{name}-lldb.
%package gdb %package gdb
Summary: GDB pretty printers for Rust Summary: GDB pretty printers for Rust
BuildArch: noarch BuildArch: noarch
Requires: gdb Requires: gdb %{name}-debugger-common = %{version}-%{release}
Requires: %{name}-debugger-common = 1.29.1-%{release}
%description gdb %description gdb
This package includes the rust-gdb script, which allows easier debugging of Rust This package includes the rust-gdb script, which allows easier debugging of Rust
programs. programs.
%package -n cargo %package lldb
Summary: Rust's package manager and build tool Summary: LLDB pretty printers for Rust
Version: 1.29.0 BuildArch: noarch
BuildRequires: git Requires: lldb python3-lldb
Requires: rust Requires: %{name}-debugger-common = %{version}-%{release}
Provides: bundled(libgit2) = 0.27 bundled(libssh2) = 1.8.1 %description lldb
This package includes the rust-lldb script, which allows easier debugging of Rust
programs.
%package doc
Summary: Documentation for Rust
%description doc
This package includes HTML documentation for the Rust programming language and
its standard library.
%package -n cargo
Summary: Rust's package manager and build tool
Provides: bundled(libgit2) = 1.0.0
BuildRequires: git
Requires: rust
Obsoletes: cargo-vendor <= 0.1.23
Provides: cargo-vendor = %{version}-%{release}
%description -n cargo %description -n cargo
Cargo is a tool that allows Rust projects to declare their various dependencies Cargo is a tool that allows Rust projects to declare their various dependencies
and ensure that you'll always get a repeatable build. and ensure that you'll always get a repeatable build.
%package -n rustfmt-preview %package -n cargo-doc
Summary: Tool to find and fix Rust formatting issues Summary: Documentation for Cargo
Version: 0.99.1 BuildArch: noarch
Requires: cargo Requires: rust-doc = %{version}-%{release}
Provides: rustfmt = 0.99.1 %description -n cargo-doc
Obsoletes: rustfmt <= 0.9.0 This package includes HTML documentation for Cargo.
%description -n rustfmt-preview %package -n rustfmt
Summary: Tool to find and fix Rust formatting issues
Requires: cargo
Obsoletes: rustfmt-preview < 1.0.0
Provides: rustfmt-preview = %{version}-%{release}
%description -n rustfmt
A tool for formatting Rust code according to style guidelines. A tool for formatting Rust code according to style guidelines.
%package -n rls-preview %package -n rls
Summary: Rust Language Server for IDE integration Summary: Rust Language Server for IDE integration
Version: 0.130.0 Provides: bundled(libgit2) = 1.0.0
Provides: rls = 0.130.0 bundled(libgit2) = 0.27 bundled(libssh2) = 1.8.1 Requires: rust-analysis %{name}%{?_isa} = %{version}-%{release}
Requires: rust-analysis %{name} = 1.29.1-%{release} Obsoletes: rls-preview < 1.31.6
Provides: rls-preview = %{version}-%{release}
%description -n rls-preview %description -n rls
The Rust Language Server provides a server that runs in the background, The Rust Language Server provides a server that runs in the background,
providing IDEs, editors, and other tools with information about Rust programs. providing IDEs, editors, and other tools with information about Rust programs.
It supports functionality such as 'goto definition', symbol search, It supports functionality such as 'goto definition', symbol search,
reformatting, and code completion, and enables renaming and refactorings. reformatting, and code completion, and enables renaming and refactorings.
%package -n clippy-preview %package -n clippy
Summary: Lints to catch common mistakes and improve your Rust code Summary: Lints to catch common mistakes and improve your Rust code
Version: 0.0.212 Requires: cargo %{name}%{?_isa} = %{version}-%{release}
License: MPLv2.0 Obsoletes: clippy-preview <= 0.0.212
Provides: clippy = 0.0.212 Provides: clippy-preview = %{version}-%{release}
Requires: cargo %{name} = 1.29.1-%{release} %description -n clippy
%description -n clippy-preview
A collection of lints to catch common mistakes and improve your Rust code. A collection of lints to catch common mistakes and improve your Rust code.
%package src %package src
Summary: Sources for the Rust standard library Summary: Sources for the Rust standard library
BuildArch: noarch BuildArch: noarch
%description src %description src
This package includes source files for the Rust standard library.It may be This package includes source files for the Rust standard library. It may be
useful as a reference for code completion tools in various editors. useful as a reference for code completion tools in various editors.
%package analysis %package analysis
Summary: Compiler analysis data for the Rust standard library Summary: Compiler analysis data for the Rust standard library
Requires: rust-std-static = 1.29.1-%{release} Requires: rust-std-static%{?_isa} = %{version}-%{release}
%description analysis %description analysis
This package contains analysis data files produced with rustc's -Zsave-analysis This package contains analysis data files produced with rustc's -Zsave-analysis
feature for the Rust standard library. The RLS (Rust Language Server) uses this feature for the Rust standard library. The RLS (Rust Language Server) uses this
data to provide information about the Rust standard library. data to provide information about the Rust standard library.
%package help
Summary: Help documents for rust
Provides: %{name}-doc = %{version}-%{release} %{name}-cargo-doc = %{version}-%{release}
Obsoletes: %{name}-doc < %{version}-%{release} %{name}-cargo-doc < %{version}-%{release}
%description help
Man pages and other related help documents for rust.
%prep %prep
%autosetup -n rustc-1.29.1-src -p1 %ifarch %{bootstrap_arches}
%setup -q -n %{bootstrap_root} -T -b %{bootstrap_source}
./install.sh --components=cargo,rustc,rust-std-%{rust_triple} \
--prefix=%{local_rust_root} --disable-ldconfig
test -f '%{local_rust_root}/bin/cargo'
test -f '%{local_rust_root}/bin/rustc'
%endif
%setup -q -n %{rustc_package}
%if "%{python}" == "python3"
sed -i.try-py3 -e '/try python2.7/i try python3 "$@"' ./configure sed -i.try-py3 -e '/try python2.7/i try python3 "$@"' ./configure
rm -rf src/llvm/ %endif
rm -rf src/llvm-emscripten/ %if %without bundled_llvm
sed -e '/*\//q' src/libbacktrace/backtrace.h >src/libbacktrace/LICENSE-libbacktrace rm -rf src/llvm-project/
%endif
sed -i.ignore -e '1i // ignore-test may still be exponential...' src/test/run-pass/issue-41696.rs rm -rf vendor/curl-sys/curl/
rm -rf vendor/jemalloc-sys/jemalloc/
find src/vendor -name .cargo-checksum.json -exec sed -i.uncheck -e 's/"files":{[^}]*}/"files":{ }/' '{}' '+' rm -rf vendor/libz-sys/src/zlib/
rm -rf vendor/lzma-sys/xz-*/
rm -rf vendor/openssl-src/openssl/
rm -rf vendor/libssh2-sys/libssh2/
sed -i.lzma -e '/LZMA_API_STATIC/d' src/bootstrap/tool.rs
cp -a vendor/backtrace-sys/src/libbacktrace/LICENSE{,-libbacktrace}
%if %{without bundled_llvm} && %{with llvm_static}
sed -i.ffi -e '$a #[link(name = "ffi")] extern {}' \
src/librustc_llvm/lib.rs
%endif
find vendor -name .cargo-checksum.json \
-exec sed -i.uncheck -e 's/"files":{[^}]*}/"files":{ }/' '{}' '+'
find -name '*.rs' -type f -perm /111 -exec chmod -v -x '{}' '+'
%build %build
export LIBSSH2_SYS_USE_PKG_CONFIG=1
%{?cmake_path:export PATH=%{cmake_path}:$PATH} %{?cmake_path:export PATH=%{cmake_path}:$PATH}
%{?library_path:export LIBRARY_PATH="%{library_path}"} %{?rustflags:export RUSTFLAGS="%{rustflags}"}
%{?rustflags:export RUSTFLAGS="-Clink-arg=-Wl,-z,relro,-z,now"} %global common_libdir %{_prefix}/lib
%global rustlibdir %{common_libdir}/rustlib
%configure --disable-option-checking --libdir=%{_prefix}/lib \ %ifarch %{arm} %{ix86} s390x
%define enable_debuginfo --debuginfo-level=0 --debuginfo-level-std=2
%else
%define enable_debuginfo --debuginfo-level=2
%endif
%ifnarch %{power64}
%define codegen_units_std --set rust.codegen-units-std=1
%endif
%configure --disable-option-checking \
--libdir=%{common_libdir} \
--build=%{rust_triple} --host=%{rust_triple} --target=%{rust_triple} \ --build=%{rust_triple} --host=%{rust_triple} --target=%{rust_triple} \
--local-rust-root=%{_prefix} --disable-jemalloc --disable-rpath --enable-llvm-link-shared \ --python=%{python} \
%{!?with_bundled_llvm: --llvm-root=%{llvm_root} --disable-codegen-tests} \ --local-rust-root=%{local_rust_root} \
--enable-debuginfo --disable-debuginfo-only-std --enable-debuginfo-tools --disable-debuginfo-lines \ %{!?with_bundled_llvm: --llvm-root=%{llvm_root} \
--enable-extended --enable-vendor --enable-verbose-tests --release-channel=stable %{!?llvm_has_filecheck: --disable-codegen-tests} \
%{!?with_llvm_static: --enable-llvm-link-shared } } \
python3 ./x.py build --disable-rpath \
python3 ./x.py doc %{enable_debuginfo} \
--enable-extended \
--tools=analysis,cargo,clippy,rls,rustfmt,src \
--enable-vendor \
--enable-verbose-tests \
%{?codegen_units_std} \
--release-channel=%{channel}
%{python} ./x.py build
%{python} ./x.py doc
%install %install
%{?cmake_path:export PATH=%{cmake_path}:$PATH} %{?cmake_path:export PATH=%{cmake_path}:$PATH}
%{?library_path:export LIBRARY_PATH="%{library_path}"} %{?rustflags:export RUSTFLAGS="%{rustflags}"}
%{?rustflags:export RUSTFLAGS="-Clink-arg=-Wl,-z,relro,-z,now"} DESTDIR=%{buildroot} %{python} ./x.py install
%if "%{_libdir}" != "%{common_libdir}"
DESTDIR=%{buildroot} python3 ./x.py install mkdir -p %{buildroot}%{_libdir}
find %{buildroot}%{common_libdir} -maxdepth 1 -type f -name '*.so' \
install -d %{buildroot}%{_libdir} -exec mv -v -t %{buildroot}%{_libdir} '{}' '+'
find %{buildroot}%{_prefix}/lib -maxdepth 1 -type f -name '*.so' -exec mv -v -t %{buildroot}%{_libdir} '{}' '+' %endif
find %{buildroot}%{_libdir} -maxdepth 1 -type f -name '*.so' \
find %{buildroot}%{_libdir} -maxdepth 1 -type f -name '*.so' -exec chmod -v +x '{}' '+' -exec chmod -v +x '{}' '+'
(cd "%{buildroot}%{rustlibdir}/%{rust_triple}/lib" && (cd "%{buildroot}%{rustlibdir}/%{rust_triple}/lib" &&
find ../../../../%{_lib} -maxdepth 1 -name '*.so' | find ../../../../%{_lib} -maxdepth 1 -name '*.so' |
while read lib; do while read lib; do
cmp "$lib" "${lib##*/}" if [ -f "${lib##*/}" ]; then
ln -v -f -s -t . "$lib" # make sure they're actually identical!
cmp "$lib" "${lib##*/}"
ln -v -f -s -t . "$lib"
fi
done) done)
find %{buildroot}%{rustlibdir} -maxdepth 1 -type f -exec rm -v '{}' '+' find %{buildroot}%{rustlibdir} -maxdepth 1 -type f -exec rm -v '{}' '+'
find %{buildroot}%{rustlibdir} -type f -name '*.orig' -exec rm -v '{}' '+' find %{buildroot}%{rustlibdir} -type f -name '*.orig' -exec rm -v '{}' '+'
find %{buildroot}%{rustlibdir}/src -type f -name '*.py' -exec rm -v '{}' '+' find %{buildroot}%{rustlibdir}/src -type f -name '*.py' -exec rm -v '{}' '+'
rm -f %{buildroot}%{_docdir}/%{name}/README.md
rm -f %{buildroot}%{_docdir}/%{name}/COPYRIGHT
rm -f %{buildroot}%{_docdir}/%{name}/LICENSE
rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-APACHE
rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-MIT
rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-THIRD-PARTY
rm -f %{buildroot}%{_docdir}/%{name}/*.old
find %{buildroot}%{_docdir}/%{name}/html -empty -delete find %{buildroot}%{_docdir}/%{name}/html -empty -delete
find %{buildroot}%{_docdir}/%{name}/html -type f -exec chmod -x '{}' '+' find %{buildroot}%{_docdir}/%{name}/html -type f -exec chmod -x '{}' '+'
mkdir -p %{buildroot}%{_datadir}/cargo/registry
install -d %{buildroot}%{_datadir}/cargo/registry mkdir -p %{buildroot}%{_docdir}/cargo
install -d %{buildroot}%{_docdir}/cargo
ln -sT ../rust/html/cargo/ %{buildroot}%{_docdir}/cargo/html ln -sT ../rust/html/cargo/ %{buildroot}%{_docdir}/cargo/html
%check %check
%{?cmake_path:export PATH=%{cmake_path}:$PATH} %{?cmake_path:export PATH=%{cmake_path}:$PATH}
%{?library_path:export LIBRARY_PATH="%{library_path}"} %{?rustflags:export RUSTFLAGS="%{rustflags}"}
%{?rustflags:export RUSTFLAGS="-Clink-arg=-Wl,-z,relro,-z,now"} %{python} ./x.py test --no-fail-fast || :
%{python} ./x.py test --no-fail-fast cargo || :
python3 ./x.py test --no-fail-fast || : %{python} ./x.py test --no-fail-fast clippy || :
python3 ./x.py test --no-fail-fast cargo || : %{python} ./x.py test --no-fail-fast rls || :
python3 ./x.py test --no-fail-fast clippy || : %{python} ./x.py test --no-fail-fast rustfmt || :
python3 ./x.py test --no-fail-fast rls || : %ldconfig_scriptlets
python3 ./x.py test --no-fail-fast rustfmt || :
%post
/sbin/ldconfig
%postun
/sbin/ldconfig
%files %files
%doc README.md
%license COPYRIGHT LICENSE-APACHE LICENSE-MIT %license COPYRIGHT LICENSE-APACHE LICENSE-MIT
%license src/libbacktrace/LICENSE-libbacktrace %license vendor/backtrace-sys/src/libbacktrace/LICENSE-libbacktrace
%license %{_docdir}/%{name}/html/*.txt %doc README.md
%dir %{rustlibdir}
%dir %{rustlibdir}/%{rust_triple}
%dir %{rustlibdir}/%{rust_triple}/lib
%{_bindir}/rustc %{_bindir}/rustc
%{_bindir}/rustdoc %{_bindir}/rustdoc
%{_libdir}/*.so %{_libdir}/*.so
%{_mandir}/man1/rustc.1*
%{_mandir}/man1/rustdoc.1*
%dir %{rustlibdir}
%dir %{rustlibdir}/%{rust_triple}
%dir %{rustlibdir}/%{rust_triple}/lib
%{rustlibdir}/%{rust_triple}/lib/*.so %{rustlibdir}/%{rust_triple}/lib/*.so
%{rustlibdir}/%{rust_triple}/codegen-backends/
%exclude %{_docdir}/%{name}/{README.md,COPYRIGHT,LICENSE,*.old}
%exclude %{_docdir}/%{name}/LICENSE-{APACHE,MIT,THIRD-PARTY}
%exclude %{rustlibdir}/etc/lldb_*.py*
%exclude %{_bindir}/rust-lldb
%files devel %files std-static
%dir %{rustlibdir} %dir %{rustlibdir}
%dir %{rustlibdir}/%{rust_triple} %dir %{rustlibdir}/%{rust_triple}
%dir %{rustlibdir}/%{rust_triple}/lib %dir %{rustlibdir}/%{rust_triple}/lib
@ -234,32 +335,58 @@ python3 ./x.py test --no-fail-fast rustfmt || :
%files gdb %files gdb
%{_bindir}/rust-gdb %{_bindir}/rust-gdb
%{rustlibdir}/etc/gdb_*.py* %{rustlibdir}/etc/gdb_*.py*
%exclude %{_bindir}/rust-gdbgui
%files lldb
%{_bindir}/rust-lldb
%{rustlibdir}/etc/lldb_*.py*
%files doc
%docdir %{_docdir}/%{name}
%dir %{_docdir}/%{name}
%dir %{_docdir}/%{name}/html
%{_docdir}/%{name}/html/*/
%{_docdir}/%{name}/html/*.html
%{_docdir}/%{name}/html/*.css
%{_docdir}/%{name}/html/*.ico
%{_docdir}/%{name}/html/*.js
%{_docdir}/%{name}/html/*.png
%{_docdir}/%{name}/html/*.svg
%{_docdir}/%{name}/html/*.woff
%license %{_docdir}/%{name}/html/*.txt
%license %{_docdir}/%{name}/html/*.md
%files -n cargo %files -n cargo
%doc src/tools/cargo/README.md
%license src/tools/cargo/LICENSE-APACHE src/tools/cargo/LICENSE-MIT src/tools/cargo/LICENSE-THIRD-PARTY %license src/tools/cargo/LICENSE-APACHE src/tools/cargo/LICENSE-MIT src/tools/cargo/LICENSE-THIRD-PARTY
%dir %{_datadir}/cargo %doc src/tools/cargo/README.md
%dir %{_datadir}/cargo/registry
%{_bindir}/cargo %{_bindir}/cargo
%{_mandir}/man1/cargo*.1*
%{_sysconfdir}/bash_completion.d/cargo %{_sysconfdir}/bash_completion.d/cargo
%{_datadir}/zsh/site-functions/_cargo %{_datadir}/zsh/site-functions/_cargo
%dir %{_datadir}/cargo
%dir %{_datadir}/cargo/registry
%files -n rustfmt-preview %files -n cargo-doc
%doc src/tools/rustfmt/{README,CHANGELOG,Configurations}.md %docdir %{_docdir}/cargo
%license src/tools/rustfmt/LICENSE-{APACHE,MIT} %dir %{_docdir}/cargo
%{_docdir}/cargo/html
%files -n rustfmt
%{_bindir}/rustfmt %{_bindir}/rustfmt
%{_bindir}/cargo-fmt %{_bindir}/cargo-fmt
%doc src/tools/rustfmt/{README,CHANGELOG,Configurations}.md
%license src/tools/rustfmt/LICENSE-{APACHE,MIT}
%files -n rls-preview %files -n rls
%{_bindir}/rls
%doc src/tools/rls/{README.md,COPYRIGHT,debugging.md} %doc src/tools/rls/{README.md,COPYRIGHT,debugging.md}
%license src/tools/rls/LICENSE-{APACHE,MIT} %license src/tools/rls/LICENSE-{APACHE,MIT}
%{_bindir}/rls
%files -n clippy-preview %files -n clippy
%doc src/tools/clippy/{README.md,CHANGELOG.md}
%license src/tools/clippy/LICENSE
%{_bindir}/cargo-clippy %{_bindir}/cargo-clippy
%{_bindir}/clippy-driver %{_bindir}/clippy-driver
%doc src/tools/clippy/{README.md,CHANGELOG.md}
%license src/tools/clippy/LICENSE-{APACHE,MIT}
%files src %files src
%dir %{rustlibdir} %dir %{rustlibdir}
@ -268,24 +395,10 @@ python3 ./x.py test --no-fail-fast rustfmt || :
%files analysis %files analysis
%{rustlibdir}/%{rust_triple}/analysis/ %{rustlibdir}/%{rust_triple}/analysis/
%files help
%dir %{_docdir}/%{name}
%dir %{_docdir}/cargo
%dir %{_docdir}/%{name}/html
%docdir %{_docdir}/%{name}
%docdir %{_docdir}/cargo
%{_docdir}/%{name}/html/*/
%{_docdir}/%{name}/html/*.html
%{_docdir}/%{name}/html/*.css
%{_docdir}/%{name}/html/*.js
%{_docdir}/%{name}/html/*.svg
%{_docdir}/%{name}/html/*.woff
%{_docdir}/cargo/html
%{_mandir}/man1/rustc.1*
%{_mandir}/man1/rustdoc.1*
%{_mandir}/man1/cargo*.1*
%changelog %changelog
* Mon Sep 21 2020 Jeffery.Gao <gaojianxing@huawei.com> - 1.45.2-1
- Update to 1.45.2
* Mon Apr 17 2020 zhujunhao <zhujunhao8@huawei.com> - 1.29.1-4 * Mon Apr 17 2020 zhujunhao <zhujunhao8@huawei.com> - 1.29.1-4
- add llvm in rust - add llvm in rust