Build-Windows.ps1 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. [CmdletBinding()]
  2. param(
  3. [ValidateSet('x64')]
  4. [string] $Target = 'x64',
  5. [ValidateSet('Debug', 'RelWithDebInfo', 'Release', 'MinSizeRel')]
  6. [string] $Configuration = 'RelWithDebInfo'
  7. )
  8. $ErrorActionPreference = 'Stop'
  9. if ( $DebugPreference -eq 'Continue' ) {
  10. $VerbosePreference = 'Continue'
  11. $InformationPreference = 'Continue'
  12. }
  13. if ( $env:CI -eq $null ) {
  14. throw "Build-Windows.ps1 requires CI environment"
  15. }
  16. if ( ! ( [System.Environment]::Is64BitOperatingSystem ) ) {
  17. throw "A 64-bit system is required to build the project."
  18. }
  19. if ( $PSVersionTable.PSVersion -lt '7.2.0' ) {
  20. Write-Warning 'The obs-studio PowerShell build script requires PowerShell Core 7. Install or upgrade your PowerShell version: https://aka.ms/pscore6'
  21. exit 2
  22. }
  23. function Build {
  24. trap {
  25. Pop-Location -Stack BuildTemp -ErrorAction 'SilentlyContinue'
  26. Write-Error $_
  27. Log-Group
  28. exit 2
  29. }
  30. $ScriptHome = $PSScriptRoot
  31. $ProjectRoot = Resolve-Path -Path "$PSScriptRoot/../.."
  32. $UtilityFunctions = Get-ChildItem -Path $PSScriptRoot/utils.pwsh/*.ps1 -Recurse
  33. foreach($Utility in $UtilityFunctions) {
  34. Write-Debug "Loading $($Utility.FullName)"
  35. . $Utility.FullName
  36. }
  37. Push-Location -Stack BuildTemp
  38. Ensure-Location $ProjectRoot
  39. $CmakeArgs = @('--preset', "windows-ci-${Target}")
  40. $CmakeBuildArgs = @('--build')
  41. $CmakeInstallArgs = @()
  42. if ( $DebugPreference -eq 'Continue' ) {
  43. $CmakeArgs += ('--debug-output')
  44. $CmakeBuildArgs += ('--verbose')
  45. $CmakeInstallArgs += ('--verbose')
  46. }
  47. $CmakeBuildArgs += @(
  48. '--preset', "windows-${Target}"
  49. '--config', $Configuration
  50. '--parallel'
  51. '--', '/consoleLoggerParameters:Summary', '/noLogo'
  52. )
  53. $CmakeInstallArgs += @(
  54. '--install', "build_${Target}"
  55. '--prefix', "${ProjectRoot}/release/${Configuration}"
  56. '--config', $Configuration
  57. )
  58. Log-Group "Configuring ${ProductName}..."
  59. Invoke-External cmake @CmakeArgs
  60. Log-Group "Building ${ProductName}..."
  61. Invoke-External cmake @CmakeBuildArgs
  62. Log-Group "Installing ${ProductName}..."
  63. Invoke-External cmake @CmakeInstallArgs
  64. Pop-Location -Stack BuildTemp
  65. Log-Group
  66. }
  67. Build