Compare commits

...

No commits in common. 'c9' and 'c9-beta' have entirely different histories.
c9 ... c9-beta

4
.gitignore vendored

@ -1,2 +1,2 @@
SOURCES/rustc-1.76.0-src.tar.xz SOURCES/rustc-1.75.0-src.tar.xz
SOURCES/wasi-libc-03b228e46bb02fcc5927253e1b8ad715072b1ae4.tar.gz SOURCES/wasi-libc-bd950eb128bff337153de217b11270f948d04bb4.tar.gz

@ -1,2 +1,2 @@
755339e8131d618d3c1095a581f27afc573ad310 SOURCES/rustc-1.76.0-src.tar.xz 9ad7bb54dc9572c103b855cdcc823addbb34d15d SOURCES/rustc-1.75.0-src.tar.xz
124d114ffb627ada36bfa1df0216bcea0f55a15e SOURCES/wasi-libc-03b228e46bb02fcc5927253e1b8ad715072b1ae4.tar.gz 55eaa32c99cc8ec970f2db2d340a605724589f9b SOURCES/wasi-libc-bd950eb128bff337153de217b11270f948d04bb4.tar.gz

@ -0,0 +1,33 @@
From 776146e9ebb6bbe17a37bfad955f3dac95317275 Mon Sep 17 00:00:00 2001
From: Josh Stone <jistone@redhat.com>
Date: Thu, 16 Nov 2023 10:42:23 -0800
Subject: [PATCH] bootstrap: only show PGO warnings when verbose
Building rustc with `--rust-profile-use` is currently dumping a lot of
warnings of "no profile data available for function" from `rustc_smir`
and `stable_mir`. These simply aren't exercised by the current profile-
gathering steps, but that's to be expected for new or experimental
functionality. I think for most people, these warnings will be just
noise, so it makes sense to only have them in verbose builds.
---
src/bootstrap/src/core/build_steps/compile.rs | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/bootstrap/src/core/build_steps/compile.rs b/src/bootstrap/src/core/build_steps/compile.rs
index af69860df1c5..51e4195827fc 100644
--- a/src/bootstrap/src/core/build_steps/compile.rs
+++ b/src/bootstrap/src/core/build_steps/compile.rs
@@ -887,7 +887,9 @@ fn run(self, builder: &Builder<'_>) {
} else if let Some(path) = &builder.config.rust_profile_use {
if compiler.stage == 1 {
cargo.rustflag(&format!("-Cprofile-use={path}"));
- cargo.rustflag("-Cllvm-args=-pgo-warn-missing-function");
+ if builder.is_verbose() {
+ cargo.rustflag("-Cllvm-args=-pgo-warn-missing-function");
+ }
true
} else {
false
--
2.43.0

@ -1,2 +0,0 @@
%__cargo_vendor_path ^%{_defaultlicensedir}(/[^/]+)+/cargo-vendor.txt$
%__cargo_vendor_provides %{_rpmconfigdir}/cargo_vendor.prov

@ -1,127 +0,0 @@
#! /usr/bin/python3 -s
# Stripped down replacement for cargo2rpm parse-vendor-manifest
import re
import subprocess
import sys
from typing import Optional
VERSION_REGEX = re.compile(
r"""
^
(?P<major>0|[1-9]\d*)
\.(?P<minor>0|[1-9]\d*)
\.(?P<patch>0|[1-9]\d*)
(?:-(?P<pre>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?
(?:\+(?P<build>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
""",
re.VERBOSE,
)
class Version:
"""
Version that adheres to the "semantic versioning" format.
"""
def __init__(self, major: int, minor: int, patch: int, pre: Optional[str] = None, build: Optional[str] = None):
self.major: int = major
self.minor: int = minor
self.patch: int = patch
self.pre: Optional[str] = pre
self.build: Optional[str] = build
@staticmethod
def parse(version: str) -> "Version":
"""
Parses a version string and return a `Version` object.
Raises a `ValueError` if the string does not match the expected format.
"""
match = VERSION_REGEX.match(version)
if not match:
raise ValueError(f"Invalid version: {version!r}")
matches = match.groupdict()
major_str = matches["major"]
minor_str = matches["minor"]
patch_str = matches["patch"]
pre = matches["pre"]
build = matches["build"]
major = int(major_str)
minor = int(minor_str)
patch = int(patch_str)
return Version(major, minor, patch, pre, build)
def to_rpm(self) -> str:
"""
Formats the `Version` object as an equivalent RPM version string.
Characters that are invalid in RPM versions are replaced ("-" -> "_")
Build metadata (the optional `Version.build` attribute) is dropped, so
the conversion is not lossless for versions where this attribute is not
`None`. However, build metadata is not intended to be part of the
version (and is not even considered when doing version comparison), so
dropping it when converting to the RPM version format is correct.
"""
s = f"{self.major}.{self.minor}.{self.patch}"
if self.pre:
s += f"~{self.pre.replace('-', '_')}"
return s
def break_the_build(error: str):
"""
This function writes a string that is an invalid RPM dependency specifier,
which causes dependency generators to fail and break the build. The
additional error message is printed to stderr.
"""
print("*** FATAL ERROR ***")
print(error, file=sys.stderr)
def get_cargo_vendor_txt_paths_from_stdin() -> set[str]: # pragma nocover
"""
Read lines from standard input and filter out lines that look like paths
to `cargo-vendor.txt` files. This is how RPM generators pass lists of files.
"""
lines = {line.rstrip("\n") for line in sys.stdin.readlines()}
return {line for line in lines if line.endswith("/cargo-vendor.txt")}
def action_parse_vendor_manifest():
paths = get_cargo_vendor_txt_paths_from_stdin()
for path in paths:
with open(path) as file:
manifest = file.read()
for line in manifest.strip().splitlines():
crate, version = line.split(" v")
print(f"bundled(crate({crate})) = {Version.parse(version).to_rpm()}")
def main():
try:
action_parse_vendor_manifest()
exit(0)
# print an error message that is not a valid RPM dependency
# to cause the generator to break the build
except (IOError, ValueError) as exc:
break_the_build(str(exc))
exit(1)
break_the_build("Uncaught exception: This should not happen, please report a bug.")
exit(1)
if __name__ == "__main__":
main()

@ -1,7 +1,12 @@
# __rustc: path to the default rustc executable # Explicitly use bindir tools, in case others are in the PATH,
# like the rustup shims in a user's ~/.cargo/bin/.
#
# Since cargo 1.31, install only uses $CARGO_HOME/config, ignoring $PWD.
# https://github.com/rust-lang/cargo/issues/6397
# But we can set CARGO_HOME locally, which is a good idea anyway to make sure
# it never writes to ~/.cargo during rpmbuild.
%__cargo /usr/bin/env CARGO_HOME=.cargo RUSTFLAGS='%{build_rustflags}' /usr/bin/cargo
%__rustc /usr/bin/rustc %__rustc /usr/bin/rustc
# __rustdoc: path to the default rustdoc executable
%__rustdoc /usr/bin/rustdoc %__rustdoc /usr/bin/rustdoc
# rustflags_opt_level: default optimization level # rustflags_opt_level: default optimization level
@ -41,56 +46,22 @@
-Copt-level=%rustflags_opt_level -Copt-level=%rustflags_opt_level
-Cdebuginfo=%rustflags_debuginfo -Cdebuginfo=%rustflags_debuginfo
-Ccodegen-units=%rustflags_codegen_units -Ccodegen-units=%rustflags_codegen_units
-Cstrip=none
%{expr:0%{?_include_frame_pointers} && ("%{_arch}" != "ppc64le" && "%{_arch}" != "s390x" && "%{_arch}" != "i386") ? "-Cforce-frame-pointers=yes" : ""} %{expr:0%{?_include_frame_pointers} && ("%{_arch}" != "ppc64le" && "%{_arch}" != "s390x" && "%{_arch}" != "i386") ? "-Cforce-frame-pointers=yes" : ""}
%[0%{?_package_note_status} ? "-Clink-arg=%_package_note_flags" : ""] %[0%{?_package_note_status} ? "-Clink-arg=%_package_note_flags" : ""]
} }
# __cargo: cargo command with environment variables
#
# CARGO_HOME: This ensures cargo reads configuration file from .cargo/config,
# and prevents writing any files to $HOME during RPM builds.
%__cargo /usr/bin/env CARGO_HOME=.cargo RUSTFLAGS='%{build_rustflags}' /usr/bin/cargo
# __cargo_common_opts: common command line flags for cargo # __cargo_common_opts: common command line flags for cargo
# #
# _smp_mflags: run builds and tests in parallel # _smp_mflags: run builds and tests in parallel
%__cargo_common_opts %{?_smp_mflags} %__cargo_common_opts %{?_smp_mflags}
# cargo_prep: macro to set up build environment for cargo projects %cargo_prep(V:) (\
# %{__mkdir} -p .cargo \
# This involves four steps: cat > .cargo/config << EOF \
# - create the ".cargo" directory if it doesn't exist yet
# - dump custom cargo configuration into ".cargo/config"
# - remove "Cargo.lock" if it exists (it breaks builds with custom cargo config)
# - remove "Cargo.toml.orig" if it exists (it breaks running "cargo package")
#
# Options:
# -V <number> - unpack and use vendored sources from Source<number> tarball
# (deprecated; use -v instead)
# -v <directory> - use vendored sources from <directory>
# -N - Don't set up any registry. Only set up the build configuration.
%cargo_prep(V:v:N)\
%{-v:%{-V:%{error:-v and -V are mutually exclusive!}}}\
%{-v:%{-N:%{error:-v and -N are mutually exclusive!}}}\
(\
set -euo pipefail\
%{__mkdir} -p target/rpm\
/usr/bin/ln -s rpm target/release\
%{__rm} -rf .cargo/\
%{__mkdir} -p .cargo\
cat > .cargo/config << EOF\
[build]\ [build]\
rustc = "%{__rustc}"\ rustc = "%{__rustc}"\
rustdoc = "%{__rustdoc}"\ rustdoc = "%{__rustdoc}"\
\ \
[profile.rpm]\
inherits = "release"\
opt-level = %{rustflags_opt_level}\
codegen-units = %{rustflags_codegen_units}\
debug = %{rustflags_debuginfo}\
strip = "none"\
\
[env]\ [env]\
CFLAGS = "%{build_cflags}"\ CFLAGS = "%{build_cflags}"\
CXXFLAGS = "%{build_cxxflags}"\ CXXFLAGS = "%{build_cxxflags}"\
@ -102,28 +73,27 @@ root = "%{buildroot}%{_prefix}"\
[term]\ [term]\
verbose = true\ verbose = true\
EOF\ EOF\
%{-V:%{__tar} -xoaf %{S:%{-V*}}}\ %if 0%{-V:1}\
%{!?-N:\ %{__tar} -xoaf %{S:%{-V*}}\
cat >> .cargo/config << EOF\ cat >> .cargo/config << EOF \
[source.vendored-sources]\
directory = "%{-v*}%{-V:./vendor}"\
\ \
[source.crates-io]\ [source.crates-io]\
registry = "https://crates.io"\
replace-with = "vendored-sources"\ replace-with = "vendored-sources"\
EOF}\ \
%{__rm} -f Cargo.toml.orig\ [source.vendored-sources]\
directory = "./vendor"\
EOF\
%endif\
) )
# __cargo_parse_opts: function-like macro which parses common flags into the # __cargo_parse_opts: function-like macro which parses common flags into the
# equivalent command-line flags for cargo # equivalent command-line flags for cargo
%__cargo_parse_opts(naf:) %{shrink:\ %__cargo_parse_opts(naf:) %{shrink:\
%{-n:%{-a:%{error:Can't specify both -n and -a}}} \ %{-f:%{-a:%{error:Can't specify both -f(%{-f*}) and -a}}} \
%{-f:%{-a:%{error:Can't specify both -f(%{-f*}) and -a}}} \
%{-n:--no-default-features} \ %{-n:--no-default-features} \
%{-a:--all-features} \ %{-a:--all-features} \
%{-f:--features %{-f*}} \ %{-f:--features %{-f*}} \
%{nil} \ %{nil}
} }
# NB: cargo_build/test/install do not use the -n/-a/-f argument parsing like # NB: cargo_build/test/install do not use the -n/-a/-f argument parsing like
@ -132,11 +102,11 @@ EOF}\
# explicitly use --no-default-features, --all-features, or --features XYZ. # explicitly use --no-default-features, --all-features, or --features XYZ.
# cargo_build: builds the crate with cargo # cargo_build: builds the crate with cargo
%cargo_build\ %cargo_build \
%{shrink: \ %{shrink:\
%{__cargo} build \ %{__cargo} build \
%{__cargo_common_opts} \ %{__cargo_common_opts} \
--profile rpm \ --release \
} }
# cargo_test: runs the test suite with cargo # cargo_test: runs the test suite with cargo
@ -146,11 +116,11 @@ EOF}\
# "cargo test" argument parsing need to be bypassed, # "cargo test" argument parsing need to be bypassed,
# i.e. "%%cargo_test -- --skip foo" for skipping all tests with names that # i.e. "%%cargo_test -- --skip foo" for skipping all tests with names that
# match "foo". # match "foo".
%cargo_test\ %cargo_test \
%{shrink: \ %{shrink:\
%{__cargo} test \ %{__cargo} test \
%{__cargo_common_opts} \ %{__cargo_common_opts} \
--profile rpm \ --release \
--no-fail-fast \ --no-fail-fast \
} }
@ -161,17 +131,13 @@ EOF}\
# "$CARGO_HOME/.crates.toml" file, which is used to keep track of which version # "$CARGO_HOME/.crates.toml" file, which is used to keep track of which version
# of a specific binary has been installed, but which conflicts between builds # of a specific binary has been installed, but which conflicts between builds
# of different Rust applications and is not needed when building RPM packages. # of different Rust applications and is not needed when building RPM packages.
%cargo_install\ %cargo_install \
(\ %{shrink: \
set -euo pipefail \
%{shrink: \
%{__cargo} install \ %{__cargo} install \
%{__cargo_common_opts} \ %{__cargo_common_opts} \
--profile rpm \
--no-track \ --no-track \
--path . \ --path . \
} \ } \
)
# cargo_license: print license information for all crate dependencies # cargo_license: print license information for all crate dependencies
# #
@ -187,21 +153,19 @@ set -euo pipefail \
# The "cargo tree" command called by this macro will fail if there are missing # The "cargo tree" command called by this macro will fail if there are missing
# (optional) dependencies. # (optional) dependencies.
%cargo_license(naf:)\ %cargo_license(naf:)\
(\ %{shrink:\
set -euo pipefail\
%{shrink: \
%{__cargo} tree \ %{__cargo} tree \
--workspace \ --workspace \
--offline \ --offline \
--edges no-build,no-dev,no-proc-macro \ --edges no-build,no-dev,no-proc-macro \
--no-dedupe \ --no-dedupe \
--target all \
%{__cargo_parse_opts %{-n} %{-a} %{-f:-f%{-f*}}} \ %{__cargo_parse_opts %{-n} %{-a} %{-f:-f%{-f*}}} \
--prefix none \ --prefix none \
--format "{l}: {p}" \ --format "{l}: {p}" \
| sed -e "s: ($(pwd)[^)]*)::g" -e "s: / :/:g" -e "s:/: OR :g" \ | sed -e "s: ($(pwd)[^)]*)::g" -e "s: / :/:g" -e "s:/: OR :g" \
| sort -u \ | sort -u
}\ }
)
# cargo_license_summary: print license summary for all crate dependencies # cargo_license_summary: print license summary for all crate dependencies
# #
@ -210,46 +174,16 @@ set -euo pipefail\
# in the dependency tree. This is useful for determining the correct License # in the dependency tree. This is useful for determining the correct License
# tag for packages that contain compiled Rust binaries. # tag for packages that contain compiled Rust binaries.
%cargo_license_summary(naf:)\ %cargo_license_summary(naf:)\
(\ %{shrink:\
set -euo pipefail\
%{shrink: \
%{__cargo} tree \ %{__cargo} tree \
--workspace \ --workspace \
--offline \ --offline \
--edges no-build,no-dev,no-proc-macro \ --edges no-build,no-dev,no-proc-macro \
--no-dedupe \ --no-dedupe \
--target all \
%{__cargo_parse_opts %{-n} %{-a} %{-f:-f%{-f*}}} \ %{__cargo_parse_opts %{-n} %{-a} %{-f:-f%{-f*}}} \
--prefix none \ --prefix none \
--format "# {l}" \ --format "# {l}" \
| sed -e "s: / :/:g" -e "s:/: OR :g" \ | sed -e "s: / :/:g" -e "s:/: OR :g" \
| sort -u \ | sort -u \
}\ }
)
# cargo_vendor_manifest: write list of vendored crates and their versions
#
# The arguments for the internal "cargo tree" call emulate the logic
# that determines which crates are included when running "cargo vendor".
# The results are written to "cargo-vendor.txt".
#
# TODO: --all-features may be overly broad; this should be modified to
# use %%__cargo_parse_opts to handle feature flags.
%cargo_vendor_manifest()\
(\
set -euo pipefail\
%{shrink: \
%{__cargo} tree \
--workspace \
--offline \
--edges normal,build \
--no-dedupe \
--all-features \
--prefix none \
--format "{p}" \
| grep -v "$(pwd)" \
| sed -e "s: (proc-macro)::" \
| sort -u \
> cargo-vendor.txt \
}\
)

@ -1,6 +1,6 @@
--- rustc-beta-src/src/tools/cargo/Cargo.lock.orig 2024-01-07 18:12:08.000000000 -0800 --- ./rustc-beta-src/src/tools/cargo/Cargo.lock.orig 2023-11-12 12:24:35.000000000 -0800
+++ rustc-beta-src/src/tools/cargo/Cargo.lock 2024-01-09 15:25:51.519781381 -0800 +++ rustc-beta-src/src/tools/cargo/Cargo.lock 2023-11-14 17:01:32.010125953 -0800
@@ -2071,7 +2071,6 @@ @@ -2027,7 +2027,6 @@
dependencies = [ dependencies = [
"cc", "cc",
"libc", "libc",
@ -8,12 +8,10 @@
"libz-sys", "libz-sys",
"openssl-sys", "openssl-sys",
"pkg-config", "pkg-config",
@@ -2113,20 +2112,6 @@ @@ -2060,20 +2059,6 @@
"pkg-config",
"vcpkg",
] ]
-
-[[package]] [[package]]
-name = "libssh2-sys" -name = "libssh2-sys"
-version = "0.3.0" -version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index" -source = "registry+https://github.com/rust-lang/crates.io-index"
@ -26,17 +24,19 @@
- "pkg-config", - "pkg-config",
- "vcpkg", - "vcpkg",
-] -]
-
[[package]] -[[package]]
name = "libz-sys" name = "libz-sys"
--- rustc-beta-src/src/tools/cargo/Cargo.toml.orig 2024-01-09 15:23:02.369032291 -0800 version = "1.1.9"
+++ rustc-beta-src/src/tools/cargo/Cargo.toml 2024-01-09 15:24:44.015679666 -0800 source = "registry+https://github.com/rust-lang/crates.io-index"
--- ./rustc-beta-src/src/tools/cargo/Cargo.toml.orig 2023-11-14 17:01:32.010125953 -0800
+++ rustc-beta-src/src/tools/cargo/Cargo.toml 2023-11-14 17:02:44.645097701 -0800
@@ -40,7 +40,7 @@ @@ -40,7 +40,7 @@
curl-sys = "0.4.70" curl-sys = "0.4.68"
filetime = "0.2.22" filetime = "0.2.22"
flate2 = { version = "1.0.28", default-features = false, features = ["zlib"] } flate2 = { version = "1.0.28", default-features = false, features = ["zlib"] }
-git2 = "0.18.1" -git2 = "0.18.1"
+git2 = { version = "0.18.1", default-features = false, features = ["https"] } +git2 = { version = "0.18.1", default-features = false, features = ["https"] }
git2-curl = "0.19.0" git2-curl = "0.19.0"
gix = { version = "0.56.0", default-features = false, features = ["blocking-http-transport-curl", "progress-tree", "revision"] } gix = { version = "0.55.2", default-features = false, features = ["blocking-http-transport-curl", "progress-tree", "revision"] }
gix-features-for-configuration-only = { version = "0.35.0", package = "gix-features", features = [ "parallel" ] } gix-features-for-configuration-only = { version = "0.35.0", package = "gix-features", features = [ "parallel" ] }

@ -1,21 +0,0 @@
--- rustc-beta-src/src/tools/cargo/Cargo.lock.orig 2024-01-07 18:12:08.000000000 -0800
+++ rustc-beta-src/src/tools/cargo/Cargo.lock 2024-01-09 15:36:23.808367445 -0800
@@ -2109,7 +2109,6 @@
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716"
dependencies = [
- "cc",
"pkg-config",
"vcpkg",
]
--- rustc-beta-src/src/tools/cargo/Cargo.toml.orig 2024-01-07 18:12:08.000000000 -0800
+++ rustc-beta-src/src/tools/cargo/Cargo.toml 2024-01-09 15:36:18.534437627 -0800
@@ -73,7 +73,7 @@
pulldown-cmark = { version = "0.9.3", default-features = false }
rand = "0.8.5"
regex = "1.10.2"
-rusqlite = { version = "0.30.0", features = ["bundled"] }
+rusqlite = { version = "0.30.0", features = [] }
rustfix = { version = "0.7.0", path = "crates/rustfix" }
same-file = "1.0.6"
security-framework = "2.9.2"

@ -1,5 +1,5 @@
Name: rust Name: rust
Version: 1.76.0 Version: 1.75.0
Release: 1%{?dist} Release: 1%{?dist}
Summary: The Rust Programming Language Summary: The Rust Programming Language
License: (Apache-2.0 OR MIT) AND (Artistic-2.0 AND BSD-3-Clause AND ISC AND MIT AND MPL-2.0 AND Unicode-DFS-2016) License: (Apache-2.0 OR MIT) AND (Artistic-2.0 AND BSD-3-Clause AND ISC AND MIT AND MPL-2.0 AND Unicode-DFS-2016)
@ -14,9 +14,9 @@ ExclusiveArch: %{rust_arches}
# To bootstrap from scratch, set the channel and date from src/stage0.json # To bootstrap from scratch, set the channel and date from src/stage0.json
# e.g. 1.59.0 wants rustc: 1.58.0-2022-01-13 # e.g. 1.59.0 wants rustc: 1.58.0-2022-01-13
# or nightly wants some beta-YYYY-MM-DD # or nightly wants some beta-YYYY-MM-DD
%global bootstrap_version 1.75.0 %global bootstrap_version 1.74.0
%global bootstrap_channel 1.75.0 %global bootstrap_channel 1.74.0
%global bootstrap_date 2023-12-28 %global bootstrap_date 2023-11-16
# Only the specified arches will use bootstrap binaries. # Only the specified arches will use bootstrap binaries.
# NOTE: Those binaries used to be uploaded with every new release, but that was # NOTE: Those binaries used to be uploaded with every new release, but that was
@ -44,9 +44,10 @@ ExclusiveArch: %{rust_arches}
# We need CRT files for *-wasi targets, at least as new as the commit in # We need CRT files for *-wasi targets, at least as new as the commit in
# src/ci/docker/host-x86_64/dist-various-2/build-wasi-toolchain.sh # src/ci/docker/host-x86_64/dist-various-2/build-wasi-toolchain.sh
# (updated per https://github.com/rust-lang/rust/pull/96907)
%global wasi_libc_url https://github.com/WebAssembly/wasi-libc %global wasi_libc_url https://github.com/WebAssembly/wasi-libc
#global wasi_libc_ref wasi-sdk-21 #global wasi_libc_ref wasi-sdk-20
%global wasi_libc_ref 03b228e46bb02fcc5927253e1b8ad715072b1ae4 %global wasi_libc_ref bd950eb128bff337153de217b11270f948d04bb4
%global wasi_libc_name wasi-libc-%{wasi_libc_ref} %global wasi_libc_name wasi-libc-%{wasi_libc_ref}
%global wasi_libc_source %{wasi_libc_url}/archive/%{wasi_libc_ref}/%{wasi_libc_name}.tar.gz %global wasi_libc_source %{wasi_libc_url}/archive/%{wasi_libc_ref}/%{wasi_libc_name}.tar.gz
%global wasi_libc_dir %{_builddir}/%{wasi_libc_name} %global wasi_libc_dir %{_builddir}/%{wasi_libc_name}
@ -62,7 +63,7 @@ ExclusiveArch: %{rust_arches}
# We can also choose to just use Rust's bundled LLVM, in case the system LLVM # We can also choose to just use Rust's bundled LLVM, in case the system LLVM
# is insufficient. Rust currently requires LLVM 15.0+. # is insufficient. Rust currently requires LLVM 15.0+.
%global min_llvm_version 15.0.0 %global min_llvm_version 15.0.0
%global bundled_llvm_version 17.0.6 %global bundled_llvm_version 17.0.5
%bcond_with bundled_llvm %bcond_with bundled_llvm
# Requires stable libgit2 1.7, and not the next minor soname change. # Requires stable libgit2 1.7, and not the next minor soname change.
@ -84,15 +85,9 @@ ExclusiveArch: %{rust_arches}
%endif %endif
%if 0%{?__isa_bits} == 32 %if 0%{?__isa_bits} == 32
# Reduce rustc's own debuginfo and optimizations to conserve 32-bit memory. # Disable PGO on 32-bit to reduce build memory
# e.g. https://github.com/rust-lang/rust/issues/45854
%global enable_debuginfo --debuginfo-level=0 --debuginfo-level-std=2
%global enable_rust_opts --set rust.codegen-units-std=1
%bcond_with rustc_pgo %bcond_with rustc_pgo
%else %else
# Build rustc with full debuginfo, CGU=1, ThinLTO, and PGO.
%global enable_debuginfo --debuginfo-level=2
%global enable_rust_opts --set rust.codegen-units=1 --set rust.lto=thin
%bcond_without rustc_pgo %bcond_without rustc_pgo
%endif %endif
@ -123,18 +118,16 @@ Patch3: 0001-Let-environment-variables-override-some-default-CPUs.patch
Patch4: 0001-bootstrap-allow-disabling-target-self-contained.patch Patch4: 0001-bootstrap-allow-disabling-target-self-contained.patch
Patch5: 0002-set-an-external-library-path-for-wasm32-wasi.patch Patch5: 0002-set-an-external-library-path-for-wasm32-wasi.patch
# We don't want to use the bundled library in libsqlite3-sys # https://github.com/rust-lang/rust/pull/117982
Patch6: rustc-1.76.0-unbundle-sqlite.patch Patch6: 0001-bootstrap-only-show-PGO-warnings-when-verbose.patch
### RHEL-specific patches below ### ### RHEL-specific patches below ###
# Simple rpm macros for rust-toolset (as opposed to full rust-packaging) # Simple rpm macros for rust-toolset (as opposed to full rust-packaging)
Source100: macros.rust-toolset Source100: macros.rust-toolset
Source101: cargo_vendor.attr
Source102: cargo_vendor.prov
# Disable cargo->libgit2->libssh2 on RHEL, as it's not approved for FIPS (rhbz1732949) # Disable cargo->libgit2->libssh2 on RHEL, as it's not approved for FIPS (rhbz1732949)
Patch100: rustc-1.76.0-disable-libssh2.patch Patch100: rustc-1.75.0-disable-libssh2.patch
# Get the Rust triple for any arch. # Get the Rust triple for any arch.
%{lua: function rust_triple(arch) %{lua: function rust_triple(arch)
@ -204,7 +197,6 @@ BuildRequires: curl-devel
BuildRequires: pkgconfig(libcurl) BuildRequires: pkgconfig(libcurl)
BuildRequires: pkgconfig(liblzma) BuildRequires: pkgconfig(liblzma)
BuildRequires: pkgconfig(openssl) BuildRequires: pkgconfig(openssl)
BuildRequires: pkgconfig(sqlite3)
BuildRequires: pkgconfig(zlib) BuildRequires: pkgconfig(zlib)
%if %{without bundled_libgit2} %if %{without bundled_libgit2}
@ -594,7 +586,6 @@ mkdir -p src/llvm-project/libunwind/
%clear_dir vendor/*jemalloc-sys*/jemalloc/ %clear_dir vendor/*jemalloc-sys*/jemalloc/
%clear_dir vendor/libffi-sys*/libffi/ %clear_dir vendor/libffi-sys*/libffi/
%clear_dir vendor/libmimalloc-sys*/c_src/mimalloc/ %clear_dir vendor/libmimalloc-sys*/c_src/mimalloc/
%clear_dir vendor/libsqlite3-sys*/{sqlite3,sqlcipher}/
%clear_dir vendor/libssh2-sys*/libssh2/ %clear_dir vendor/libssh2-sys*/libssh2/
%clear_dir vendor/libz-sys*/src/zlib{,-ng}/ %clear_dir vendor/libz-sys*/src/zlib{,-ng}/
%clear_dir vendor/lzma-sys*/xz-*/ %clear_dir vendor/lzma-sys*/xz-*/
@ -647,19 +638,27 @@ find -name '*.rs' -type f -perm /111 -exec chmod -v -x '{}' '+'
print(env) print(env)
end} end}
# Set up shared environment variables for build/install/check. # Set up shared environment variables for build/install/check
# *_USE_PKG_CONFIG=1 convinces *-sys crates to use the system library. %global rust_env %{?rustflags:RUSTFLAGS="%{rustflags}"} %{rustc_target_cpus}
%global rust_env %{shrink: %if %without disabled_libssh2
%{?rustflags:RUSTFLAGS="%{rustflags}"} # convince libssh2-sys to use the distro libssh2
%{rustc_target_cpus} %global rust_env %{?rust_env} LIBSSH2_SYS_USE_PKG_CONFIG=1
LIBSQLITE3_SYS_USE_PKG_CONFIG=1 %endif
%{!?with_disabled_libssh2:LIBSSH2_SYS_USE_PKG_CONFIG=1} %global export_rust_env %{?rust_env:export %{rust_env}}
}
%global export_rust_env export %{rust_env}
%build %build
%{export_rust_env} %{export_rust_env}
%ifarch %{arm} %{ix86}
# full debuginfo and compiler opts are exhausting memory; just do libstd for now
# https://github.com/rust-lang/rust/issues/45854
%define enable_debuginfo --debuginfo-level=0 --debuginfo-level-std=2
%define enable_rust_opts --set rust.codegen-units-std=1
%else
%define enable_debuginfo --debuginfo-level=2
%define enable_rust_opts --set rust.codegen-units=1 --set rust.lto=thin
%endif
# Some builders have relatively little memory for their CPU count. # Some builders have relatively little memory for their CPU count.
# At least 2GB per CPU is a good rule of thumb for building rustc. # At least 2GB per CPU is a good rule of thumb for building rustc.
ncpus=$(/usr/bin/getconf _NPROCESSORS_ONLN) ncpus=$(/usr/bin/getconf _NPROCESSORS_ONLN)
@ -850,8 +849,6 @@ rm -f %{buildroot}%{rustlibdir}/%{rust_triple}/bin/rust-ll*
%if 0%{?rhel} %if 0%{?rhel}
# This allows users to build packages using Rust Toolset. # This allows users to build packages using Rust Toolset.
%{__install} -D -m 644 %{S:100} %{buildroot}%{rpmmacrodir}/macros.rust-toolset %{__install} -D -m 644 %{S:100} %{buildroot}%{rpmmacrodir}/macros.rust-toolset
%{__install} -D -m 644 %{S:101} %{buildroot}%{_fileattrsdir}/cargo_vendor.attr
%{__install} -D -m 755 %{S:102} %{buildroot}%{_rpmconfigdir}/cargo_vendor.prov
%endif %endif
@ -1033,16 +1030,10 @@ rm -rf "./build/%{rust_triple}/stage2-tools/%{rust_triple}/cit/"
%if 0%{?rhel} %if 0%{?rhel}
%files toolset %files toolset
%{rpmmacrodir}/macros.rust-toolset %{rpmmacrodir}/macros.rust-toolset
%{_fileattrsdir}/cargo_vendor.attr
%{_rpmconfigdir}/cargo_vendor.prov
%endif %endif
%changelog %changelog
* Tue Apr 16 2024 Josh Stone <jistone@redhat.com> - 1.76.0-1
- Update to 1.76.0.
- Sync rust-toolset macros to rust-packaging v25.2
* Fri Jan 05 2024 Josh Stone <jistone@redhat.com> - 1.75.0-1 * Fri Jan 05 2024 Josh Stone <jistone@redhat.com> - 1.75.0-1
- Update to 1.75.0. - Update to 1.75.0.

Loading…
Cancel
Save