CI: build windows clang-cl
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
# .ci/build-windows-clang-cl.ps1
|
||||
# Enable strict error handling
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
trap {
|
||||
Write-Host "ERROR: $($_.Exception.Message)"
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host "Starting RPCS3 build (PowerShell script)"
|
||||
|
||||
# Automatically find clang_rt.builtins-x86_64.lib
|
||||
Write-Host "Searching for clang_rt.builtins-x86_64.lib ..."
|
||||
$clangBuiltinsLibPath = Get-ChildItem -Path "C:/Program Files/LLVM/lib/clang" -Recurse -Filter "clang_rt.builtins-x86_64.lib" -ErrorAction SilentlyContinue |
|
||||
Where-Object { $_.FullName -match "windows\\clang_rt\.builtins-x86_64\.lib$" } |
|
||||
Select-Object -First 1
|
||||
|
||||
if (-not $clangBuiltinsLibPath) {
|
||||
Write-Error "Could not find clang_rt.builtins-x86_64.lib in LLVM installation."
|
||||
exit 1
|
||||
}
|
||||
function Get-ShortPath([string]$path) {
|
||||
$fso = New-Object -ComObject Scripting.FileSystemObject
|
||||
return $fso.GetFolder($path).ShortPath
|
||||
}
|
||||
|
||||
$clangBuiltinsDir = Split-Path -Parent $clangBuiltinsLibPath.FullName
|
||||
$clangBuiltinsDirShort = Get-ShortPath $clangBuiltinsDir
|
||||
$clangBuiltinsLib = Split-Path -Leaf $clangBuiltinsLibPath.FullName
|
||||
$clangPath = "C:/Program Files/LLVM/bin"
|
||||
|
||||
Write-Host "Found Clang builtins library: $clangBuiltinsLib in $clangBuiltinsDir or short $clangBuiltinsDirShort"
|
||||
|
||||
# Get Windows Kits root from registry
|
||||
$kitsRoot = Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows Kits\Installed Roots" -Name "KitsRoot10"
|
||||
$kitsRootPath = $kitsRoot.KitsRoot10
|
||||
|
||||
# Search for mt.exe in x64 SDK bin directories
|
||||
Write-Host "Searching for mt.exe ..."
|
||||
$mtPath = Get-ChildItem -Path "$kitsRootPath\bin" -Recurse -Filter "mt.exe" -ErrorAction SilentlyContinue |
|
||||
Where-Object { $_.FullName -match "\\x64\\mt\.exe$" } |
|
||||
Sort-Object FullName -Descending |
|
||||
Select-Object -First 1
|
||||
|
||||
if (-not $mtPath) {
|
||||
Write-Error "Could not find mt.exe in Windows Kits directories."
|
||||
exit 1
|
||||
}
|
||||
|
||||
$mtExePath = $mtPath.FullName
|
||||
|
||||
Write-Host "Found mt.exe at: $mtExePath"
|
||||
|
||||
$VcpkgRoot="$(Get-Location)/vcpkg"
|
||||
$VcpkgTriplet=$env:VCPKG_TRIPLET
|
||||
$VcpkgInclude="$VcpkgRoot/installed/$VcpkgTriplet/include"
|
||||
$VcpkgLib="$VcpkgRoot/installed/$VcpkgTriplet/lib"
|
||||
|
||||
# Configure git safe directory
|
||||
Write-Host "Configuring git safe directory"
|
||||
& git config --global --add safe.directory '*'
|
||||
|
||||
# Initialize submodules except certain ones
|
||||
Write-Host "Initializing submodules"
|
||||
$excludedSubs = @('llvm','opencv','ffmpeg','FAudio','zlib','libpng','feralinteractive')
|
||||
|
||||
# Get submodule paths excluding those in $excludedSubs
|
||||
$submodules = Select-String -Path .gitmodules -Pattern 'path = (.+)' | ForEach-Object {
|
||||
$_.Matches[0].Groups[1].Value
|
||||
} | Where-Object {
|
||||
$path = $_
|
||||
-not ($excludedSubs | Where-Object { $path -like "*$_*" })
|
||||
}
|
||||
|
||||
Write-Host "Updating submodules: $($submodules -join ', ')"
|
||||
& git submodule update --init --quiet $submodules
|
||||
|
||||
# Create and enter build directory
|
||||
Write-Host "Creating build directory"
|
||||
if (!(Test-Path build)) {
|
||||
New-Item -ItemType Directory -Path build | Out-Null
|
||||
}
|
||||
Set-Location build
|
||||
Write-Host "Changed directory to: $(Get-Location)"
|
||||
|
||||
# Run CMake with Ninja generator and required flags
|
||||
Write-Host "Running CMake configuration"
|
||||
& cmake .. `
|
||||
-G Ninja `
|
||||
-DCMAKE_BUILD_TYPE=Release `
|
||||
-DCMAKE_C_COMPILER="$clangPath/clang-cl.exe" `
|
||||
-DCMAKE_CXX_COMPILER="$clangPath/clang-cl.exe" `
|
||||
-DCMAKE_LINKER="$clangPath/lld-link.exe" `
|
||||
-DCMAKE_INSTALL_PREFIX=/usr `
|
||||
-DCMAKE_TOOLCHAIN_FILE="$VcpkgRoot/scripts/buildsystems/vcpkg.cmake" `
|
||||
-DCMAKE_EXE_LINKER_FLAGS="/LIBPATH:$clangBuiltinsDirShort /defaultlib:$clangBuiltinsLib" `
|
||||
-DCMAKE_MT="$mtExePath" `
|
||||
-DUSE_NATIVE_INSTRUCTIONS=OFF `
|
||||
-DUSE_PRECOMPILED_HEADERS=OFF `
|
||||
-DVCPKG_TARGET_TRIPLET="$VcpkgTriplet" `
|
||||
-DFFMPEG_INCLUDE_DIR="$VcpkgInclude" `
|
||||
-DFFMPEG_LIBAVCODEC="$VcpkgLib/avcodec.lib" `
|
||||
-DFFMPEG_LIBAVFORMAT="$VcpkgLib/avformat.lib" `
|
||||
-DFFMPEG_LIBAVUTIL="$VcpkgLib/avutil.lib" `
|
||||
-DFFMPEG_LIBSWSCALE="$VcpkgLib/swscale.lib" `
|
||||
-DFFMPEG_LIBSWRESAMPLE="$VcpkgLib/swresample.lib" `
|
||||
-DUSE_SYSTEM_CURL=OFF `
|
||||
-DUSE_FAUDIO=OFF `
|
||||
-DUSE_SDL=ON `
|
||||
-DUSE_SYSTEM_SDL=OFF `
|
||||
-DUSE_SYSTEM_FFMPEG=ON `
|
||||
-DUSE_SYSTEM_OPENCV=ON `
|
||||
-DUSE_SYSTEM_OPENAL=OFF `
|
||||
-DUSE_SYSTEM_LIBPNG=ON `
|
||||
-DUSE_DISCORD_RPC=ON `
|
||||
-DOpenGL_GL_PREFERENCE=LEGACY `
|
||||
-DWITH_LLVM=ON `
|
||||
-DSTATIC_LINK_LLVM=ON `
|
||||
-DBUILD_RPCS3_TESTS=OFF `
|
||||
-DRUN_RPCS3_TESTS=OFF
|
||||
Write-Host "CMake configuration complete"
|
||||
|
||||
# Build with ninja
|
||||
Write-Host "Starting build with Ninja..."
|
||||
& ninja
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Host "Build failed with exit code $LASTEXITCODE"
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host "Build succeeded"
|
||||
|
||||
# Go back to root directory
|
||||
Set-Location ..
|
||||
Write-Host "Returned to root directory: $(Get-Location)"
|
||||
|
||||
# Deploy if build succeeded
|
||||
Write-Host "Running deployment script"
|
||||
& .ci/deploy-windows-clang-cl.sh x86_64
|
||||
Reference in New Issue
Block a user