Files
2026-06-14 19:09:18 +01:00

220 lines
7.8 KiB
PowerShell

# Copyright 2022 The Khronos Group Inc.
# SPDX-License-Identifier: Apache-2.0
# Allow setting of variables on the command line. A command line parameter
# must look like (including the quotes shown) '$VAR="string"'. Spaces
# around the equals are acceptable.
# Since the cmake Visual Studio generator generates multi-config build
# trees, CONFIGURATION can be a comma separated list of the config_displays
# to build
for ($i=0; $i -lt $args.length; $i++)
{
Invoke-Expression $($args[$i])
}
function Set-ConfigVariable {
param ( $VariableName, $DefaultValue )
$res = get-variable $VariableName -ValueOnly -ErrorAction 'SilentlyContinue'
if ([string]::IsNullOrEmpty($res)) {
$res = [Environment]::GetEnvironmentVariable($VariableName)
if ($res -eq $null) {
$res = $DefaultValue
}
}
return $res
}
# Build for the local machine by default.
# NOTE: See comment around line 25 in ./install_win.ps1.
$found = (Get-ComputerInfo).CsSystemType -match "(?<arch>.*)-based PC"
$defaultArch = $matches['arch'].toLower()
# These defaults are here to permit easy running of the script locally
# when debugging is needed. Use local variables to avoid polluting the
# environment. Some cases have been observed where setting env. var's
# here sets them for the parent as well.
$ARCH = Set-ConfigVariable ARCH $defaultArch
if ($ARCH -ne "x64" -and $ARCH -ne "arm64") {
echo "KTX build for Windows does not support $ARCH architecture."
echo "Only amd64 and arm64 are supported."
exit 1
}
$BUILD_DIR = Set-ConfigVariable BUILD_DIR "build/build-batch-vs2022"
$CONFIGURATION = Set-ConfigVariable CONFIGURATION "Release"
$CMAKE_GEN = Set-ConfigVariable CMAKE_GEN "Visual Studio 17 2022"
$CMAKE_TOOLSET = Set-ConfigVariable CMAKE_TOOLSET ""
$FEATURE_DOC = Set-ConfigVariable FEATURE_DOC "OFF"
$FEATURE_JNI = Set-ConfigVariable FEATURE_JNI "OFF"
if ($ARCH -eq $defaultArch) {
$FEATURE_LOADTESTS = Set-ConfigVariable FEATURE_LOADTESTS "OpenGL+Vulkan"
} else {
$FEATURE_LOADTESTS = Set-ConfigVariable FEATURE_LOADTESTS "OpenGL"
}
if ($FEATURE_LOADTESTS -match "Vulkan" -and $ARCH -ne $defaultArch) {
echo "The Vulkan SDK does not support cross-compilation of Vulkan apps."
echo "Removing `"Vulkan`" from FEATURE_LOADTESTS."
$FEATURE_LOADTESTS = $FEATURE_LOADTESTS -replace "\+?Vulkan"
if (-not $FEATURE_LOADTESTS) {
$FEATURE_LOADTESTS = "OFF"
}
}
$FEATURE_PY = Set-ConfigVariable FEATURE_PY "OFF"
$FEATURE_TESTS = Set-ConfigVariable FEATURE_TESTS "ON"
$FEATURE_TOOLS = Set-ConfigVariable FEATURE_TOOLS "ON"
$FEATURE_TOOLS_CTS = Set-ConfigVariable FEATURE_TOOLS_CTS "ON"
$PACKAGE = Set-ConfigVariable PACKAGE "NO"
$PYTHON = Set-ConfigVariable PYTHON ""
$SUPPORT_SSE = Set-ConfigVariable SUPPORT_SSE "ON"
$SUPPORT_OPENCL = Set-ConfigVariable SUPPORT_OPENCL "OFF"
$PY_USE_VENV = Set-ConfigVariable PY_USE_VENV "OFF"
$WERROR = Set-ConfigVariable WERROR "OFF"
if ($ARCH -eq 'x64') {
$OPENGL_ES_EMULATOR = Set-ConfigVariable OPENGL_ES_EMULATOR `
"c:/Imagination` Technologies/PowerVR_Graphics/PowerVR_Tools/PVRVFrame/Library/Windows_x86_64"
} else {
$OPENGL_ES_EMULATOR = Set-ConfigVariable OPENGL_ES_EMULATOR ""
}
$CODE_SIGN_KEY_VAULT = Set-ConfigVariable CODE_SIGN_KEY_VAULT ""
$CODE_SIGN_TIMESTAMP_URL = Set-ConfigVariable CODE_SIGN_TIMESTAMP_URL ""
$LOCAL_KEY_VAULT_SIGNING_IDENTITY = Set-ConfigVariable LOCAL_KEY_VAULT_SIGNING_IDENTITY ""
$LOCAL_KEY_VAULT_CERTIFICATE_THUMBPRINT = Set-ConfigVariable LOCAL_KEY_VAULT_CERTIFICATE_THUMBPRINT ""
$AZURE_KEY_VAULT_URL = Set-ConfigVariable AZURE_KEY_VAULT_URL ""
$AZURE_KEY_VAULT_CERTIFICATE = Set-ConfigVariable AZURE_KEY_VAULT_CERTIFICATE ""
$AZURE_KEY_VAULT_CLIENT_ID = Set-ConfigVariable AZURE_KEY_VAULT_CLIENT_ID ""
$AZURE_KEY_VAULT_CLIENT_SECRET = Set-ConfigVariable AZURE_KEY_VAULT_CLIENT_SECRET ""
$AZURE_KEY_VAULT_TENANT_ID = Set-ConfigVariable AZURE_KEY_VAULT_TENANT_ID ""
if ($FEATURE_LOADTESTS -match 'OpenGL') { $need_gles_emulator=1 }
if (($PACKAGE -eq "YES") -and ($FEATURE_TOOLS -eq "OFF")) {
echo "Error: Cannot package a configuration that does not build tools. Set FEATURE_TOOLS to ON or PACKAGE to NO"
exit 2
}
$cmake_args = @(
"-G", "$CMAKE_GEN"
"-A", "$ARCH"
)
if($CMAKE_TOOLSET) {
$cmake_args += @(
"-T", "$CMAKE_TOOLSET"
)
}
# Just setting the environment variable does not seem to work, so pass to cmake.
if($env:VCPKG_INSTALL_OPTIONS) {
$cmake_args += @( "-D", "VCPKG_INSTALL_OPTIONS=$env:VCPKG_INSTALL_OPTIONS" )
}
if($FEATURE_LOADTESTS -ne "OFF" -and $env:VCPKG_ROOT) {
$cmake_args += @(
"-D", "CMAKE_TOOLCHAIN_FILE=$env:VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake"
)
}
$cmake_args += @(
"-B", "$BUILD_DIR"
"-D", "KTX_FEATURE_DOC=$FEATURE_DOC"
"-D", "KTX_FEATURE_JNI=$FEATURE_JNI"
"-D", "KTX_FEATURE_LOADTEST_APPS=$FEATURE_LOADTESTS"
"-D", "KTX_FEATURE_PY=$FEATURE_PY"
"-D", "KTX_FEATURE_TESTS=$FEATURE_TESTS"
"-D", "KTX_FEATURE_TOOLS=$FEATURE_TOOLS"
"-D", "KTX_FEATURE_TOOLS_CTS=$FEATURE_TOOLS_CTS"
"-D", "KTX_PY_USE_VENV=$PY_USE_VENV"
"-D", "KTX_WERROR=$WERROR"
"-D", "BASISU_SUPPORT_SSE=$SUPPORT_SSE"
"-D", "BASISU_SUPPORT_OPENCL=$SUPPORT_OPENCL"
"-D", "CODE_SIGN_KEY_VAULT=$CODE_SIGN_KEY_VAULT"
)
if($FEATURE_PYTHON -eq "ON" -and $PYTHON) {
$cmake_args += @(
"-D", "PYTHON=$PYTHON"
)
}
if ($CODE_SIGN_KEY_VAULT) {
# To avoid CMake warning, only specify this when actually signing.
$cmake_args += @(
"-D", "CODE_SIGN_TIMESTAMP_URL=$CODE_SIGN_TIMESTAMP_URL"
)
}
if ($CODE_SIGN_KEY_VAULT -eq "Azure") {
$cmake_args += @(
"-D", "AZURE_KEY_VAULT_URL=$AZURE_KEY_VAULT_URL"
"-D", "AZURE_KEY_VAULT_CERTIFICATE=$AZURE_KEY_VAULT_CERTIFICATE"
"-D", "AZURE_KEY_VAULT_CLIENT_ID=$AZURE_KEY_VAULT_CLIENT_ID"
"-D", "AZURE_KEY_VAULT_CLIENT_SECRET=$AZURE_KEY_VAULT_CLIENT_SECRET"
"-D", "AZURE_KEY_VAULT_TENANT_ID=$AZURE_KEY_VAULT_TENANT_ID"
)
} elseif ($CODE_SIGN_KEY_VAULT) {
$cmake_args += @(
"-D", "LOCAL_KEY_VAULT_SIGNING_IDENTITY=$LOCAL_KEY_VAULT_SIGNING_IDENTITY"
"-D", "LOCAL_KEY_VAULT_CERTIFICATE_THUMBPRINT=$LOCAL_KEY_VAULT_CERTIFICATE_THUMBPRINT"
)
} `
if ($need_gles_emulator) {
$cmake_args += @("-D", "OPENGL_ES_EMULATOR=$OPENGL_ES_EMULATOR")
}
$config_display = "Configure KTX-Software: "
foreach ($item in $cmake_args) {
switch ($item) {
"-A" { $config_display += 'Arch=' }
"-B" { $config_display += 'Build Dir=' }
"-D" { }
"-G" { $config_display += 'Generator=' }
"-T" { $config_display += 'Toolset=' }
"" { }
default { $config_display += "$item, " }
}
}
$config_display = $config_display -replace ', $', ''
echo $config_display
cmake . $cmake_args
# Return an error code if cmake config fails.
if(!$?){
exit 1
}
# Find SDK version and ls it
#if ($FEATURE_LOADTESTS -ne "OFF") {
# $m = select-string -Pattern "<WindowsTargetPlatformVersion>(?<version>(?<major>[0-9][0-9])[0-9\.]*)</.*" -Path $BUILD_DIR/tests/loadtests/gl3loadtests.vcxproj
# $sdk_ver = $m.matches[0].groups["version"].value
# $sdk_major = $m.matches[0].groups["major"].value
# echo "sdk_ver = $sdk_ver"
# echo "sdk_major = $sdk_major"
# ls "C:\Program Files (x86)\Windows Kits\$sdk_major\lib"
# ls "C:\Program Files (x86)\Windows Kits\$sdk_major\lib\$sdk_ver\um\arm64\glu32.lib" -ErrorAction 'Continue'
# ls "C:\Program Files (x86)\Windows Kits\$sdk_major\lib\$sdk_ver\um\x64\glu32.lib" -ErrorAction 'Continue'
#}
$configArray = $CONFIGURATION.split(",")
foreach ($config in $configArray) {
pushd $BUILD_DIR
try {
#git status
echo "Build KTX-Software (Windows $ARCH $config)"
cmake --build . --config $config
# Return an error code if cmake fails
if(!$?){
popd
exit 1
}
#git status
if ($PACKAGE -eq "YES" -and $config -eq "Release") {
echo "Pack KTX-Software (Windows $ARCH $config)"
cmake --build . --config $config --target PACKAGE
# Return an error code if cmake fails
if(!$?){
popd
exit 1
}
}
echo "Done building."
} finally {
popd
}
}