mirror of
https://gitea.wildfiregames.com/0ad/0ad.git
synced 2026-11-08 10:29:00 +00:00
Fix spidermonkey build rust target detection
Spidermonkey fails to build on newer Rust versions(>= 1.98) on `x86_64-pc-linux-gnu` or `x86_64-unknown-linux-gnu` targets due to target matching ambiguity introduced by new vendor targets. Fix this by backporting the upstream `detect_rustc_target` snapshot into a new patch `FixRustTargetDetection.diff`. Fixes: https://wildfiregames.com/forum/topic/169615-building-libraries-error-dont-know-how-to-translate-x86_64-pc-linux-gnu-for-rustc
This commit is contained in:
1 parent
3499f18091
commit
46a5570281
2 files changed
+108
No files matched your search
@@ -0,0 +1,103 @@
|
||||
From 03a717979ac27c7aed69eb95ae0b89e6287f965d Mon Sep 17 00:00:00 2001
|
||||
From: Bowen Ho <bowen951209@gmail.com>
|
||||
Date: Sun, 25 Oct 2026 09:25:31 +0800
|
||||
Subject: [PATCH] Fix rust target detection
|
||||
|
||||
rustc 1.98 added `*-oe-linux-*` targets, so a host with another vendor, such
|
||||
as `aarch64-pld-linux-gnu`, matched both the `unknown` and the `oe` target and
|
||||
configure could not pick one.
|
||||
|
||||
Update detect_rustc_target from snapshot
|
||||
https://github.com/mozilla-firefox/firefox/commit/2905c758c195388b3d371f1b615b1c5a9c6e1226
|
||||
|
||||
This can be dropped when we update to spidermonkey 140, where the patch
|
||||
was backported.
|
||||
---
|
||||
build/moz.configure/rust.configure | 52 ++++++++++++++++++++++--------
|
||||
1 file changed, 39 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/build/moz.configure/rust.configure b/build/moz.configure/rust.configure
|
||||
index acac34ec0559..bc62ed1e020f 100644
|
||||
--- a/build/moz.configure/rust.configure
|
||||
+++ b/build/moz.configure/rust.configure
|
||||
@@ -302,19 +302,20 @@ def detect_rustc_target(
|
||||
elif not candidates:
|
||||
return None
|
||||
|
||||
+ vendor = (
|
||||
+ host_or_target.vendor
|
||||
+ if any(c.target.vendor == host_or_target.vendor for c in candidates)
|
||||
+ else "unknown"
|
||||
+ )
|
||||
+
|
||||
# We have multiple candidates. There are two cases where we can try to
|
||||
# narrow further down using extra information from the build system.
|
||||
- # - For windows targets, correlate with the C compiler type
|
||||
+ # - For windows targets, correlate with the ABI
|
||||
if host_or_target.kernel == "WINNT":
|
||||
- if host_or_target.abi:
|
||||
- if host_or_target.abi == "msvc":
|
||||
- suffix = "windows-msvc"
|
||||
- elif host_or_target.abi == "mingw":
|
||||
- suffix = "windows-gnu"
|
||||
- elif compiler_info.type in ("gcc", "clang"):
|
||||
- suffix = "windows-gnu"
|
||||
- else:
|
||||
+ if host_or_target.abi == "msvc":
|
||||
suffix = "windows-msvc"
|
||||
+ elif host_or_target.abi == "mingw":
|
||||
+ suffix = "windows-gnullvm"
|
||||
narrowed = [
|
||||
c for c in candidates if c.rust_target.endswith("-{}".format(suffix))
|
||||
]
|
||||
@@ -369,11 +370,19 @@ def detect_rustc_target(
|
||||
else:
|
||||
suffix = ""
|
||||
for p in prefixes:
|
||||
- for c in candidates:
|
||||
- if c.rust_target.startswith(
|
||||
- "{}-".format(p)
|
||||
- ) and c.rust_target.endswith(suffix):
|
||||
+ matches = [
|
||||
+ c
|
||||
+ for c in candidates
|
||||
+ if c.rust_target.startswith("{}-".format(p))
|
||||
+ and c.rust_target.endswith(suffix)
|
||||
+ ]
|
||||
+ if not matches:
|
||||
+ continue
|
||||
+ # As below, correlate on the (normalized) vendor.
|
||||
+ for c in matches:
|
||||
+ if c.target.vendor == vendor:
|
||||
return c.rust_target
|
||||
+ return matches[0].rust_target
|
||||
|
||||
# See if we can narrow down on the exact alias.
|
||||
# We use the sub_configure_alias to keep support mingw32 triplets as input.
|
||||
@@ -394,6 +403,23 @@ def detect_rustc_target(
|
||||
elif narrowed:
|
||||
candidates = narrowed
|
||||
|
||||
+ # The wasm32-wasi target was renamed to wasm32-wasip1
|
||||
+ if host_or_target.raw_os == "wasi":
|
||||
+ narrowed = [c for c in candidates if c.target.raw_os == "wasip1"]
|
||||
+ if len(narrowed) == 1:
|
||||
+ return narrowed[0].rust_target
|
||||
+ elif narrowed:
|
||||
+ candidates = narrowed
|
||||
+
|
||||
+ # Correlate on the (normalized) vendor, so vendor-specific targets (e.g.
|
||||
+ # the *-oe-linux-gnu targets added in rust 1.98) don't shadow the
|
||||
+ # generic ones for aliases whose vendor doesn't match a rust target.
|
||||
+ narrowed = [c for c in candidates if c.target.vendor == vendor]
|
||||
+ if len(narrowed) == 1:
|
||||
+ return narrowed[0].rust_target
|
||||
+ elif narrowed:
|
||||
+ candidates = narrowed
|
||||
+
|
||||
# See if we can narrow down with the raw OS and raw CPU
|
||||
narrowed = [
|
||||
c
|
||||
--
|
||||
2.56.0
|
||||
|
||||
@@ -11,6 +11,11 @@ PATCHES="../patches"
|
||||
# https://bugzilla.mozilla.org/show_bug.cgi?id=1588340
|
||||
patch -p1 <"${PATCHES}"/FixRustLinkage.diff
|
||||
|
||||
# Fix rustc target detection error on Linux for newer Rust versions (>= 1.98).
|
||||
# https://bugzilla.mozilla.org/show_bug.cgi?id=2053518
|
||||
# https://bugzilla.mozilla.org/show_bug.cgi?id=2068205
|
||||
patch -p1 <"${PATCHES}"/FixRustTargetDetection.diff
|
||||
|
||||
# Differentiate debug/release library names.
|
||||
patch -p1 <"${PATCHES}"/FixLibNames.diff
|
||||
|
||||
|
||||
Reference in new issue
Block a user