aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dev-lang/rust/files/1.82.0-i586-baseline.patch44
-rw-r--r--dev-lang/rust/rust-1.82.0.ebuild10
2 files changed, 53 insertions, 1 deletions
diff --git a/dev-lang/rust/files/1.82.0-i586-baseline.patch b/dev-lang/rust/files/1.82.0-i586-baseline.patch
new file mode 100644
index 0000000..25c4a1a
--- /dev/null
+++ b/dev-lang/rust/files/1.82.0-i586-baseline.patch
@@ -0,0 +1,44 @@
+Bug: https://bugs.gentoo.org/741708
+From: Ian Jordan <immoloism@gmail.com>
+Date: Thu, 01 Nov 204 15:28:39 +0100
+Subject: Change Pentium4 baseline to i586
+
+Based on the Debian patch at https://sources.debian.org/patches/rustc/1.80.1%2Bdfsg1-1/behaviour/d-rustc-i686-baseline.patch/
+This lowers baseline from Pentium4 to i586.
+
+Thanks-to: Debian Rust Maintainers <pkg-rust-maintainers@alioth-lists.debian.net>
+
+--- a/compiler/rustc_target/src/spec/targets/i686_unknown_linux_gnu.rs
++++ b/compiler/rustc_target/src/spec/targets/i686_unknown_linux_gnu.rs
+@@ -2,7 +2,7 @@ use crate::spec::{base, Cc, LinkerFlavor, Lld, SanitizerSet, StackProbeType, Tar
+
+ pub fn target() -> Target {
+ let mut base = base::linux_gnu::opts();
+- base.cpu = "pentium4".into();
++ base.cpu = "pentiumpro".into();
+ base.max_atomic_width = Some(64);
+ base.supported_sanitizers = SanitizerSet::ADDRESS;
+ base.add_pre_link_args(LinkerFlavor::Gnu(Cc::Yes, Lld::No), &["-m32"]);
+--- a/tests/ui/abi/homogenous-floats-target-feature-mixup.rs
++++ b/tests/ui/abi/homogenous-floats-target-feature-mixup.rs
+@@ -24,7 +24,8 @@ fn main() {
+ match std::env::var("TARGET") {
+ Ok(s) => {
+ // Skip this tests on i586-unknown-linux-gnu where sse2 is disabled
+- if s.contains("i586") {
++ // Debian: our i686 doesn't have SSE 2..
++ if s.contains("i586") || s.contains("i686") {
+ return
+ }
+ }
+--- a/tests/ui/sse2.rs
++++ b/tests/ui/sse2.rs
+@@ -16,7 +16,7 @@ fn main() {
+ }
+ Err(_) => return,
+ }
+- if cfg!(any(target_arch = "x86", target_arch = "x86_64")) {
++ if cfg!(any(target_arch = "x86_64")) {
+ assert!(cfg!(target_feature = "sse2"),
+ "SSE2 was not detected as available on an x86 platform");
+ }
diff --git a/dev-lang/rust/rust-1.82.0.ebuild b/dev-lang/rust/rust-1.82.0.ebuild
index 6f52248..bcdb8b6 100644
--- a/dev-lang/rust/rust-1.82.0.ebuild
+++ b/dev-lang/rust/rust-1.82.0.ebuild
@@ -129,7 +129,6 @@ REQUIRED_USE="|| ( ${ALL_LLVM_TARGETS[*]} )
rust-analyzer? ( rust-src )
test? ( ${ALL_LLVM_TARGETS[*]} )
wasm? ( llvm_targets_WebAssembly )
- x86? ( cpu_flags_x86_sse2 )
"
# we don't use cmake.eclass, but can get a warning
@@ -317,6 +316,15 @@ src_prepare() {
# clear_vendor_checksums "${i}"
#done
+ # Rust baselines to Pentium4 on x86, this patch lowers the baseline to i586 when sse2 is not set.
+ if use x86; then
+ if ! use cpu_flags_x86_sse2; then
+ eapply "${FILESDIR}/1.82.0-i586-baseline.patch"
+ # Required for i586 support, commented out until ready for wider use.
+ #grep -rl cmd.args.push\(\"-march=i686\" . | xargs sed -i 's/march=i686/-march=i586/g' || die
+ fi
+ fi
+
if ! use system-bootstrap; then
has_version sys-devel/gcc || esetup_unwind_hack
local rust_stage0_root="${WORKDIR}"/rust-stage0