02_build_obs.ps1 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. Param(
  2. [Switch]$Help = $(if (Test-Path variable:Help) { $Help }),
  3. [Switch]$Quiet = $(if (Test-Path variable:Quiet) { $Quiet }),
  4. [Switch]$Verbose = $(if (Test-Path variable:Verbose) { $Verbose }),
  5. [String]$BuildDirectory = $(if (Test-Path variable:BuildDirectory) { "${BuildDirectory}" } else { "build" }),
  6. [ValidateSet('x86', 'x64')]
  7. [String]$BuildArch = $(if (Test-Path variable:BuildArch) { "${BuildArch}" } else { ('x86', 'x64')[[System.Environment]::Is64BitOperatingSystem] }),
  8. [ValidateSet("Release", "RelWithDebInfo", "MinSizeRel", "Debug")]
  9. [String]$BuildConfiguration = $(if (Test-Path variable:BuildConfiguration) { "${BuildConfiguration}" } else { "RelWithDebInfo" })
  10. )
  11. ##############################################################################
  12. # Windows libobs library build function
  13. ##############################################################################
  14. #
  15. # This script file can be included in build scripts for Windows or run
  16. # directly
  17. #
  18. ##############################################################################
  19. $ErrorActionPreference = "Stop"
  20. function Build-OBS {
  21. Param(
  22. [String]$BuildDirectory = $(if (Test-Path variable:BuildDirectory) { "${BuildDirectory}" }),
  23. [String]$BuildArch = $(if (Test-Path variable:BuildArch) { "${BuildArch}" }),
  24. [String]$BuildConfiguration = $(if (Test-Path variable:BuildConfiguration) { "${BuildConfiguration}" })
  25. )
  26. $NumProcessors = (Get-CimInstance Win32_ComputerSystem).NumberOfLogicalProcessors
  27. if ( $NumProcessors -gt 1 ) {
  28. $env:UseMultiToolTask = $true
  29. $env:EnforceProcessCountAcrossBuilds = $true
  30. }
  31. Write-Status "Build OBS"
  32. Configure-OBS
  33. Ensure-Directory ${CheckoutDir}
  34. Write-Step "Build OBS targets..."
  35. Invoke-Expression "cmake --build $(if($BuildArch -eq "x64") { "build64" } else { "build32" }) --config ${BuildConfiguration}"
  36. }
  37. function Configure-OBS {
  38. Ensure-Directory ${CheckoutDir}
  39. Write-Status "Configuration of OBS build system..."
  40. $NumProcessors = (Get-CimInstance Win32_ComputerSystem).NumberOfLogicalProcessors
  41. if ( $NumProcessors -gt 1 ) {
  42. $env:UseMultiToolTask = $true
  43. $env:EnforceProcessCountAcrossBuilds = $true
  44. }
  45. # TODO: Clean up archive and directory naming across dependencies
  46. $CmakePrefixPath = Resolve-Path -Path "${CheckoutDir}/../obs-build-dependencies/windows-deps-${WindowsDepsVersion}-${BuildArch}"
  47. $CefDirectory = Resolve-Path -Path "${CheckoutDir}/../obs-build-dependencies/cef_binary_${WindowsCefVersion}_windows_${BuildArch}"
  48. $BuildDirectoryActual = "${BuildDirectory}$(if (${BuildArch} -eq "x64") { "64" } else { "32" })"
  49. $GeneratorPlatform = "$(if (${BuildArch} -eq "x64") { "x64" } else { "Win32" })"
  50. $CmakeCommand = @(
  51. "-S . -B `"${BuildDirectoryActual}`"",
  52. "-G `"${CmakeGenerator}`"",
  53. "-DCMAKE_GENERATOR_PLATFORM=`"${GeneratorPlatform}`"",
  54. "-DCMAKE_SYSTEM_VERSION=`"${CmakeSystemVersion}`"",
  55. "-DCMAKE_PREFIX_PATH:PATH=`"${CmakePrefixPath}`"",
  56. "-DCEF_ROOT_DIR:PATH=`"${CefDirectory}`"",
  57. "-DENABLE_BROWSER=ON",
  58. "-DVLC_PATH:PATH=`"${CheckoutDir}/../obs-build-dependencies/vlc-${WindowsVlcVersion}`"",
  59. "-DENABLE_VLC=ON",
  60. "-DCMAKE_INSTALL_PREFIX=`"${BuildDirectoryActual}/install`"",
  61. "-DVIRTUALCAM_GUID=`"${Env:VIRTUALCAM-GUID}`"",
  62. "-DTWITCH_CLIENTID=`"${Env:TWITCH_CLIENTID}`"",
  63. "-DTWITCH_HASH=`"${Env:TWITCH_HASH}`"",
  64. "-DRESTREAM_CLIENTID=`"${Env:RESTREAM_CLIENTID}`"",
  65. "-DRESTREAM_HASH=`"${Env:RESTREAM_HASH}`"",
  66. "-DYOUTUBE_CLIENTID=`"${Env:YOUTUBE_CLIENTID}`"",
  67. "-DYOUTUBE_CLIENTID_HASH=`"${Env:YOUTUBE_CLIENTID_HASH}`"",
  68. "-DYOUTUBE_SECRET=`"${Env:YOUTUBE_SECRET}`"",
  69. "-DYOUTUBE_SECRET_HASH=`"${Env:YOUTUBE_SECRET_HASH}`"",
  70. "-DCOPIED_DEPENDENCIES=OFF",
  71. "-DCOPY_DEPENDENCIES=ON",
  72. "-DBUILD_FOR_DISTRIBUTION=`"$(if (Test-Path Env:BUILD_FOR_DISTRIBUTION) { "ON" } else { "OFF" })`"",
  73. "$(if (Test-Path Env:CI) { "-DOBS_BUILD_NUMBER=${Env:GITHUB_RUN_ID}" })",
  74. "$(if (Test-Path Variable:$Quiet) { "-Wno-deprecated -Wno-dev --log-level=ERROR" })"
  75. )
  76. Invoke-Expression "cmake ${CmakeCommand}"
  77. Ensure-Directory ${CheckoutDir}
  78. }
  79. function Build-OBS-Standalone {
  80. $ProductName = "OBS-Studio"
  81. $CheckoutDir = Resolve-Path -Path "$PSScriptRoot\..\.."
  82. $DepsBuildDir = "${CheckoutDir}/../obs-build-dependencies"
  83. $ObsBuildDir = "${CheckoutDir}/../obs-studio"
  84. . ${CheckoutDir}/CI/include/build_support_windows.ps1
  85. Build-OBS
  86. }
  87. function Print-Usage {
  88. $Lines = @(
  89. "Usage: ${_ScriptName}",
  90. "-Help : Print this help",
  91. "-Quiet : Suppress most build process output",
  92. "-Verbose : Enable more verbose build process output",
  93. "-BuildDirectory : Directory to use for builds - Default: build64 on 64-bit systems, build32 on 32-bit systems",
  94. "-BuildArch : Build architecture to use (x86 or x64) - Default: local architecture",
  95. "-BuildConfiguration : Build configuration to use - Default: RelWithDebInfo"
  96. )
  97. $Lines | Write-Host
  98. }
  99. if(!(Test-Path variable:_RunObsBuildScript)) {
  100. $_ScriptName = "$($MyInvocation.MyCommand.Name)"
  101. if($Help.isPresent) {
  102. Print-Usage
  103. exit 0
  104. }
  105. Build-OBS-Standalone
  106. }