diff --git a/libs/Microsoft.MixedReality.WebRTC.Native/src/uwp/Microsoft.MixedReality.WebRTC.Native.UWP.vcxproj b/libs/Microsoft.MixedReality.WebRTC.Native/src/uwp/Microsoft.MixedReality.WebRTC.Native.UWP.vcxproj
index 068504c30..78127446a 100644
--- a/libs/Microsoft.MixedReality.WebRTC.Native/src/uwp/Microsoft.MixedReality.WebRTC.Native.UWP.vcxproj
+++ b/libs/Microsoft.MixedReality.WebRTC.Native/src/uwp/Microsoft.MixedReality.WebRTC.Native.UWP.vcxproj
@@ -91,6 +91,12 @@
$(ProjectDir)..\..\..\\Microsoft.MixedReality.WebRTC.Unity\Assets\Plugins\WSA\ARM
+
+ true
+
+
+ false
+
@@ -114,6 +120,28 @@
Ole32.lib;Evr.lib;mf.lib;mfuuid.lib;mfplat.lib;webrtc.lib;WindowsApp.lib;Org.WebRtc.WrapperGlue.lib;%(AdditionalDependencies)
..\exports.def
$(WebRTCCoreRepoPath)webrtc\xplatform\webrtc\OUTPUT\webrtc\winuwp\$(PlatformTarget)\$(Configuration);$(WebRTCCoreRepoPath)webrtc\windows\projects\msvc\Org.WebRtc.WrapperGlue.Universal\Build\Output\Org.WebRtc.WrapperGlue\$(Configuration)\$(PlatformTarget);$(WebRTCCoreRepoPath)webrtc\windows\projects\msvc\Org.WebRtc.Universal\Build\Output\Org.WebRtc\$(Configuration)\$(PlatformTarget);%(AdditionalLibraryDirectories)
+ DebugFull
+
+
+
+
+ Disabled
+ _DEBUG;%(PreprocessorDefinitions)
+ MultiThreadedDebugDLL
+
+
+
+
+ MaxSpeed
+ true
+ true
+ NDEBUG;%(PreprocessorDefinitions)
+ true
+ MultiThreadedDLL
+
+
+ true
+ true
diff --git a/libs/Microsoft.MixedReality.WebRTC.Native/src/uwp/Microsoft.MixedReality.WebRTC.Native.UWP.vcxproj.filters b/libs/Microsoft.MixedReality.WebRTC.Native/src/uwp/Microsoft.MixedReality.WebRTC.Native.UWP.vcxproj.filters
index 77193a6f9..7a1d65014 100644
--- a/libs/Microsoft.MixedReality.WebRTC.Native/src/uwp/Microsoft.MixedReality.WebRTC.Native.UWP.vcxproj.filters
+++ b/libs/Microsoft.MixedReality.WebRTC.Native/src/uwp/Microsoft.MixedReality.WebRTC.Native.UWP.vcxproj.filters
@@ -25,7 +25,7 @@
interop
-
+
media
diff --git a/libs/Microsoft.MixedReality.WebRTC.Native/src/win32/Microsoft.MixedReality.WebRTC.Native.Win32.vcxproj b/libs/Microsoft.MixedReality.WebRTC.Native/src/win32/Microsoft.MixedReality.WebRTC.Native.Win32.vcxproj
index 0f96a2eb4..09c653046 100644
--- a/libs/Microsoft.MixedReality.WebRTC.Native/src/win32/Microsoft.MixedReality.WebRTC.Native.Win32.vcxproj
+++ b/libs/Microsoft.MixedReality.WebRTC.Native/src/win32/Microsoft.MixedReality.WebRTC.Native.Win32.vcxproj
@@ -96,6 +96,7 @@
..\exports.def
strmiids.lib;Msdmo.lib;dmoguids.lib;wmcodecdspuuid.lib;Secur32.lib;winmm.lib;Ole32.lib;Evr.lib;mfreadwrite.lib;mf.lib;mfuuid.lib;mfplat.lib;mfplay.lib;webrtc.lib;%(AdditionalDependencies)
$(WebRTCCoreRepoPath)webrtc\xplatform\webrtc\OUTPUT\webrtc\win\$(PlatformTarget)\$(Configuration);%(AdditionalLibraryDirectories)
+ DebugFull
@@ -104,9 +105,6 @@
_DEBUG;%(PreprocessorDefinitions)
MultiThreadedDebug
-
- true
-
diff --git a/libs/Microsoft.MixedReality.WebRTC.Native/src/win32/Microsoft.MixedReality.WebRTC.Native.Win32.vcxproj.filters b/libs/Microsoft.MixedReality.WebRTC.Native/src/win32/Microsoft.MixedReality.WebRTC.Native.Win32.vcxproj.filters
index 2ecf1b59e..02881131c 100644
--- a/libs/Microsoft.MixedReality.WebRTC.Native/src/win32/Microsoft.MixedReality.WebRTC.Native.Win32.vcxproj.filters
+++ b/libs/Microsoft.MixedReality.WebRTC.Native/src/win32/Microsoft.MixedReality.WebRTC.Native.Win32.vcxproj.filters
@@ -25,7 +25,7 @@
interop
-
+
media
diff --git a/tools/ci/computePdbPackageVars.ps1 b/tools/ci/computePdbPackageVars.ps1
new file mode 100644
index 000000000..c0acb24a6
--- /dev/null
+++ b/tools/ci/computePdbPackageVars.ps1
@@ -0,0 +1,73 @@
+# Compute the name and version of the Universal Package used for PDBs,
+# and populate the relevant pipeline variables.
+
+# Compute package name
+# Note the restrictions on a Universal Package name (from error message):
+# Universal package names must be one or more lowercase alphanumeric
+# segments separated by a dash, dot or underscore. The package name
+# must be under 256 characters.
+if (!$env:BUILDTRIPLE)
+{
+ $err = "Invalid build triple '$env:BUILDTRIPLE'"
+ Write-Error $err
+ Write-Host "##vso[task.complete result=Failed;]$err"
+ exit 1
+}
+$PackageName = "mr-webrtc-core_pdbs_$env:BUILDTRIPLE".ToLowerInvariant()
+if ($PackageName.Length -ge 256) {
+ $err = "Package name too long: '$PackageName'"
+ Write-Error $err
+ Write-Host "##vso[task.complete result=Failed;]$err"
+ exit 1
+}
+Write-Host "PDB package name : $PackageName"
+Write-Host "##vso[task.setvariable variable=MRWebRTC_PdbPackageName]$PackageName"
+
+# Compute version if needed, or check existing version
+if ($env:WRITE_VERSION -eq 'true')
+{
+ # Compute package version based on build variables
+ if ($env:MRWEBRTC_PDBPACKAGEVERSION)
+ {
+ # Normally this should compute $(MRWebRTC_PdbPackageVersion) based on the build's version
+ # and optional release tag and build number. But the variable has also been already assigned
+ # in the build pipelines variables, which generally indicates a misconfigured pipeline.
+ $err = "Pipeline variable MRWebRTC_PdbPackageVersion is already set : '$env:MRWEBRTC_PDBPACKAGEVERSION'."
+ Write-Error $err
+ Write-Host "##vso[task.complete result=Failed;]$err"
+ exit 1
+ }
+ if (!$env:MRWEBRTCVERSION)
+ {
+ $err = "Invalid build version '$env:MRWEBRTCVERSION'"
+ Write-Error $err
+ Write-Host "##vso[task.complete result=Failed;]$err"
+ exit 1
+ }
+ if ($env:MRWEBRTCRELEASETAG)
+ {
+ $PackageVersion = "$env:MRWEBRTCVERSION-$env:MRWEBRTCRELEASETAG"
+ }
+ else
+ {
+ $PackageVersion = "$env:MRWEBRTCVERSION"
+ }
+ if ($env:MRWEBRTCWITHBUILDNUMBER -eq "true")
+ {
+ $PackageVersion = "$PackageVersion-$env:BUILD_BUILDNUMBER"
+ }
+ Write-Host "PDB package version (generated) : $PackageVersion"
+ Write-Host "##vso[task.setvariable variable=MRWebRTC_PdbPackageVersion]$PackageVersion"
+}
+else
+{
+ # Read and check version from pipeline variables, but do not modify
+ if (!$env:MRWEBRTC_PDBPACKAGEVERSION)
+ {
+ $err = "Invalid PDB package version '$env:MRWEBRTC_PDBPACKAGEVERSION'"
+ Write-Error $err
+ Write-Host "##vso[task.complete result=Failed;]$err"
+ exit 1
+ }
+ Write-Host "PDB package version (from pipeline) : $env:MRWEBRTC_PDBPACKAGEVERSION"
+}
diff --git a/tools/ci/copyPdbsForBuilding.ps1 b/tools/ci/copyPdbsForBuilding.ps1
new file mode 100644
index 000000000..41328c997
--- /dev/null
+++ b/tools/ci/copyPdbsForBuilding.ps1
@@ -0,0 +1,20 @@
+# Copy all PDBs from their packaging folder back next to webrtc.lib
+# Note that this is not their original location, but this is where
+# the linker currently looks for them.
+
+param(
+ [string]$SourcePath,
+ [string]$OutputPath
+)
+
+# Move all PDBs
+Write-Host "Moving PDBs..."
+mkdir -Force $OutputPath | out-null
+Move-Item -Path $(Join-Path $SourcePath "*") -Destination $OutputPath -Include "*.pdb"
+
+# List content of output folder
+Write-Host "Content of output folder $OutputPath"
+foreach ($f in $(Get-ChildItem -Path $OutputPath -Recurse))
+{
+ Write-Host $f.FullName
+}
diff --git a/tools/ci/copyPdbsForPackaging.ps1 b/tools/ci/copyPdbsForPackaging.ps1
new file mode 100644
index 000000000..33a8b2ac5
--- /dev/null
+++ b/tools/ci/copyPdbsForPackaging.ps1
@@ -0,0 +1,47 @@
+# Copy all PDBs into a single folder for packaging as Universal Package
+
+param(
+ [string]$CorePath,
+ [string]$WrapperPath,
+ [string]$WrapperGluePath,
+ [string]$OutputPath,
+ [ValidateSet('Debug','Release')]
+ [string]$BuildConfig,
+ [switch]$WithUwpWrapper
+)
+
+# Copied from https://github.com/microsoft/MixedReality-Sharing/blob/master/tools/ci/utils.ps1
+function Ensure-Empty($DirectoryPath) {
+ mkdir -Force "$DirectoryPath" | out-null
+ Remove-Item "$DirectoryPath\*" -Force -Recurse
+}
+
+# Ensure the output path exists and is empty
+Ensure-Empty $OutputPath
+
+# Copy core PDBs
+Write-Host "Copying PDBs for core webrtc.lib..."
+Copy-Item -Path $(Join-Path $CorePath "*") -Destination $OutputPath -Include "*.pdb"
+
+if ($WithUwpWrapper)
+{
+ # Copy wrapper PDB (Org.WebRtc.pdb)
+ Write-Host "Copying PDB for Org.WebRtc.dll..."
+ Copy-Item -Path $(Join-Path $WrapperPath "Org.WebRtc.pdb") -Destination $OutputPath
+
+ # Copy wrapper glue PDB (Org.WebRtc.WrapperGlue.pdb)
+ # In Release there is no PDB; the project does not specify /DEBUG so defaults to Debug-only PDBs.
+ if ($BuildConfig -eq "Release") {
+ Write-Host "Skipping PDB for Org.WebRtc.WrapperGlue.lib (not generated in Release)"
+ } else {
+ Write-Host "Copying PDB for Org.WebRtc.WrapperGlue.lib..."
+ Copy-Item -Path $(Join-Path $WrapperGluePath "Org.WebRtc.WrapperGlue.pdb") -Destination $OutputPath
+ }
+}
+
+# List content of output folder
+Write-Host "Content of output folder $OutputPath"
+foreach ($f in $(Get-ChildItem -Path $OutputPath -Recurse))
+{
+ Write-Host $f.FullName
+}
diff --git a/tools/ci/generateCppPackagesConfig.ps1 b/tools/ci/generateCppPackagesConfig.ps1
new file mode 100644
index 000000000..da3ce6ba6
--- /dev/null
+++ b/tools/ci/generateCppPackagesConfig.ps1
@@ -0,0 +1,66 @@
+# Generate a custom packages.config to restore only the necessary Core
+# NuGet packages for the given build triple, to save on disk space
+
+param(
+ [ValidateSet('Win32','UWP')]
+ [string]$BuildPlatform,
+ [ValidateSet('x86','x64','ARM')]
+ [string]$BuildArch,
+ [ValidateSet('Debug','Release')]
+ [string]$BuildConfig,
+ [string]$InputFile,
+ [string]$OutputFile
+)
+
+Write-Host "Generating packages.config for build triple $BuildPlatform-$BuildArch-$BuildConfig..."
+
+$reader = [System.IO.File]::OpenText($InputFile)
+$content = ""
+try {
+ for() {
+ $line = $reader.ReadLine()
+ if ($line -eq $null) { break }
+ # Check if the package is arch/config dependent.
+ # Note that this will *not* match the generic UWP package containing the generated headers,
+ # "Microsoft.MixedReality.WebRTC.Native.Core.UWP" (without '.' after 'UWP'), which should
+ # always be restored on all UWP variants independent of the arch/config.
+ if ($line -match "Microsoft\.MixedReality\.WebRTC\.Native\.Core\.(Desktop|UWP|WinRT)\.")
+ {
+ # Once the package is known to be config/arch-dependent, validate that this is the
+ # correct arch and config for the current build.
+ if ($line -match "Microsoft\.MixedReality\.WebRTC\.Native\.Core\.(Desktop|UWP|WinRT)\.$BuildArch\.$BuildConfig")
+ {
+ $linePlatform = $Matches.1 # Desktop|UWP|WinRT
+ if ((($linePlatform -eq 'Desktop') -and ($BuildPlatform -eq 'Win32')) -or (($linePlatform -ne 'Desktop') -and ($BuildPlatform -eq 'UWP')))
+ {
+ # Copy line for matching build triple as is
+ $content += $line + "`n";
+ }
+ else
+ {
+ # Discard line - mismatching platform
+ }
+ }
+ else
+ {
+ # Discard line - mismatching arch/config
+ }
+ }
+ else
+ {
+ # Copy any other line as is, including "Microsoft.MixedReality.WebRTC.Native.Core.UWP"
+ $content += $line + "`n";
+ }
+ }
+}
+finally {
+ $reader.Close()
+}
+Write-Output $content | Set-Content -Path $OutputFile -Encoding UTF8
+
+Write-Host "== $OutputFile ======================================="
+Get-Content -Encoding UTF8 -Path "$OutputFile"
+Write-Host "=========================================================="
+
+# Write the filename of the new packages.config file to $(PackagesConfigFile) for later use
+Write-Host "##vso[task.setvariable variable=PackagesConfigFile]$OutputFile"
diff --git a/tools/ci/modifyCppProject.ps1 b/tools/ci/modifyCppProject.ps1
new file mode 100644
index 000000000..df10b026a
--- /dev/null
+++ b/tools/ci/modifyCppProject.ps1
@@ -0,0 +1,88 @@
+# Modify the .vcxproj project file to only import the NuGet packages for
+# the current build triple, which are the only ones restored.
+
+param(
+ [ValidateSet('Win32','UWP')]
+ [string]$BuildPlatform,
+ [ValidateSet('x86','x64','ARM')]
+ [string]$BuildArch,
+ [ValidateSet('Debug','Release')]
+ [string]$BuildConfig,
+ [string]$ProjectFile
+)
+
+Write-Host "Modifying .vcxproj for build triple $BuildPlatform-$BuildArch-$BuildConfig..."
+
+$reader = [System.IO.File]::OpenText($ProjectFile)
+$content = ""
+try {
+ for() {
+ $line = $reader.ReadLine()
+ if ($line -eq $null) { break }
+ if ($line -match "Import Project=")
+ {
+ if ($line -match "packages\\Microsoft\.MixedReality\.WebRTC\.Native\.Core\.(Desktop|UWP|WinRT)\.(x86|x64|ARM)\.(Debug|Release)")
+ {
+ $linePlatform = $Matches.1 # Desktop|UWP|WinRT
+ $lineArch = $Matches.2 # x86|x64|ARM
+ $lineConfig = $Matches.3 #Debug|Release
+ $matchPlatform = (($linePlatform -eq 'Desktop') -and ($BuildPlatform -eq 'Win32')) -or (($linePlatform -ne 'Desktop') -and ($BuildPlatform -eq 'UWP'))
+ $matchArch = ($lineArch -eq $BuildArch)
+ $matchConfig = ($lineConfig -eq $BuildConfig)
+ if ($matchPlatform -and $matchArch -and $matchConfig)
+ {
+ # Copy line for matching build triple as is
+ $content += $line + "`n";
+ }
+ else
+ {
+ # Discard line - mismatching platform or arch or config
+ }
+ }
+ else
+ {
+ # Copy any other line as is
+ $content += $line + "`n";
+ }
+ }
+ elseif ($line -match "Error Condition=")
+ {
+ if ($line -match "packages\\Microsoft\.MixedReality\.WebRTC\.Native\.Core\.(Desktop|UWP|WinRT)\.(x86|x64|ARM)\.(Debug|Release)")
+ {
+ $linePlatform = $Matches.1 # Desktop|UWP|WinRT
+ $lineArch = $Matches.2 # x86|x64|ARM
+ $lineConfig = $Matches.3 #Debug|Release
+ $matchPlatform = (($linePlatform -eq 'Desktop') -and ($BuildPlatform -eq 'Win32')) -or (($linePlatform -ne 'Desktop') -and ($BuildPlatform -eq 'UWP'))
+ $matchArch = ($lineArch -eq $BuildArch)
+ $matchConfig = ($lineConfig -eq $BuildConfig)
+ if ($matchPlatform -and $matchArch -and $matchConfig)
+ {
+ # Copy line for matching build triple as is
+ $content += $line + "`n";
+ }
+ else
+ {
+ # Discard line - mismatching platform or arch or config
+ }
+ }
+ else
+ {
+ # Copy any other line as is
+ $content += $line + "`n";
+ }
+ }
+ else
+ {
+ # Copy any other line as is
+ $content += $line + "`n";
+ }
+ }
+}
+finally {
+ $reader.Close()
+}
+Write-Output $content | Set-Content -Path $ProjectFile -Encoding UTF8
+
+Write-Host "== $ProjectFile ======================================="
+Get-Content -Encoding UTF8 -Path "$ProjectFile"
+Write-Host "=========================================================="
diff --git a/tools/ci/release-core-nosign.yaml b/tools/ci/release-core-nosign.yaml
index fc65f8beb..d2993d75c 100644
--- a/tools/ci/release-core-nosign.yaml
+++ b/tools/ci/release-core-nosign.yaml
@@ -14,11 +14,6 @@ pr: none
# Give a unique name to the build each time it runs
name: $(Date:yyyyMMdd)-$(Rev:r)
-variables:
- # Version string is "$(MRWebRTCVersion)-$(MRWebRTCReleaseTag)-$(Build.BuildId)"
- MRWebRTCVersion: 0.0.1 # Major.Minor.Patch
- MRWebRTCReleaseTag: 'alpha' # Optional, without '-'
-
stages:
# Compile all platform/architecture/config variants as separate jobs
diff --git a/tools/ci/templates/jobs-cpp.yaml b/tools/ci/templates/jobs-cpp.yaml
index cce1ca6c3..ca977ded8 100644
--- a/tools/ci/templates/jobs-cpp.yaml
+++ b/tools/ci/templates/jobs-cpp.yaml
@@ -1,5 +1,5 @@
-# Copyright (c) Microsoft Corporation. All rights reserved.
-# Licensed under the MIT License. See LICENSE in the project root for license information.
+# Copyright (c) Microsoft Corporation.
+# Licensed under the MIT License.
# [TEMPLATE] Compile C++ library Microsoft.MixedReality.WebRTC.Native.dll
@@ -9,7 +9,7 @@ parameters:
buildArch: '' # x86|x64|ARM|ARM64
msbuildPlatform: '' # Win32|x64|ARM|ARM64
buildConfig: '' # Debug|Release
-
+
jobs:
# Compile Microsoft.MixedReality.WebRTC.Native.dll
@@ -22,22 +22,75 @@ jobs:
- group: MixedReality-WebRTC-ArtifactConfig
- name: buildTriple
value: ${{parameters.buildPlatform}}-${{parameters.buildArch}}-${{parameters.buildConfig}}
+ # This is overwritten later if restoring PDBs
+ - name: PackagesConfigFile
+ value: '$(Build.SourcesDirectory)/libs/Microsoft.MixedReality.WebRTC.Native/src/${{parameters.buildPlatform}}/packages.config'
steps:
- checkout: self
submodules: recursive
+ # Map build* variables to script* ones
+ - task: PowerShell@2
+ displayName: Map script variables
+ inputs:
+ targetType: filePath
+ filePath: tools/ci/mapVariables.ps1
+ arguments: '${{parameters.buildPlatform}} ${{parameters.buildArch}} ${{parameters.buildConfig}}'
+
+ # Compute the PDB package variables
+ - task: PowerShell@2
+ displayName: 'Compute PDB package variables'
+ inputs:
+ targetType: filePath
+ filePath: tools/ci/computePdbPackageVars.ps1
+ env:
+ # Read $(MRWebRTC_PdbPackageVersion) from pipeline variables
+ WRITE_VERSION: 'false'
+ condition: eq(variables['MRWebRTC_RestorePDBs'], 'true')
+
+ # Download the PDBs
+ - task: UniversalPackages@0
+ displayName: Download core PDBs
+ inputs:
+ command: download
+ vstsFeed: $(MRWebRTC_PdbFeed)
+ vstsFeedPackage: $(MRWebRTC_PdbPackageName)
+ vstsPackageVersion: $(MRWebRTC_PdbPackageVersion)
+ downloadDirectory: '$(Build.SourcesDirectory)\_pdbs'
+ condition: eq(variables['MRWebRTC_RestorePDBs'], 'true')
+
+ # Move PDBs back into their original location for the linker to find them
+ - task: PowerShell@2
+ displayName: Move core PDBs back in place
+ inputs:
+ targetType: filePath
+ filePath: tools/ci/copyPdbsForBuilding.ps1
+ arguments: '-BuildConfig ${{parameters.buildConfig}} -BuildPlatform ${{parameters.buildPlatform}} -SourcePath "$(Build.SourcesDirectory)/_pdbs" -OutputPath "bin/${{parameters.buildPlatform}}/${{parameters.buildArch}}/${{parameters.buildConfig}}"'
+ condition: eq(variables['MRWebRTC_RestorePDBs'], 'true')
+
# Use NuGet 5.2.0
- task: NuGetToolInstaller@1
displayName: 'Use NuGet 5.2.0'
inputs:
versionSpec: 5.2.0
- # Restore the NuGet packages containing the input dependencies
+ # Generate custom packages.config to restore only the necessary packages for the current build triple.
+ # This helps both with decreasing restore time and with minimizing disk space to avoid the 10GB limit.
+ # This task sets $(PackagesConfigFile) to the filename of the generated 'packages.config' file.
+ - task: PowerShell@2
+ displayName: Generate packages.config for build triple
+ inputs:
+ targetType: filePath
+ filePath: tools/ci/generateCppPackagesConfig.ps1
+ arguments: '-BuildConfig ${{parameters.buildConfig}} -BuildPlatform ${{parameters.buildPlatform}} -BuildArch ${{parameters.buildArch}} -InputFile "$(Build.SourcesDirectory)/libs/Microsoft.MixedReality.WebRTC.Native/src/${{parameters.buildPlatform}}/packages.config" -OutputFile "bin/${{parameters.buildPlatform}}/${{parameters.buildArch}}/${{parameters.buildConfig}}/packages.config"'
+ condition: eq(variables['MRWebRTC_RestorePDBs'], 'true')
+
+ # Restore the NuGet packages containing the input dependencies (non-PDB case)
- task: 333b11bd-d341-40d9-afcf-b32d5ce6f23b@2 # NuGetCommand@2
displayName: 'NuGet restore C++ lib'
inputs:
command: restore
- restoreSolution: '$(Build.SourcesDirectory)/libs/Microsoft.MixedReality.WebRTC.Native/src/${{parameters.buildPlatform}}/packages.config'
+ restoreSolution: '$(PackagesConfigFile)'
restoreDirectory: '$(Build.SourcesDirectory)/packages'
includeNuGetOrg: true
feedsToUse: config
@@ -68,15 +121,24 @@ jobs:
arguments: '-a prepare -p $(scriptPlatform) --cpus $(scriptArch) -c $(scriptConfig)'
timeoutInMinutes: 10
+ # Generate custom .vcxproj to import only the necessary packages for the current build triple
+ - task: PowerShell@2
+ displayName: 'Modify .vcxproj for build triple'
+ inputs:
+ targetType: filePath
+ filePath: tools/ci/modifyCppProject.ps1
+ arguments: '-BuildConfig ${{parameters.buildConfig}} -BuildPlatform ${{parameters.buildPlatform}} -BuildArch ${{parameters.buildArch}} -ProjectFile "libs/Microsoft.MixedReality.WebRTC.Native/src/${{parameters.buildPlatform}}/Microsoft.MixedReality.WebRTC.Native.${{parameters.buildPlatform}}.vcxproj"'
+ condition: eq(variables['MRWebRTC_RestorePDBs'], 'true')
+
# Build Microsoft.MixedReality.WebRTC.Native.dll
- task: MSBuild@1
displayName: 'Build C++ WebRTC lib ($(buildTriple))'
inputs:
- solution: libs/Microsoft.MixedReality.WebRTC.Native/src/${{parameters.buildPlatform}}/Microsoft.MixedReality.WebRTC.Native.${{parameters.buildPlatform}}.vcxproj
+ solution: 'libs/Microsoft.MixedReality.WebRTC.Native/src/${{parameters.buildPlatform}}/Microsoft.MixedReality.WebRTC.Native.${{parameters.buildPlatform}}.vcxproj'
msbuildVersion: 15.0
msbuildArchitecture: x64
- platform: ${{parameters.msbuildPlatform}}
- configuration: ${{parameters.buildConfig}}
+ platform: '${{parameters.msbuildPlatform}}'
+ configuration: '${{parameters.buildConfig}}'
timeoutInMinutes: 20
# Publish Microsoft.MixedReality.WebRTC.Native.dll and associated files (PDB, ...)
@@ -84,7 +146,13 @@ jobs:
displayName: 'Publish C++ WebRTC lib ($(buildTriple))'
inputs:
artifactName: 'Microsoft.MixedReality.WebRTC.Native_$(buildTriple)'
- targetPath: bin/${{parameters.buildPlatform}}/${{parameters.buildArch}}/${{parameters.buildConfig}}
+ targetPath: 'bin/${{parameters.buildPlatform}}/${{parameters.buildArch}}/${{parameters.buildConfig}}'
+
+ # Delete PDBs to save disk space, otherwise the NuGet download below fails in Debug
+ - powershell: |
+ Remove-Item "bin/${{parameters.buildPlatform}}/${{parameters.buildArch}}/${{parameters.buildConfig}}/*" -Force -Include "*.pdb" -Exclude "Microsoft.MixedReality.WebRTC.*","NativeLib.*","NativeTests.*"
+ displayName: 'Delete PDBs after linking webrtc.lib'
+ condition: eq(variables['MRWebRTC_RestorePDBs'], 'true')
# Restore the NuGet packages for the C++ tests
- task: 333b11bd-d341-40d9-afcf-b32d5ce6f23b@2 # NuGetCommand@2
diff --git a/tools/ci/templates/jobs-libwebrtc-uwp.yaml b/tools/ci/templates/jobs-libwebrtc-uwp.yaml
index 7dd05ba3d..87630e934 100644
--- a/tools/ci/templates/jobs-libwebrtc-uwp.yaml
+++ b/tools/ci/templates/jobs-libwebrtc-uwp.yaml
@@ -1,7 +1,7 @@
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See LICENSE in the project root for license information.
-# [TEMPLATE] Compile WebRTC Core and UWP wrappers
+# [TEMPLATE] Compile WebRTC Core and UWP wrappers for UWP platform
parameters:
buildAgent: ''
@@ -27,6 +27,16 @@ jobs:
submodules: recursive
clean: $(clean.git)
+ # Compute the PDB package variables
+ - task: PowerShell@2
+ displayName: 'Compute PDB package variables'
+ inputs:
+ targetType: filePath
+ filePath: tools/ci/computePdbPackageVars.ps1
+ env:
+ # Compute and write $(MRWebRTC_PdbPackageVersion) from build pipeline variables
+ WRITE_VERSION: 'true'
+
# Map build* variables to script* ones
- task: PowerShell@2
displayName: Map script variables
@@ -76,7 +86,7 @@ jobs:
configuration: ${{parameters.buildConfig}}
timeoutInMinutes: 180
- # Publish webrtc.lib
+ # Publish webrtc.lib as pipeline artifacts (limited retention)
- task: PublishPipelineArtifact@0
displayName: 'Publish webrtc.lib ($(buildTriple))'
inputs:
@@ -84,13 +94,13 @@ jobs:
targetPath: 'external/webrtc-uwp-sdk/webrtc/xplatform/webrtc/OUTPUT/webrtc/$(scriptPlatform)/${{parameters.buildArch}}/${{parameters.buildConfig}}/webrtc.lib'
timeoutInMinutes: 15
- # Publish PDBs for webrtc.lib
- - task: PublishPipelineArtifact@0
- displayName: 'Publish PDBs for webrtc.lib ($(buildTriple))'
- inputs:
- artifactName: 'libwebrtc_pdbs_$(buildTriple)'
- targetPath: 'external/webrtc-uwp-sdk/webrtc/xplatform/webrtc/OUTPUT/webrtc/$(scriptPlatform)/${{parameters.buildArch}}/${{parameters.buildConfig}}/pdbs'
- timeoutInMinutes: 15
+ # # Publish PDBs for webrtc.lib as pipeline artifacts (limited retention)
+ # - task: PublishPipelineArtifact@0
+ # displayName: 'Publish PDBs for webrtc.lib ($(buildTriple))'
+ # inputs:
+ # artifactName: 'libwebrtc_pdbs_$(buildTriple)'
+ # targetPath: 'external/webrtc-uwp-sdk/webrtc/xplatform/webrtc/OUTPUT/webrtc/$(scriptPlatform)/${{parameters.buildArch}}/${{parameters.buildConfig}}/pdbs'
+ # timeoutInMinutes: 15
# Publish Org.WebRtc.dll and associated (PDB, ...)
- task: PublishPipelineArtifact@0
@@ -116,3 +126,33 @@ jobs:
artifactName: 'orgwebrtc_glue_$(buildTriple)'
targetPath: 'external/webrtc-uwp-sdk/webrtc/windows/projects/msvc/Org.WebRtc.WrapperGlue.Universal/Build/Output/Org.WebRtc.WrapperGlue/${{parameters.buildConfig}}/${{parameters.buildArch}}'
timeoutInMinutes: 15
+
+ # Copy all PDBs to a single directory for package publishing
+ - task: PowerShell@2
+ displayName: Copy PDBs for packaging
+ inputs:
+ targetType: filePath
+ filePath: tools/ci/copyPdbsForPackaging.ps1
+ arguments: '-WithUwpWrapper -CorePath "external/webrtc-uwp-sdk/webrtc/xplatform/webrtc/OUTPUT/webrtc/$(scriptPlatform)/${{parameters.buildArch}}/${{parameters.buildConfig}}/pdbs" -WrapperPath "external/webrtc-uwp-sdk/webrtc/windows/projects/msvc/Org.WebRtc.Universal/Build/Output/Org.WebRtc/${{parameters.buildConfig}}/${{parameters.buildArch}}" -WrapperGluePath "external/webrtc-uwp-sdk/webrtc/windows/projects/msvc/Org.WebRtc.WrapperGlue.Universal/Build/Output/Org.WebRtc.WrapperGlue/${{parameters.buildConfig}}/${{parameters.buildArch}}" -OutputPath $(Build.ArtifactStagingDirectory)/pdbs -BuildConfig ${{parameters.buildConfig}}'
+
+ # List content of PDB packaging folder
+ - powershell: |
+ foreach ($f in $(Get-ChildItem -Path $(Build.ArtifactStagingDirectory)/pdbs -Recurse))
+ {
+ Write-Host $f.FullName
+ }
+ displayName: 'List PDBs to package'
+ timeoutInMinutes: 5
+
+ # Publish PDBs for webrtc.lib as Universal Package (unlimited retention)
+ - task: UniversalPackages@0
+ displayName: 'Publish PDBs for webrtc.lib ($(buildTriple))'
+ inputs:
+ command: publish
+ publishDirectory: '$(Build.ArtifactStagingDirectory)/pdbs'
+ vstsFeedPublish: $(MRWebRTC_PdbFeed)
+ vstsFeedPackagePublish: $(MRWebRTC_PdbPackageName)
+ versionOption: custom
+ versionPublish: $(MRWebRTC_PdbPackageVersion)
+ packagePublishDescription: 'PDBs for MixedReality-WebRTC core (webrtc.lib) $(buildTriple)'
+ timeoutInMinutes: 30
diff --git a/tools/ci/templates/jobs-libwebrtc-win32.yaml b/tools/ci/templates/jobs-libwebrtc-win32.yaml
index 7f2492c47..dd48af3cf 100644
--- a/tools/ci/templates/jobs-libwebrtc-win32.yaml
+++ b/tools/ci/templates/jobs-libwebrtc-win32.yaml
@@ -1,11 +1,11 @@
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See LICENSE in the project root for license information.
-# [TEMPLATE] Compile WebRTC Core
+# [TEMPLATE] Compile WebRTC Core for Desktop (Win32) platform
parameters:
buildAgent: ''
- buildArch: '' # x86|x64|ARM|ARM64
+ buildArch: '' # x86|x64
buildConfig: '' # Debug|Release
jobs:
@@ -25,6 +25,16 @@ jobs:
- checkout: self
submodules: recursive
+ # Compute the PDB package variables
+ - task: PowerShell@2
+ displayName: 'Compute PDB package variables'
+ inputs:
+ targetType: filePath
+ filePath: tools/ci/computePdbPackageVars.ps1
+ env:
+ # Compute and write $(MRWebRTC_PdbPackageVersion) from build pipeline variables
+ WRITE_VERSION: 'true'
+
# Map build* variables to script* ones
- task: PowerShell@2
displayName: Map script variables
@@ -44,7 +54,7 @@ jobs:
configuration: ${{parameters.buildConfig}}
timeoutInMinutes: 120
- # Publish webrtc.lib
+ # Publish webrtc.lib as pipeline artifacts (limited retention)
- task: PublishPipelineArtifact@0
displayName: 'Publish webrtc.lib ($(buildTriple))'
inputs:
@@ -52,11 +62,26 @@ jobs:
targetPath: 'external/webrtc-uwp-sdk/webrtc/xplatform/webrtc/OUTPUT/webrtc/$(scriptPlatform)/${{parameters.buildArch}}/${{parameters.buildConfig}}/webrtc.lib'
timeoutInMinutes: 15
- # Publish PDBs for webrtc.lib
- - task: PublishPipelineArtifact@0
+ # Publish PDBs for webrtc.lib as pipeline artifacts (limited retention)
+ # - task: PublishPipelineArtifact@0
+ # displayName: 'Publish PDBs for webrtc.lib ($(buildTriple))'
+ # inputs:
+ # artifactName: 'libwebrtc_pdbs_$(buildTriple)'
+ # targetPath: 'external/webrtc-uwp-sdk/webrtc/xplatform/webrtc/OUTPUT/webrtc/$(scriptPlatform)/${{parameters.buildArch}}/${{parameters.buildConfig}}/pdbs'
+ # timeoutInMinutes: 15
+
+ # Publish PDBs for webrtc.lib as Universal Package (unlimited retention)
+ - task: UniversalPackages@0
displayName: 'Publish PDBs for webrtc.lib ($(buildTriple))'
inputs:
- artifactName: 'libwebrtc_pdbs_$(buildTriple)'
- targetPath: 'external/webrtc-uwp-sdk/webrtc/xplatform/webrtc/OUTPUT/webrtc/$(scriptPlatform)/${{parameters.buildArch}}/${{parameters.buildConfig}}/pdbs'
- timeoutInMinutes: 15
+ command: publish
+ publishDirectory: 'external/webrtc-uwp-sdk/webrtc/xplatform/webrtc/OUTPUT/webrtc/$(scriptPlatform)/${{parameters.buildArch}}/${{parameters.buildConfig}}/pdbs'
+ vstsFeedPublish: $(MRWebRTC_PdbFeed)
+ vstsFeedPackagePublish: $(MRWebRTC_PdbPackageName)
+ versionOption: custom
+ versionPublish: $(MRWebRTC_PdbPackageVersion)
+ packagePublishDescription: 'PDBs for MixedReality-WebRTC core (webrtc.lib) $(buildTriple)'
+ timeoutInMinutes: 30
+
+