MegaGlest/mk/windoze/build-mg-vs-cmake.ps1

132 lines
3.6 KiB
PowerShell

# Build MegaGlest on Windows.
# Author: James Sherratt.
param(${vcpkg-location})
$sword = [char]::ConvertFromUtf32(0x2694)
Write-Output "=====$sword MegaGlest $sword====="
""
<#
.SYNOPSIS
#
.DESCRIPTION
Test if a command exists.
.PARAMETER cmdName
Comamnd to test
.PARAMETER errorAdvice
Error advice to give user if command fails
.PARAMETER errorAction
(optional) Etion after error
.EXAMPLE
Test-Command "7z" "7z not found. Please install from 7zip.org" 'Write-Warning "7zip will not be used."'
.NOTES
General notes
#>
function Test-Command {
param(
$cmdName,
$errorAdvice,
$errorAction
)
if (Get-Command $cmdName -errorAction SilentlyContinue) {
"Found $cmdName."
""
}
else {
"The command '$cmdName' does not exist."
"$errorAdvice"
""
if ( !$errorAction ) {
Exit
}
else {
Invoke-Expression $errorAction
}
}
}
function Write-Title {
param (
$titleText
)
$titleText
"-" * $titleText.Length
}
Write-Title "Updating git source"
Test-Command "git" "Please download and install git-scm https://git-scm.com/"
git pull
""
Write-Title "Setup vcpkg"
Test-Command "cmake" "Please download and install CMake: https://cmake.org/download/. (For 64 bit windows, select 'cmake-x.y.z-windows-x86_64.msi'.)"
if ( !${vcpkg-location} ) {
${vcpkg-location} = Join-Path $PSScriptRoot \vcpkg
"Vcpkg location not set. Setting it to ${vcpkg-location}."
}
else {
${vcpkg-location} = $(Resolve-Path ${vcpkg-location}).ToString()
}
if ( Test-Path ${vcpkg-location} ) {
"Found vcpkg."
}
else {
"Vcpkg not found. Cloning. https://github.com/microsoft/vcpkg.git."
git clone "https://github.com/microsoft/vcpkg.git" ${vcpkg-location}
"Installing vcpkg."
& "$(Join-Path ${vcpkg-location} bootstrap-vcpkg.bat)"
}
"Installing vcpkg and MegaGlest dependencies."
Set-Location ${vcpkg-location}
& "$(Join-Path $PSScriptRoot install-deps-vcpkg.ps1)"
if (!$?) {
"Installing deps with vcpkg failed. Please check your vcpkg git repo is configured correctly."
Set-Location $PSScriptRoot
Exit
}
Set-Location $PSScriptRoot
""
Write-Title "Build MegaGlest"
$toolchainPath = $(Join-Path ${vcpkg-location} \scripts\buildsystems\vcpkg.cmake)
$buildFolder = $(Join-Path $PSScriptRoot build)
$topLevelTargetDir = $(Resolve-Path $(Join-Path $PSScriptRoot ../../)).ToString()
$vsVersion=(msbuild --version | select -Last 1).Split(".")[0] -as [int]
if ($vsVersion -eq 17) {
$vsProjType = "Visual Studio 17 2022"
}
elseif ($vsVersion -eq 16) {
$vsProjType = "Visual Studio 16 2019"
}
else {
$vsProjType = "Visual Studio 17 2022"
}
cmake --no-warn-unused-cli -DCMAKE_TOOLCHAIN_FILE:STRING=$toolchainPath -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE "-H$topLevelTargetDir" "-B$buildFolder" -G $vsProjType -T host=x64 -A x64
cmake --build $buildFolder --config Release --target ALL_BUILD
if ($?) {
"Build succeeded. megaglest.exe, megaglest_editor.exe and megaglest_g3dviewer.exe can be found in mk/windoze/."
}
else {
"Build failed. Please make sure you have installed VS C++ tools (2019 or 2022): https://visualstudio.microsoft.com/downloads ."
"If you have installed all the relevant tools and you still can't build MegaGlest, try running '.\clean-build.ps1'. Then run this script again."
"Make sure this script is running in developer powershell: https://docs.microsoft.com/en-us/visualstudio/ide/reference/command-prompt-powershell ."
"If MegaGlest still fails to build, please help us by submitting a bug report at https://github.com/MegaGlest/megaglest-source/issues."
}