From 6d357d4fe36c656cdf32aecd772c7e9b3e02b828 Mon Sep 17 00:00:00 2001 From: starr-openai Date: Wed, 13 May 2026 17:03:43 -0700 Subject: [PATCH] Filter unsupported ARM64 lld flag in archive probe --- .github/scripts/setup-dev-drive.ps1 | 47 +++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/.github/scripts/setup-dev-drive.ps1 b/.github/scripts/setup-dev-drive.ps1 index ccbf7657e8..428e782d74 100644 --- a/.github/scripts/setup-dev-drive.ps1 +++ b/.github/scripts/setup-dev-drive.ps1 @@ -102,6 +102,53 @@ function Export-MsvcEnvironment { throw "Windows linker not found at $linker" } + if ((Split-Path -Leaf $linker) -match "lld") { + $wrapperDir = Join-Path $env:RUNNER_TEMP "arm64-archive-lld-wrapper" + New-Item -Path $wrapperDir -ItemType Directory -Force | Out-Null + $wrapperPath = Join-Path $wrapperDir "lld-link-wrapper.exe" + @' +using System; +using System.Diagnostics; + +internal static class Program +{ + private static int Main(string[] args) + { + var linker = Environment.GetEnvironmentVariable("ARM64_ARCHIVE_REAL_LINKER"); + if (string.IsNullOrEmpty(linker)) + { + Console.Error.WriteLine("ARM64_ARCHIVE_REAL_LINKER is not set"); + return 1; + } + + var startInfo = new ProcessStartInfo(linker) + { + UseShellExecute = false, + }; + foreach (var arg in args) + { + if (!string.Equals(arg, "/arm64hazardfree", StringComparison.OrdinalIgnoreCase)) + { + startInfo.ArgumentList.Add(arg); + } + } + + using var process = Process.Start(startInfo); + if (process is null) + { + Console.Error.WriteLine($"Failed to start linker: {linker}"); + return 1; + } + + process.WaitForExit(); + return process.ExitCode; + } +} +'@ | Add-Type -Language CSharp -OutputAssembly $wrapperPath -OutputType ConsoleApplication + "ARM64_ARCHIVE_REAL_LINKER=$linker" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + $linker = $wrapperPath + } + Write-Output "Using Windows linker: $linker" "CARGO_TARGET_AARCH64_PC_WINDOWS_MSVC_LINKER=$linker" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append }