Skip to content

Commit 95402cd

Browse files
committed
fix(ci): improve LLVM detection for Windows ARM64 release builds
The previous fix only checked 2 LLVM paths (Enterprise and BuildTools). This update: - Adds all Visual Studio editions (Enterprise, Professional, Community, BuildTools) - Checks both 'Program Files (x86)' and 'Program Files' directories - Falls back to searching for clang.exe recursively if not in standard paths - As last resort, installs LLVM via chocolatey to ensure builds succeed This should fix the 'failed to find tool clang: program not found' error from cc-rs when building the ring crate on Windows ARM64.
1 parent 5a02c33 commit 95402cd

File tree

1 file changed

+38
-15
lines changed

1 file changed

+38
-15
lines changed

.github/workflows/release.yml

Lines changed: 38 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -167,23 +167,46 @@ jobs:
167167
if: matrix.target == 'aarch64-pc-windows-msvc'
168168
shell: pwsh
169169
run: |
170-
# Add Visual Studio's LLVM to PATH for ring crate compilation
171-
$llvmPath = "C:\Program Files (x86)\Microsoft Visual Studio\2022\Enterprise\VC\Tools\Llvm\x64\bin"
172-
if (Test-Path $llvmPath) {
173-
echo "Adding LLVM path: $llvmPath"
174-
echo "$llvmPath" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
175-
} else {
176-
# Fallback for BuildTools installation
177-
$llvmPath = "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\Llvm\x64\bin"
178-
if (Test-Path $llvmPath) {
179-
echo "Adding LLVM path (BuildTools): $llvmPath"
180-
echo "$llvmPath" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
181-
} else {
182-
echo "WARNING: LLVM path not found. Build may fail."
183-
echo "Searching for clang..."
184-
Get-ChildItem -Path "C:\Program Files*" -Recurse -Filter "clang.exe" -ErrorAction SilentlyContinue | Select-Object -First 5 | ForEach-Object { echo $_.FullName }
170+
# Try all known Visual Studio LLVM paths for cross-compiling to ARM64
171+
$llvmPaths = @(
172+
"C:\Program Files (x86)\Microsoft Visual Studio\2022\Enterprise\VC\Tools\Llvm\x64\bin",
173+
"C:\Program Files (x86)\Microsoft Visual Studio\2022\Professional\VC\Tools\Llvm\x64\bin",
174+
"C:\Program Files (x86)\Microsoft Visual Studio\2022\Community\VC\Tools\Llvm\x64\bin",
175+
"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\Llvm\x64\bin",
176+
"C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\Llvm\x64\bin",
177+
"C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\Llvm\x64\bin",
178+
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\Llvm\x64\bin",
179+
"C:\Program Files\Microsoft Visual Studio\2022\BuildTools\VC\Tools\Llvm\x64\bin"
180+
)
181+
182+
$found = $false
183+
foreach ($path in $llvmPaths) {
184+
if (Test-Path $path) {
185+
echo "Found LLVM at: $path"
186+
echo "$path" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
187+
$found = $true
188+
break
189+
}
190+
}
191+
192+
if (-not $found) {
193+
echo "Visual Studio LLVM not found in standard paths. Searching..."
194+
$clangExe = Get-ChildItem -Path "C:\Program Files*" -Recurse -Filter "clang.exe" -ErrorAction SilentlyContinue |
195+
Where-Object { $_.FullName -match "LLVM|Llvm" } |
196+
Select-Object -First 1
197+
if ($clangExe) {
198+
$clangDir = Split-Path $clangExe.FullName -Parent
199+
echo "Found clang at: $clangDir"
200+
echo "$clangDir" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
201+
$found = $true
185202
}
186203
}
204+
205+
if (-not $found) {
206+
echo "::error::LLVM/Clang not found. Installing via choco..."
207+
choco install llvm -y --no-progress
208+
echo "C:\Program Files\LLVM\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
209+
}
187210
188211
- name: Build release binary
189212
run: cargo +nightly build --release --target ${{ matrix.target }} -p cortex-cli

0 commit comments

Comments
 (0)