Commit 1ecaa128 authored by Jesse Schwartzentruber's avatar Jesse Schwartzentruber Committed by jdschwa@gmail.com
Browse files

Bug 2053518 - Handle the *-oe-linux-* rust targets added in rustc 1.98 in rust...

Bug 2053518 - Handle the *-oe-linux-* rust targets added in rustc 1.98 in rust target detection. r=firefox-build-system-reviewers,glandium

Differential Revision: https://phabricator.services.mozilla.com/D311145
parent 1473f2ab
Loading
Loading
Loading
Loading
+25 −4
Original line number Diff line number Diff line
@@ -298,6 +298,10 @@ def detect_rustc_target(host_or_target, arm_target, rust_supported_targets):
        elif not candidates:
            return None

        # config.guess uses the "pc" vendor for x86/x86_64 where rust uses its
        # generic "unknown" vendor; normalize so we correlate on the right one.
        vendor = "unknown" if host_or_target.vendor == "pc" else host_or_target.vendor

        # 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 ABI
@@ -360,11 +364,19 @@ def detect_rustc_target(host_or_target, arm_target, rust_supported_targets):
            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.
@@ -393,6 +405,15 @@ def detect_rustc_target(host_or_target, arm_target, rust_supported_targets):
            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
+15 −0
Original line number Diff line number Diff line
@@ -1779,6 +1779,15 @@ def gen_invoke_rustc(version, rustup_wrapper=False):
                "xtensa-esp32s3-espidf",
                "xtensa-esp32s3-none-elf",
            ]
            # Additional targets from 1.98
            if Version(version) >= "1.98.0":
                rust_targets += [
                    "aarch64-oe-linux-gnu",
                    "armv7-oe-linux-gnueabihf",
                    "i686-oe-linux-gnu",
                    "riscv64-oe-linux-gnu",
                    "x86_64-oe-linux-gnu",
                ]
            return 0, "\n".join(sorted(rust_targets)), ""
        if (
            len(args) == 6
@@ -1869,6 +1878,7 @@ class RustTest(BaseConfigureTest):
            ("x86_64-unknown-linux-android", "x86_64-linux-android"),
            ("x86_64-unknown-linux-android21", "x86_64-linux-android"),
            ("x86_64-pc-linux-gnu", "x86_64-unknown-linux-gnu"),
            ("riscv64-unknown-linux-gnu", "riscv64gc-unknown-linux-gnu"),
            ("sparcv9-sun-solaris2", "sparcv9-sun-solaris"),
            ("x86_64-sun-solaris2", "x86_64-pc-solaris"),
            ("x86_64-apple-darwin23.3.0", "x86_64-apple-darwin"),
@@ -1970,5 +1980,10 @@ class RustTest(BaseConfigureTest):
        self.assertEqual(self.get_rust_target("wasm32-unknown-wasi"), "wasm32-wasip1")


# Exercises the vendor-specific *-oe-linux-* targets added in rust 1.98.
class Rust198Test(RustTest):
    VERSION = "1.98.0"


if __name__ == "__main__":
    main()