mirror of
https://github.com/NaC-L/Mergen.git
synced 2026-05-12 09:40:34 +00:00
Pin rewrite CI clang-cl toolchain
This commit is contained in:
@@ -51,7 +51,8 @@ jobs:
|
||||
Install-ChocoPkg "ninja"
|
||||
Install-ChocoPkg "7zip"
|
||||
|
||||
- name: Resolve LLVM_DIR
|
||||
- name: Resolve LLVM 18 toolchain
|
||||
id: resolve_llvm
|
||||
shell: pwsh
|
||||
run: |
|
||||
$llvmVersion = "18.1.8"
|
||||
@@ -68,21 +69,91 @@ jobs:
|
||||
$llvmConfig = (Get-ChildItem -Path $llvmWork -Filter LLVMConfig.cmake -Recurse -File | Select-Object -First 1).FullName
|
||||
if (-not $llvmConfig) { throw "LLVMConfig.cmake not found after extracting $llvmArchiveName" }
|
||||
$llvmDir = Split-Path -Parent $llvmConfig
|
||||
$llvmRoot = Split-Path -Parent (Split-Path -Parent (Split-Path -Parent $llvmDir))
|
||||
$llvmBin = Join-Path $llvmRoot "bin"
|
||||
$clangCl = (Get-ChildItem -Path $llvmWork -Filter clang-cl.exe -Recurse -File | Select-Object -First 1).FullName
|
||||
if (-not $clangCl) { throw "clang-cl.exe not found after extracting $llvmArchiveName" }
|
||||
$llvmBin = Split-Path -Parent $clangCl
|
||||
"LLVM_DIR=$llvmDir" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
$clangCl = Join-Path $llvmBin "clang-cl.exe"
|
||||
if (Test-Path $clangCl) {
|
||||
"CLANG_CL_EXE=$clangCl" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
$llvmBin | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
||||
}
|
||||
"CLANG_CL_EXE=$clangCl" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
$llvmBin | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
||||
"llvm_dir=$llvmDir" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
|
||||
"llvm_bin=$llvmBin" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
|
||||
"clang_cl=$clangCl" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
|
||||
Write-Host "Resolved LLVM_DIR=$llvmDir"
|
||||
Write-Host "Resolved clang-cl=$clangCl"
|
||||
|
||||
- name: Resolve Rust toolchain contract
|
||||
id: resolve_rust
|
||||
shell: pwsh
|
||||
run: |
|
||||
$cargo = (Get-Command cargo -ErrorAction Stop).Source
|
||||
$cargoBin = Split-Path -Parent $cargo
|
||||
$rustToolchain = $env:RUSTUP_TOOLCHAIN
|
||||
if (-not $rustToolchain) {
|
||||
$active = @(& rustup show active-toolchain 2>$null)
|
||||
if ($LASTEXITCODE -eq 0 -and $active.Count -gt 0) {
|
||||
$rustToolchain = ($active[0] -split '\s+')[0]
|
||||
}
|
||||
}
|
||||
"CARGO_EXECUTABLE=$cargo" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
$cargoBin | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
||||
"cargo_exe=$cargo" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
|
||||
if ($rustToolchain) {
|
||||
"RUSTUP_TOOLCHAIN=$rustToolchain" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
"rust_toolchain=$rustToolchain" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
|
||||
}
|
||||
Write-Host "Resolved cargo=$cargo"
|
||||
if ($rustToolchain) { Write-Host "Resolved Rust toolchain=$rustToolchain" }
|
||||
|
||||
- name: Configure iced build
|
||||
env:
|
||||
LLVM_DIR: ${{ steps.resolve_llvm.outputs.llvm_dir }}
|
||||
CLANG_CL_EXE: ${{ steps.resolve_llvm.outputs.clang_cl }}
|
||||
CMAKE_C_COMPILER: ${{ steps.resolve_llvm.outputs.clang_cl }}
|
||||
CMAKE_CXX_COMPILER: ${{ steps.resolve_llvm.outputs.clang_cl }}
|
||||
CARGO_EXECUTABLE: ${{ steps.resolve_rust.outputs.cargo_exe }}
|
||||
RUSTUP_TOOLCHAIN: ${{ steps.resolve_rust.outputs.rust_toolchain }}
|
||||
run: cmd /c scripts\dev\configure_iced.cmd
|
||||
|
||||
- name: Assert pinned LLVM compiler in CMake cache
|
||||
shell: pwsh
|
||||
env:
|
||||
EXPECTED_CLANG_CL: ${{ steps.resolve_llvm.outputs.clang_cl }}
|
||||
EXPECTED_LLVM_DIR: ${{ steps.resolve_llvm.outputs.llvm_dir }}
|
||||
run: |
|
||||
$cachePath = Join-Path $PWD "build_iced/CMakeCache.txt"
|
||||
if (!(Test-Path $cachePath)) { throw "CMake cache not found at $cachePath" }
|
||||
$cache = Get-Content $cachePath
|
||||
function Get-CacheValue([string]$key) {
|
||||
$line = $cache | Where-Object { $_ -match "^${key}:(FILEPATH|PATH|STRING|UNINITIALIZED)=" } | Select-Object -First 1
|
||||
if (-not $line) { throw "Missing $key in $cachePath" }
|
||||
return ($line -split '=', 2)[1]
|
||||
}
|
||||
$expectedClang = (Resolve-Path $env:EXPECTED_CLANG_CL).Path
|
||||
$expectedLlvmDir = (Resolve-Path $env:EXPECTED_LLVM_DIR).Path
|
||||
$actualC = Get-CacheValue 'CMAKE_C_COMPILER'
|
||||
$actualCxx = Get-CacheValue 'CMAKE_CXX_COMPILER'
|
||||
$actualLlvmDir = Get-CacheValue 'LLVM_DIR'
|
||||
if ((Resolve-Path $actualC).Path -ine $expectedClang) { throw "Expected C compiler '$expectedClang' but cache has '$actualC'" }
|
||||
if ((Resolve-Path $actualCxx).Path -ine $expectedClang) { throw "Expected CXX compiler '$expectedClang' but cache has '$actualCxx'" }
|
||||
if ((Resolve-Path $actualLlvmDir).Path -ine $expectedLlvmDir) { throw "Expected LLVM_DIR '$expectedLlvmDir' but cache has '$actualLlvmDir'" }
|
||||
Write-Host "Pinned toolchain contract verified in build_iced/CMakeCache.txt"
|
||||
|
||||
- name: Build lifter
|
||||
env:
|
||||
LLVM_DIR: ${{ steps.resolve_llvm.outputs.llvm_dir }}
|
||||
CLANG_CL_EXE: ${{ steps.resolve_llvm.outputs.clang_cl }}
|
||||
CMAKE_C_COMPILER: ${{ steps.resolve_llvm.outputs.clang_cl }}
|
||||
CMAKE_CXX_COMPILER: ${{ steps.resolve_llvm.outputs.clang_cl }}
|
||||
CARGO_EXECUTABLE: ${{ steps.resolve_rust.outputs.cargo_exe }}
|
||||
RUSTUP_TOOLCHAIN: ${{ steps.resolve_rust.outputs.rust_toolchain }}
|
||||
run: cmd /c scripts\dev\build_iced.cmd
|
||||
|
||||
- name: Run rewrite gate
|
||||
env:
|
||||
LLVM_DIR: ${{ steps.resolve_llvm.outputs.llvm_dir }}
|
||||
CLANG_CL_EXE: ${{ steps.resolve_llvm.outputs.clang_cl }}
|
||||
CMAKE_C_COMPILER: ${{ steps.resolve_llvm.outputs.clang_cl }}
|
||||
CMAKE_CXX_COMPILER: ${{ steps.resolve_llvm.outputs.clang_cl }}
|
||||
CARGO_EXECUTABLE: ${{ steps.resolve_rust.outputs.cargo_exe }}
|
||||
RUSTUP_TOOLCHAIN: ${{ steps.resolve_rust.outputs.rust_toolchain }}
|
||||
run: ${{ matrix.gate.test_command }}
|
||||
@@ -44,7 +44,8 @@ jobs:
|
||||
run: |
|
||||
choco install ninja --no-progress -y
|
||||
|
||||
- name: Resolve LLVM 18
|
||||
- name: Resolve LLVM 18 toolchain
|
||||
id: resolve_llvm
|
||||
shell: pwsh
|
||||
run: |
|
||||
$llvmVersion = "18.1.8"
|
||||
@@ -65,20 +66,86 @@ jobs:
|
||||
if (-not $llvmConfig) { throw "LLVMConfig.cmake not found after extraction" }
|
||||
|
||||
$llvmDir = Split-Path -Parent $llvmConfig
|
||||
$llvmRoot = Split-Path -Parent (Split-Path -Parent (Split-Path -Parent $llvmDir))
|
||||
$llvmBin = Join-Path $llvmRoot "bin"
|
||||
$clangCl = (Get-ChildItem -Path $llvmWork -Filter clang-cl.exe -Recurse -File | Select-Object -First 1).FullName
|
||||
if (-not $clangCl) { throw "clang-cl.exe not found after extraction" }
|
||||
$llvmBin = Split-Path -Parent $clangCl
|
||||
|
||||
"LLVM_DIR=$llvmDir" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
if (Test-Path (Join-Path $llvmBin "clang-cl.exe")) {
|
||||
$llvmBin | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
||||
}
|
||||
"CLANG_CL_EXE=$clangCl" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
$llvmBin | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
||||
"llvm_dir=$llvmDir" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
|
||||
"llvm_bin=$llvmBin" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
|
||||
"clang_cl=$clangCl" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
|
||||
Write-Host "LLVM_DIR=$llvmDir"
|
||||
Write-Host "clang-cl=$clangCl"
|
||||
|
||||
- name: Resolve Rust toolchain contract
|
||||
if: ${{ matrix.needs_rust }}
|
||||
id: resolve_rust
|
||||
shell: pwsh
|
||||
run: |
|
||||
$cargo = (Get-Command cargo -ErrorAction Stop).Source
|
||||
$cargoBin = Split-Path -Parent $cargo
|
||||
$rustToolchain = $env:RUSTUP_TOOLCHAIN
|
||||
if (-not $rustToolchain) {
|
||||
$active = @(& rustup show active-toolchain 2>$null)
|
||||
if ($LASTEXITCODE -eq 0 -and $active.Count -gt 0) {
|
||||
$rustToolchain = ($active[0] -split '\s+')[0]
|
||||
}
|
||||
}
|
||||
"CARGO_EXECUTABLE=$cargo" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
$cargoBin | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
||||
"cargo_exe=$cargo" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
|
||||
if ($rustToolchain) {
|
||||
"RUSTUP_TOOLCHAIN=$rustToolchain" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
||||
"rust_toolchain=$rustToolchain" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
|
||||
}
|
||||
Write-Host "cargo=$cargo"
|
||||
if ($rustToolchain) { Write-Host "Rust toolchain=$rustToolchain" }
|
||||
|
||||
- name: Configure
|
||||
env:
|
||||
LLVM_DIR: ${{ steps.resolve_llvm.outputs.llvm_dir }}
|
||||
CLANG_CL_EXE: ${{ steps.resolve_llvm.outputs.clang_cl }}
|
||||
CMAKE_C_COMPILER: ${{ steps.resolve_llvm.outputs.clang_cl }}
|
||||
CMAKE_CXX_COMPILER: ${{ steps.resolve_llvm.outputs.clang_cl }}
|
||||
CARGO_EXECUTABLE: ${{ steps.resolve_rust.outputs.cargo_exe }}
|
||||
RUSTUP_TOOLCHAIN: ${{ steps.resolve_rust.outputs.rust_toolchain }}
|
||||
run: cmd /c ${{ matrix.configure_script }}
|
||||
|
||||
- name: Assert pinned LLVM compiler in CMake cache
|
||||
shell: pwsh
|
||||
env:
|
||||
BUILD_DIR: ${{ matrix.build_dir }}
|
||||
EXPECTED_CLANG_CL: ${{ steps.resolve_llvm.outputs.clang_cl }}
|
||||
EXPECTED_LLVM_DIR: ${{ steps.resolve_llvm.outputs.llvm_dir }}
|
||||
run: |
|
||||
$cachePath = Join-Path $PWD "$env:BUILD_DIR/CMakeCache.txt"
|
||||
if (!(Test-Path $cachePath)) { throw "CMake cache not found at $cachePath" }
|
||||
$cache = Get-Content $cachePath
|
||||
function Get-CacheValue([string]$key) {
|
||||
$line = $cache | Where-Object { $_ -match "^${key}:(FILEPATH|PATH|STRING|UNINITIALIZED)=" } | Select-Object -First 1
|
||||
if (-not $line) { throw "Missing $key in $cachePath" }
|
||||
return ($line -split '=', 2)[1]
|
||||
}
|
||||
$expectedClang = (Resolve-Path $env:EXPECTED_CLANG_CL).Path
|
||||
$expectedLlvmDir = (Resolve-Path $env:EXPECTED_LLVM_DIR).Path
|
||||
$actualC = Get-CacheValue 'CMAKE_C_COMPILER'
|
||||
$actualCxx = Get-CacheValue 'CMAKE_CXX_COMPILER'
|
||||
$actualLlvmDir = Get-CacheValue 'LLVM_DIR'
|
||||
if ((Resolve-Path $actualC).Path -ine $expectedClang) { throw "Expected C compiler '$expectedClang' but cache has '$actualC'" }
|
||||
if ((Resolve-Path $actualCxx).Path -ine $expectedClang) { throw "Expected CXX compiler '$expectedClang' but cache has '$actualCxx'" }
|
||||
if ((Resolve-Path $actualLlvmDir).Path -ine $expectedLlvmDir) { throw "Expected LLVM_DIR '$expectedLlvmDir' but cache has '$actualLlvmDir'" }
|
||||
Write-Host "Pinned toolchain contract verified in $env:BUILD_DIR/CMakeCache.txt"
|
||||
|
||||
- name: Build
|
||||
env:
|
||||
LLVM_DIR: ${{ steps.resolve_llvm.outputs.llvm_dir }}
|
||||
CLANG_CL_EXE: ${{ steps.resolve_llvm.outputs.clang_cl }}
|
||||
CMAKE_C_COMPILER: ${{ steps.resolve_llvm.outputs.clang_cl }}
|
||||
CMAKE_CXX_COMPILER: ${{ steps.resolve_llvm.outputs.clang_cl }}
|
||||
CARGO_EXECUTABLE: ${{ steps.resolve_rust.outputs.cargo_exe }}
|
||||
RUSTUP_TOOLCHAIN: ${{ steps.resolve_rust.outputs.rust_toolchain }}
|
||||
MERGEN_BUILD_JOBS: "4"
|
||||
run: cmd /c ${{ matrix.build_script }}
|
||||
|
||||
@@ -112,7 +179,6 @@ jobs:
|
||||
path: rewrite-microtests-windows-${{ matrix.variant }}.exe
|
||||
if-no-files-found: warn
|
||||
|
||||
|
||||
release:
|
||||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
needs: build
|
||||
|
||||
@@ -150,9 +150,9 @@ if exist "%BUILD_DIR%\CMakeCache.txt" (
|
||||
set "CACHED_CXX_COMPILER="
|
||||
set "CACHED_LLVM_DIR="
|
||||
set "RESET_BUILD_CACHE="
|
||||
for /f "tokens=1,* delims==" %%A in ('findstr /B /C:"CMAKE_C_COMPILER:FILEPATH=" "%BUILD_DIR%\CMakeCache.txt"') do set "CACHED_C_COMPILER=%%B"
|
||||
for /f "tokens=1,* delims==" %%A in ('findstr /B /C:"CMAKE_CXX_COMPILER:FILEPATH=" "%BUILD_DIR%\CMakeCache.txt"') do set "CACHED_CXX_COMPILER=%%B"
|
||||
for /f "tokens=1,* delims==" %%A in ('findstr /B /C:"LLVM_DIR:PATH=" "%BUILD_DIR%\CMakeCache.txt"') do set "CACHED_LLVM_DIR=%%B"
|
||||
for /f "tokens=1,* delims==" %%A in ('findstr /B /R /C:"CMAKE_C_COMPILER:[^=]*=" "%BUILD_DIR%\CMakeCache.txt"') do set "CACHED_C_COMPILER=%%B"
|
||||
for /f "tokens=1,* delims==" %%A in ('findstr /B /R /C:"CMAKE_CXX_COMPILER:[^=]*=" "%BUILD_DIR%\CMakeCache.txt"') do set "CACHED_CXX_COMPILER=%%B"
|
||||
for /f "tokens=1,* delims==" %%A in ('findstr /B /R /C:"LLVM_DIR:[^=]*=" "%BUILD_DIR%\CMakeCache.txt"') do set "CACHED_LLVM_DIR=%%B"
|
||||
if defined CACHED_C_COMPILER if /I not "!CACHED_C_COMPILER!"=="!MERGEN_C_COMPILER!" set "RESET_BUILD_CACHE=1"
|
||||
if defined CACHED_CXX_COMPILER if /I not "!CACHED_CXX_COMPILER!"=="!MERGEN_CXX_COMPILER!" set "RESET_BUILD_CACHE=1"
|
||||
if defined CACHED_LLVM_DIR if /I not "!CACHED_LLVM_DIR!"=="!LLVM_CMAKE_DIR!" set "RESET_BUILD_CACHE=1"
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
@echo off
|
||||
setlocal
|
||||
setlocal EnableDelayedExpansion
|
||||
|
||||
rem --- clang-cl auto-detects MSVC headers/libs; no VsDevCmd needed ---
|
||||
|
||||
:resolve_cmake
|
||||
::resolve_cmake
|
||||
set "CMAKE_BIN="
|
||||
for /f "usebackq delims=" %%I in (`where cmake 2^>nul`) do (
|
||||
set "CMAKE_BIN=%%I"
|
||||
@@ -17,8 +17,12 @@ if not defined CMAKE_BIN (
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
:resolve_llvm
|
||||
::resolve_llvm
|
||||
set "LLVM_CMAKE_DIR=%LLVM_DIR%"
|
||||
if defined LLVM_CMAKE_DIR if not exist "%LLVM_CMAKE_DIR%\LLVMConfig.cmake" (
|
||||
echo ERROR: LLVM_DIR is set but LLVMConfig.cmake was not found under "%LLVM_CMAKE_DIR%"
|
||||
exit /b 1
|
||||
)
|
||||
if not defined LLVM_CMAKE_DIR (
|
||||
if exist "%~dp0..\..\..\llvm18-install\lib\cmake\llvm\LLVMConfig.cmake" set "LLVM_CMAKE_DIR=%~dp0..\..\..\llvm18-install\lib\cmake\llvm"
|
||||
)
|
||||
@@ -34,24 +38,86 @@ set "LLVM_CLANG_CL="
|
||||
for %%I in ("%LLVM_CMAKE_DIR%\..\..\..\bin\clang-cl.exe") do if exist "%%~fI" set "LLVM_CLANG_CL=%%~fI"
|
||||
|
||||
set "MERGEN_C_COMPILER="
|
||||
if defined CLANG_CL_EXE set "MERGEN_C_COMPILER=%CLANG_CL_EXE%"
|
||||
if defined CLANG_CL_EXE (
|
||||
if exist "%CLANG_CL_EXE%" (
|
||||
set "MERGEN_C_COMPILER=%CLANG_CL_EXE%"
|
||||
) else (
|
||||
echo ERROR: CLANG_CL_EXE is set but could not be resolved: %CLANG_CL_EXE%
|
||||
exit /b 1
|
||||
)
|
||||
)
|
||||
if not defined MERGEN_C_COMPILER if defined CMAKE_C_COMPILER (
|
||||
if exist "%CMAKE_C_COMPILER%" (
|
||||
set "MERGEN_C_COMPILER=%CMAKE_C_COMPILER%"
|
||||
) else (
|
||||
echo ERROR: CMAKE_C_COMPILER is set but could not be resolved: %CMAKE_C_COMPILER%
|
||||
exit /b 1
|
||||
)
|
||||
)
|
||||
if not defined MERGEN_C_COMPILER if defined LLVM_CLANG_CL set "MERGEN_C_COMPILER=%LLVM_CLANG_CL%"
|
||||
if not defined MERGEN_C_COMPILER if defined CMAKE_C_COMPILER set "MERGEN_C_COMPILER=%CMAKE_C_COMPILER%"
|
||||
if not defined MERGEN_C_COMPILER set "MERGEN_C_COMPILER=clang-cl"
|
||||
set "MERGEN_CXX_COMPILER="
|
||||
if defined CLANG_CL_EXE set "MERGEN_CXX_COMPILER=%CLANG_CL_EXE%"
|
||||
if not defined MERGEN_CXX_COMPILER if defined LLVM_CLANG_CL set "MERGEN_CXX_COMPILER=%LLVM_CLANG_CL%"
|
||||
if not defined MERGEN_CXX_COMPILER if defined CMAKE_CXX_COMPILER set "MERGEN_CXX_COMPILER=%CMAKE_CXX_COMPILER%"
|
||||
if not defined MERGEN_CXX_COMPILER set "MERGEN_CXX_COMPILER=%MERGEN_C_COMPILER%"
|
||||
if not defined MERGEN_C_COMPILER (
|
||||
for /f "usebackq delims=" %%I in (`where clang-cl 2^>nul`) do (
|
||||
set "MERGEN_C_COMPILER=%%I"
|
||||
goto found_c_compiler
|
||||
)
|
||||
)
|
||||
if not defined MERGEN_C_COMPILER if exist "C:\Program Files\LLVM\bin\clang-cl.exe" set "MERGEN_C_COMPILER=C:\Program Files\LLVM\bin\clang-cl.exe"
|
||||
:found_c_compiler
|
||||
if not defined MERGEN_C_COMPILER (
|
||||
echo ERROR: clang-cl not found. Install LLVM, set LLVM_DIR, or set CLANG_CL_EXE.
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
:configure
|
||||
set "MERGEN_CXX_COMPILER="
|
||||
if defined CLANG_CL_EXE (
|
||||
if exist "%CLANG_CL_EXE%" (
|
||||
set "MERGEN_CXX_COMPILER=%CLANG_CL_EXE%"
|
||||
) else (
|
||||
echo ERROR: CLANG_CL_EXE is set but could not be resolved: %CLANG_CL_EXE%
|
||||
exit /b 1
|
||||
)
|
||||
)
|
||||
if not defined MERGEN_CXX_COMPILER if defined CMAKE_CXX_COMPILER (
|
||||
if exist "%CMAKE_CXX_COMPILER%" (
|
||||
set "MERGEN_CXX_COMPILER=%CMAKE_CXX_COMPILER%"
|
||||
) else (
|
||||
echo ERROR: CMAKE_CXX_COMPILER is set but could not be resolved: %CMAKE_CXX_COMPILER%
|
||||
exit /b 1
|
||||
)
|
||||
)
|
||||
if not defined MERGEN_CXX_COMPILER if defined LLVM_CLANG_CL set "MERGEN_CXX_COMPILER=%LLVM_CLANG_CL%"
|
||||
if not defined MERGEN_CXX_COMPILER set "MERGEN_CXX_COMPILER=%MERGEN_C_COMPILER%"
|
||||
for %%I in ("%MERGEN_C_COMPILER%") do set "MERGEN_COMPILER_BIN=%%~dpI"
|
||||
if defined MERGEN_COMPILER_BIN set "PATH=%MERGEN_COMPILER_BIN%;%PATH%"
|
||||
echo INFO: Using LLVM_DIR=%LLVM_CMAKE_DIR%
|
||||
echo INFO: Using C compiler=%MERGEN_C_COMPILER%
|
||||
echo INFO: Using CXX compiler=%MERGEN_CXX_COMPILER%
|
||||
|
||||
::resolve_cache
|
||||
if exist "%BUILD_DIR%\CMakeCache.txt" (
|
||||
echo INFO: Reconfiguring existing build_zydis cache for Zydis-only lane
|
||||
echo INFO: Clearing backend-selection cache keys to prevent stale backend state
|
||||
set "CMAKE_CACHE_CLEAR_ARGS=-UICED_* -UCARGO_EXECUTABLE -UBUILD_WITH_ZYDIS"
|
||||
set "CMAKE_CACHE_CLEAR_ARGS=-UICED_* -UCARGO_EXECUTABLE -URust_TOOLCHAIN -UBUILD_WITH_ZYDIS"
|
||||
set "CACHED_C_COMPILER="
|
||||
set "CACHED_CXX_COMPILER="
|
||||
set "CACHED_LLVM_DIR="
|
||||
set "RESET_BUILD_CACHE="
|
||||
for /f "tokens=1,* delims==" %%A in ('findstr /B /R /C:"CMAKE_C_COMPILER:[^=]*=" "%BUILD_DIR%\CMakeCache.txt"') do set "CACHED_C_COMPILER=%%B"
|
||||
for /f "tokens=1,* delims==" %%A in ('findstr /B /R /C:"CMAKE_CXX_COMPILER:[^=]*=" "%BUILD_DIR%\CMakeCache.txt"') do set "CACHED_CXX_COMPILER=%%B"
|
||||
for /f "tokens=1,* delims==" %%A in ('findstr /B /R /C:"LLVM_DIR:[^=]*=" "%BUILD_DIR%\CMakeCache.txt"') do set "CACHED_LLVM_DIR=%%B"
|
||||
if defined CACHED_C_COMPILER if /I not "!CACHED_C_COMPILER!"=="!MERGEN_C_COMPILER!" set "RESET_BUILD_CACHE=1"
|
||||
if defined CACHED_CXX_COMPILER if /I not "!CACHED_CXX_COMPILER!"=="!MERGEN_CXX_COMPILER!" set "RESET_BUILD_CACHE=1"
|
||||
if defined CACHED_LLVM_DIR if /I not "!CACHED_LLVM_DIR!"=="!LLVM_CMAKE_DIR!" set "RESET_BUILD_CACHE=1"
|
||||
if defined RESET_BUILD_CACHE (
|
||||
echo INFO: Clearing build_zydis cache because the requested toolchain changed
|
||||
if exist "%BUILD_DIR%\CMakeCache.txt" del /f /q "%BUILD_DIR%\CMakeCache.txt"
|
||||
if exist "%BUILD_DIR%\CMakeFiles" rmdir /s /q "%BUILD_DIR%\CMakeFiles"
|
||||
set "CMAKE_CACHE_CLEAR_ARGS="
|
||||
)
|
||||
) else (
|
||||
set "CMAKE_CACHE_CLEAR_ARGS="
|
||||
)
|
||||
|
||||
::configure
|
||||
"%CMAKE_BIN%" -G Ninja -S "%REPO_ROOT%" -B "%BUILD_DIR%" -DCMAKE_BUILD_TYPE=Release %CMAKE_CACHE_CLEAR_ARGS% -DLLVM_DIR="%LLVM_CMAKE_DIR%" -DBUILD_WITH_ZYDIS=ON -DCMAKE_C_COMPILER="%MERGEN_C_COMPILER%" -DCMAKE_CXX_COMPILER="%MERGEN_CXX_COMPILER%" -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
|
||||
exit /b %errorlevel%
|
||||
@@ -61,6 +61,10 @@ if defined CLANG_CL_EXE (
|
||||
for %%I in ("%LLVM_DIR%\..\..\..\bin\clang-cl.exe") do if exist "%%~fI" set "CLANG_CL_BIN=%%~fI"
|
||||
if not defined CLANG_CL_BIN echo INFO: LLVM_DIR is set but does not bundle clang-cl; falling back to compiler discovery
|
||||
)
|
||||
if not defined CLANG_CL_BIN if defined CI (
|
||||
echo ERROR: CI requires pinned clang-cl via CLANG_CL_EXE, CMAKE_C_COMPILER, or LLVM_DIR. Refusing host fallback.
|
||||
exit /b 1
|
||||
)
|
||||
if not defined CLANG_CL_BIN if exist "%~dp0..\..\..\llvm18-install\bin\clang-cl.exe" set "CLANG_CL_BIN=%~dp0..\..\..\llvm18-install\bin\clang-cl.exe"
|
||||
if not defined CLANG_CL_BIN (
|
||||
for /f "usebackq delims=" %%I in (`where clang-cl 2^>nul`) do (
|
||||
|
||||
Reference in New Issue
Block a user