$ErrorActionPreference = "Stop" $ROOT = "D:\ae\cached_external_library\win_webrtc" $DEPOT_TOOLS = "$ROOT\depot_tools" $WEBRTC_ROOT = "$ROOT\src" $OUT_DIR = "out\release" Write-Host "==============================" Write-Host "WebRTC Build" Write-Host "ROOT=$ROOT" Write-Host "==============================" # # Load VS2022 environment # $VS_DEV_CMD = "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat" if (!(Test-Path $VS_DEV_CMD)) { throw "Cannot find VS2022 VsDevCmd.bat" } Write-Host "Loading VS2022 environment..." cmd.exe /c "`"$VS_DEV_CMD`" -host_arch=x64 -arch=x64 && set" | ForEach-Object { if ($_ -match "^(.*?)=(.*)$") { $name = $matches[1] $value = $matches[2] Set-Item "env:$name" $value } } # # Create root # if (!(Test-Path $ROOT)) { New-Item ` -ItemType Directory ` -Path $ROOT ` | Out-Null } # # depot_tools # if (!(Test-Path $DEPOT_TOOLS)) { Write-Host "Cloning depot_tools..." git clone ` https://chromium.googlesource.com/chromium/tools/depot_tools.git ` $DEPOT_TOOLS } $env:PATH = "$DEPOT_TOOLS;$env:PATH" Write-Host "Checking depot_tools..." where.exe gclient # # Fetch WebRTC # if (!(Test-Path $WEBRTC_ROOT)) { Write-Host "Fetching WebRTC..." Set-Location $ROOT fetch --nohooks webrtc } else { Write-Host "WebRTC source exists, skip fetch" } Set-Location $WEBRTC_ROOT # # Sync dependencies # Write-Host "Sync dependencies..." gclient sync # # Run hooks # Write-Host "Run hooks..." gclient runhooks # # Generate build files # Write-Host "Generate Ninja build..." gn gen $OUT_DIR --args=' is_debug=false is_component_build=false target_cpu="x64" rtc_build_examples=false rtc_build_tools=false rtc_include_tests=false use_rtti=true symbol_level=0 ' # # Build # Write-Host "Build WebRTC..." ninja -C $OUT_DIR Write-Host "" Write-Host "==============================" Write-Host "WebRTC build finished" Write-Host "Output:" Write-Host "$WEBRTC_ROOT\$OUT_DIR" Write-Host "=============================="