Files
libradhook/Build.ps1
nexusverypro 3192afe07d initial commit
2026-07-03 02:00:27 +01:00

115 lines
2.7 KiB
PowerShell

param(
[ValidateSet("msvc", "gcc", "android")]
[string]$Target = "msvc",
[ValidateSet("Debug", "Release")]
[string]$Config = "Release",
[switch]$Clean,
[string]$AndroidNDK = $env:ANDROID_NDK_HOME,
[switch]$Static,
[switch]$RunTests
)
$ErrorActionPreference = "Stop"
$BuildDir = "build/$Target-$Config"
$Generator = ""
$Toolchain = ""
$ExtraArgs = @()
if ($Clean -and (Test-Path $BuildDir)) {
Remove-Item $BuildDir -Recurse -Force
}
switch ($Target) {
"msvc" {
$VsPath = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\2022\BuildTools\Common7\Tools\VsDevCmd.bat"
if (-not (Test-Path $VsPath)) {
$VsPath = "${env:ProgramFiles}\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat"
}
if (-not (Test-Path $VsPath)) {
throw "MSVC environment not found. Install Visual Studio C++ build tools."
}
cmd /c "`"$VsPath`" && set" | ForEach-Object {
if ($_ -match "^(.*?)=(.*)$") {
Set-Item -Path "env:$($matches[1])" -Value $matches[2]
}
}
$Generator = "Visual Studio 17 2022"
$Arch = "x64"
$ExtraArgs += "-A $Arch"
}
"gcc" {
$Generator = "Ninja"
$ExtraArgs += "-DCMAKE_C_COMPILER=gcc"
$ExtraArgs += "-DCMAKE_CXX_COMPILER=g++"
$ExtraArgs += "-DCMAKE_BUILD_TYPE=$Config"
}
"android" {
if (-not $AndroidNDK) {
throw "Android NDK path not set. Pass -AndroidNDK or set ANDROID_NDK_HOME."
}
$Generator = "Ninja"
$Toolchain = "$AndroidNDK/build/cmake/android.toolchain.cmake"
$ExtraArgs += "-DCMAKE_TOOLCHAIN_FILE=$Toolchain"
$ExtraArgs += "-DANDROID_ABI=arm64-v8a"
$ExtraArgs += "-DANDROID_PLATFORM=android-24"
$ExtraArgs += "-DCMAKE_BUILD_TYPE=$Config"
}
}
$SharedLibs = if ($Static) { "OFF" } else { "ON" }
$ExtraArgs += "-DBUILD_SHARED_LIBS=$SharedLibs"
Write-Host "=== Building RadHook ==="
Write-Host "Target: $Target"
Write-Host "Config: $Config"
Write-Host "Build dir: $BuildDir"
Write-Host "Shared libs: $SharedLibs"
Write-Host ""
cmake -S . -B $BuildDir -G $Generator @ExtraArgs
if ($LASTEXITCODE -ne 0) {
throw "CMake configure failed"
}
if ($Target -eq "msvc") {
cmake --build $BuildDir --config $Config
} else {
cmake --build $BuildDir
}
if ($LASTEXITCODE -ne 0) {
throw "Build failed"
}
if ($RunTests) {
Write-Host "`n=== Running tests ==="
if ($Target -eq "msvc") {
ctest --test-dir $BuildDir --build-config $Config --output-on-failure
} else {
ctest --test-dir $BuildDir --output-on-failure
}
if ($LASTEXITCODE -ne 0) {
throw "Tests failed"
}
}
Write-Host "`nBuild complete: $BuildDir"