41 lines
2.5 KiB
PowerShell
41 lines
2.5 KiB
PowerShell
[CmdletBinding()]
|
|
param([string]$SourceRoot, [string]$BuildRoot, [int]$Jobs = 4)
|
|
$ErrorActionPreference = 'Stop'
|
|
$repo = [IO.Path]::GetFullPath((Join-Path $PSScriptRoot '../..'))
|
|
if (!$SourceRoot) { $SourceRoot = Join-Path $repo 'external/ZLUDA' }
|
|
if (!$BuildRoot) { $BuildRoot = Join-Path $repo 'build/zluda-llvm-windows-gnu' }
|
|
$toolchain = Join-Path $repo '.tools/llvm-mingw-20260922-ucrt-x86_64'
|
|
$cmake = Join-Path $repo '.tools/python/cmake/data/bin/cmake.exe'
|
|
$ninja = Join-Path $repo '.tools/python/bin/ninja.exe'
|
|
if (!(Test-Path $ninja)) { $ninja = Join-Path $repo '.tools/python/ninja/data/bin/ninja.exe' }
|
|
if (!(Test-Path (Join-Path $SourceRoot 'ext/llvm-project/llvm/CMakeLists.txt'))) {
|
|
throw 'Run git submodule update --init --depth 1 ext/llvm-project in the ZLUDA checkout.'
|
|
}
|
|
New-Item -ItemType Directory -Force $BuildRoot | Out-Null
|
|
$oldPath = $env:PATH
|
|
try {
|
|
$env:PATH = "$(Join-Path $toolchain 'bin');$oldPath"
|
|
$arguments = @('-S', (Join-Path $SourceRoot 'ext/llvm-project/llvm'), '-B', $BuildRoot,
|
|
'-G', 'Ninja', "-DCMAKE_MAKE_PROGRAM=$ninja", '-DCMAKE_BUILD_TYPE=Release',
|
|
"-DCMAKE_C_COMPILER=$(Join-Path $toolchain 'bin/x86_64-w64-mingw32-clang.exe')",
|
|
"-DCMAKE_CXX_COMPILER=$(Join-Path $toolchain 'bin/x86_64-w64-mingw32-clang++.exe')",
|
|
'-DLLVM_TARGETS_TO_BUILD=AMDGPU', '-DLLVM_ENABLE_PROJECTS=llvm;lld',
|
|
'-DLLVM_ENABLE_WARNINGS=OFF', '-DLLVM_ENABLE_TERMINFO=OFF', '-DLLVM_ENABLE_LIBXML2=OFF',
|
|
'-DLLVM_ENABLE_LIBEDIT=OFF', '-DLLVM_ENABLE_LIBPFM=OFF', '-DLLVM_ENABLE_ZLIB=OFF',
|
|
'-DLLVM_ENABLE_ZSTD=OFF', '-DLLVM_INCLUDE_BENCHMARKS=OFF', '-DLLVM_INCLUDE_EXAMPLES=OFF',
|
|
'-DLLVM_INCLUDE_TESTS=OFF', '-DLLVM_BUILD_TESTS=OFF', '-DLLVM_BUILD_TOOLS=OFF',
|
|
'-DLLVM_OPTIMIZED_TABLEGEN=ON', '-DLLVM_PARALLEL_LINK_JOBS=1')
|
|
$ErrorActionPreference = 'Continue'
|
|
& $cmake @arguments 2>&1 | Tee-Object (Join-Path $BuildRoot 'configure.log')
|
|
$ErrorActionPreference = 'Stop'
|
|
if ($LASTEXITCODE) { throw "LLVM configure failed ($LASTEXITCODE)" }
|
|
$ErrorActionPreference = 'Continue'
|
|
& $cmake --build $BuildRoot --parallel $Jobs --target llvm-config llvm-libraries lldCommon lldELF `
|
|
2>&1 | Tee-Object (Join-Path $BuildRoot 'build.log')
|
|
$ErrorActionPreference = 'Stop'
|
|
if ($LASTEXITCODE) { throw "LLVM build failed ($LASTEXITCODE)" }
|
|
& (Join-Path $BuildRoot 'bin/llvm-config.exe') --version
|
|
if ($LASTEXITCODE) { throw 'llvm-config verification failed' }
|
|
Write-Host "Native Windows LLVM: $BuildRoot"
|
|
} finally { $env:PATH = $oldPath }
|