Initial commit

This commit is contained in:
Goran Lazarevski 2025-03-20 11:06:26 +01:00
commit 3bcab085f8
9842 changed files with 454273 additions and 0 deletions

16
.gitattributes vendored Normal file
View File

@ -0,0 +1,16 @@
*.dll filter=lfs diff=lfs merge=lfs -text
*.pdb filter=lfs diff=lfs merge=lfs -text
*.lib filter=lfs diff=lfs merge=lfs -text
*.exe filter=lfs diff=lfs merge=lfs -text
*.uasset filter=lfs diff=lfs merge=lfs -text
*.umap filter=lfs diff=lfs merge=lfs -text
*.udk filter=lfs diff=lfs merge=lfs -text
*.upk filter=lfs diff=lfs merge=lfs -text
*.fbx filter=lfs diff=lfs merge=lfs -text
*.3ds filter=lfs diff=lfs merge=lfs -text
*.psd filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.xcf filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text

View File

@ -0,0 +1,127 @@
name: Unreal Engine Build
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
jobs:
# windows-build:
# runs-on: windows
# steps:
# - name: Checkout repository
# uses: actions/checkout@v3
# with:
# lfs: true
# fetch-depth: 0 # Get all history to properly handle UE dependencies
# - name: Setup Unreal Engine
# run: |
# # Ensure Unreal Engine is installed and set up
# # This assumes you have Unreal Engine installed on your runner
# # If not, you can add installation steps here
# # Set environment variables for Unreal Engine
# echo "UE_ROOT=C:\Program Files\Epic Games\UE_5.2" >> $GITHUB_ENV
# - name: Build Unreal Project
# run: |
# # Find your .uproject file (adjust path as needed)
# $UPROJECT_PATH = Get-ChildItem -Path . -Filter "*.uproject" -Recurse | Select-Object -First 1 -ExpandProperty FullName
# Write-Host "Building project: $UPROJECT_PATH"
# # Use Unreal Automation Tool to build the project
# & "$env:UE_ROOT\Engine\Build\BatchFiles\RunUAT.bat" BuildCookRun `
# -project="$UPROJECT_PATH" `
# -noP4 `
# -platform=Win64 `
# -clientconfig=Development `
# -cook -build -stage -pak -archive `
# -archivedirectory="$PWD\Build"
# - name: Upload build artifacts
# uses: actions/upload-artifact@v3
# with:
# name: windows-build
# path: Build/
# retention-days: 7
macos-build:
runs-on: macos
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
lfs: true
fetch-depth: 0
- name: Setup Unreal Engine
run: |
# Use the correct path where Unreal Engine is installed
UE_PATH="/Users/Shared/Epic Games/UE_5.5"
if [ ! -d "$UE_PATH" ]; then
echo "Error: Unreal Engine is not installed in the expected location"
echo "Please ensure Unreal Engine is installed at $UE_PATH"
exit 1
fi
# Set environment variable with the correct Engine path
echo "UE_ROOT=$UE_PATH/Engine" >> $GITHUB_ENV
echo "Using Unreal Engine 5.5"
- name: Build Unreal Project
run: |
# Debug information
echo "=== Environment Information ==="
echo "macOS Version:"
sw_vers
echo "Current working directory: $(pwd)"
ls -la # List all files in current directory
echo "=== Unreal Engine Information ==="
ls -la "$UE_ROOT/Build/BatchFiles"
echo "=== Project Information ==="
# Detailed search for the project file
echo "Searching for .uproject files:"
find . -name "*.uproject" -type f
# Get the absolute path of the project file
UPROJECT_PATH=$(find . -name "*.uproject" -type f | head -1)
if [ -z "$UPROJECT_PATH" ]; then
echo "Error: Could not find .uproject file"
exit 1
fi
# Convert to absolute path and verify file exists
UPROJECT_ABSOLUTE_PATH=$(realpath "$UPROJECT_PATH")
echo "Project absolute path: $UPROJECT_ABSOLUTE_PATH"
if [ ! -f "$UPROJECT_ABSOLUTE_PATH" ]; then
echo "Error: Project file does not exist at: $UPROJECT_ABSOLUTE_PATH"
exit 1
fi
echo "Using Unreal Engine at: $UE_ROOT"
# Make the project file readable and executable
chmod 755 "$UPROJECT_ABSOLUTE_PATH"
# Run the build using absolute paths
chmod +x "$UE_ROOT/Build/BatchFiles/RunUAT.sh"
"$UE_ROOT/Build/BatchFiles/RunUAT.sh" BuildCookRun \
-project="$UPROJECT_ABSOLUTE_PATH" \
-noP4 \
-platform=Mac \
-clientconfig=Development \
-cook -build -stage -pak -archive \
-archivedirectory="$(pwd)/Build"
- name: Upload build artifacts
uses: actions/upload-artifact@v3
with:
name: macos-build
path: Build/
retention-days: 7

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,184 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>EpicGames.Oodle</name>
</assembly>
<members>
<member name="T:EpicGames.Compression.OodleCompressorType">
<summary>
Compressor type to use
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressorType.None">
<summary>
None = memcpy, pass through uncompressed bytes
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressorType.Kraken">
<summary>
Fast decompression and high compression ratios, amazing!
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressorType.Leviathan">
<summary>
Leviathan = Kraken's big brother with higher compression, slightly slower decompression.
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressorType.Mermaid">
<summary>
Mermaid is between Kraken and Selkie - crazy fast, still decent compression.
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressorType.Selkie">
<summary>
Selkie is a super-fast relative of Mermaid. For maximum decode speed.
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressorType.Hydra">
<summary>
Hydra, the many-headed beast = Leviathan, Kraken, Mermaid, or Selkie (see $OodleLZ_About_Hydra)
</summary>
</member>
<member name="T:EpicGames.Compression.OodleCompressionLevel">
<summary>
Compression level
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressionLevel.None">
<summary>
Don't compress, just copy raw bytes
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressionLevel.SuperFast">
<summary>
Super fast mode, lower compression ratio
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressionLevel.VeryFast">
<summary>
Fastest LZ mode with still decent compression ratio
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressionLevel.Fast">
<summary>
Fast - good for daily use
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressionLevel.Normal">
<summary>
Standard medium speed LZ mode
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressionLevel.Optimal1">
<summary>
Optimal parse level 1 (faster optimal encoder)
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressionLevel.Optimal2">
<summary>
Optimal parse level 2 (recommended baseline optimal encoder)
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressionLevel.Optimal3">
<summary>
Optimal parse level 3 (slower optimal encoder)
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressionLevel.Optimal4">
<summary>
Optimal parse level 4 (very slow optimal encoder)
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressionLevel.Optimal5">
<summary>
Optimal parse level 5 (don't care about encode speed, maximum compression)
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressionLevel.HyperFast1">
<summary>
Faster than SuperFast, less compression
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressionLevel.HyperFast2">
<summary>
Faster than HyperFast1, less compression
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressionLevel.HyperFast3">
<summary>
Faster than HyperFast2, less compression
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressionLevel.HyperFast4">
<summary>
Fastest, less compression
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressionLevel.HyperFast">
<summary>
Alias hyperfast base level
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressionLevel.Optimal">
<summary>
Alias optimal standard level
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressionLevel.Max">
<summary>
Maximum compression level
</summary>
</member>
<member name="F:EpicGames.Compression.OodleCompressionLevel.Min">
<summary>
fastest compression level
</summary>
</member>
<member name="T:EpicGames.Compression.OodleException">
<summary>
Base class for oodle exceptions
</summary>
</member>
<member name="M:EpicGames.Compression.OodleException.#ctor(System.String)">
<summary>
Constructor
</summary>
</member>
<member name="T:EpicGames.Compression.Oodle">
<summary>
Wraps an instance of the Oodle compressor
</summary>
</member>
<member name="M:EpicGames.Compression.Oodle.#cctor">
<summary>
Static constructor. Registers the import resolver for the native Oodle library.
</summary>
</member>
<member name="M:EpicGames.Compression.Oodle.Compress(EpicGames.Compression.OodleCompressorType,System.ReadOnlySpan{System.Byte},System.Span{System.Byte},EpicGames.Compression.OodleCompressionLevel)">
<summary>
Compress a block of data
</summary>
<param name="compressor">Compressor to use</param>
<param name="inputData">Data to be compressed</param>
<param name="outputData">Buffer for output data</param>
<param name="compressionLevel">Desired compression level</param>
<returns></returns>
</member>
<member name="M:EpicGames.Compression.Oodle.MaximumOutputSize(EpicGames.Compression.OodleCompressorType,System.Int32)">
<summary>
Determines the max size of the compressed buffer
</summary>
<param name="compressor">Compressor type to use</param>
<param name="uncompressedLength">Length of the input data</param>
<returns>Size of the buffer required for output data</returns>
</member>
<member name="M:EpicGames.Compression.Oodle.Decompress(System.ReadOnlySpan{System.Byte},System.Span{System.Byte})">
<summary>
Decompresses a block of data
</summary>
<param name="inputData">The compressed buffer</param>
<param name="outputData">Output buffer for decompressed data</param>
<returns></returns>
</member>
</members>
</doc>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,803 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>EpicGames.UBA</name>
</assembly>
<members>
<member name="T:EpicGames.UBA.IBaseInterface">
<summary>
Base interface for all classes that have unmanaged resources.
</summary>
</member>
<member name="M:EpicGames.UBA.IBaseInterface.GetHandle">
<summary>
Returns the handle to an unmanaged object
</summary>
<returns>An unmanaged handle</returns>
</member>
<member name="T:EpicGames.UBA.IRootPaths">
<summary>
Base interface for root paths used by cache system to normalize paths
</summary>
</member>
<member name="M:EpicGames.UBA.IRootPaths.RegisterRoot(System.String,System.Boolean,System.Byte)">
<summary>
Register roots used to normalize paths in caches
</summary>
<param name="path">Path of root</param>
<param name="includeInKey">set this to false if you want to ignore all files under this folder (you know they are _always_ the same for all machines)</param>
<param name="id">Id of root. On windows these numbers need to increase two at the time since double backslash paths are added automatically under the hood</param>
<returns>True if successful</returns>
</member>
<member name="M:EpicGames.UBA.IRootPaths.RegisterSystemRoots(System.Byte)">
<summary>
Register system roots used to normalize paths in caches
</summary>
<param name="startId">Start id for system roots. On windows these take up 10 entries</param>
<returns>True if successful</returns>
</member>
<member name="M:EpicGames.UBA.IRootPaths.Create(EpicGames.UBA.ILogger)">
<summary>
Create root paths instance
</summary>
</member>
<member name="T:EpicGames.UBA.FetchFromCacheResult">
<summary>
Struct containing results from artifact fetch
</summary>
<param name="Success">Is set to true if succeeded in fetching artifacts</param>
<param name="LogLines">Contains log lines if any</param>
</member>
<member name="M:EpicGames.UBA.FetchFromCacheResult.#ctor(System.Boolean,System.Collections.Generic.List{System.String})">
<summary>
Struct containing results from artifact fetch
</summary>
<param name="Success">Is set to true if succeeded in fetching artifacts</param>
<param name="LogLines">Contains log lines if any</param>
</member>
<member name="P:EpicGames.UBA.FetchFromCacheResult.Success">
<summary>Is set to true if succeeded in fetching artifacts</summary>
</member>
<member name="P:EpicGames.UBA.FetchFromCacheResult.LogLines">
<summary>Contains log lines if any</summary>
</member>
<member name="T:EpicGames.UBA.ICacheClient">
<summary>
Base interface for a cache client
</summary>
</member>
<member name="M:EpicGames.UBA.ICacheClient.Connect(System.String,System.Int32)">
<summary>
Connect to cache client
</summary>
<param name="host">Cache server address</param>
<param name="port">Cache server port</param>
<returns>True if successful</returns>
</member>
<member name="M:EpicGames.UBA.ICacheClient.WriteToCache(EpicGames.UBA.IRootPaths,System.UInt32,EpicGames.UBA.IProcess,System.Byte[],System.UInt32,System.Byte[],System.UInt32)">
<summary>
Write to cache
</summary>
<param name="rootPaths">RootPath instance</param>
<param name="bucket">Bucket to store cache entry</param>
<param name="process">Process</param>
<param name="inputs">Input files</param>
<param name="inputsSize">Input files size</param>
<param name="outputs">Output files</param>
<param name="outputsSize">Output files size</param>
<returns>True if successful</returns>
</member>
<member name="M:EpicGames.UBA.ICacheClient.FetchFromCache(EpicGames.UBA.IRootPaths,System.UInt32,EpicGames.UBA.ProcessStartInfo)">
<summary>
Fetch from cache
</summary>
<param name="rootPaths">RootPath instance</param>
<param name="bucket">Bucket to search for cache entry</param>
<param name="info">Process start info</param>
<returns>True if successful</returns>
</member>
<member name="M:EpicGames.UBA.ICacheClient.RequestServerShutdown(System.String)">
<summary>
Request the connected server to shutdown
</summary>
<param name="reason">Reason for shutdown</param>
</member>
<member name="M:EpicGames.UBA.ICacheClient.CreateCacheClient(EpicGames.UBA.ISessionServer,System.Boolean,System.String)">
<summary>
Create a ICacheClient object
</summary>
<param name="session">The session</param>
<param name="reportMissReason">Output reason for cache miss to log.</param>
<param name="crypto">Enable crypto by using a 32 character crypto string (representing a 16 byte value)</param>
<returns>The ICacheClient</returns>
</member>
<member name="T:EpicGames.UBA.IConfig">
<summary>
Base interface for uba config file
</summary>
</member>
<member name="M:EpicGames.UBA.IConfig.LoadConfig(System.String)">
<summary>
Load a config file
</summary>
<param name="configFile">The name of the config file</param>
<returns>The IConfig</returns>
</member>
<member name="T:EpicGames.UBA.LogEntryType">
<summary>
The verbosity of a log entry
</summary>
</member>
<member name="F:EpicGames.UBA.LogEntryType.Error">
<summary>
Error verbosity
</summary>
</member>
<member name="F:EpicGames.UBA.LogEntryType.Warning">
<summary>
Warning verbosity
</summary>
</member>
<member name="F:EpicGames.UBA.LogEntryType.Info">
<summary>
Info verbosity
</summary>
</member>
<member name="F:EpicGames.UBA.LogEntryType.Detail">
<summary>
Info verbosity
</summary>
</member>
<member name="F:EpicGames.UBA.LogEntryType.Debug">
<summary>
Info verbosity
</summary>
</member>
<member name="T:EpicGames.UBA.ILogger">
<summary>
Base interface for logging functionality
</summary>
</member>
<member name="M:EpicGames.UBA.ILogger.BeginScope">
<summary>
Begin logging scope
</summary>
</member>
<member name="M:EpicGames.UBA.ILogger.EndScope">
<summary>
End logging scope
</summary>
</member>
<member name="M:EpicGames.UBA.ILogger.Log(EpicGames.UBA.LogEntryType,System.String)">
<summary>
Log message
</summary>
<param name="type">entry verbosity</param>
<param name="message">the message to log</param>
</member>
<member name="M:EpicGames.UBA.ILogger.CreateLogger(Microsoft.Extensions.Logging.ILogger)">
<summary>
Create a ILogger object
</summary>
<param name="logger">The Microsoft.Extensions.Logging.ILogger to wrap</param>
<returns>The ILogger</returns>
</member>
<member name="M:EpicGames.UBA.ServerImpl.Dispose">
<inheritdoc/>
</member>
<member name="M:EpicGames.UBA.ServerImpl.GetHandle">
<inheritdoc/>
</member>
<member name="M:EpicGames.UBA.ServerImpl.StartServer(System.String,System.Int32,System.String)">
<inheritdoc/>
</member>
<member name="M:EpicGames.UBA.ServerImpl.StopServer">
<inheritdoc/>
</member>
<member name="M:EpicGames.UBA.ServerImpl.AddClient(System.String,System.Int32,System.String)">
<inheritdoc/>
</member>
<member name="M:EpicGames.UBA.ServerImpl.AddNamedConnection(System.String)">
<inheritdoc/>
</member>
<member name="T:EpicGames.UBA.ProcessStartInfo">
<summary>
Information needed to create a process
</summary>
</member>
<member name="T:EpicGames.UBA.ProcessStartInfo.CommonProcessConfigs">
<summary>
Common configs for processes to run
</summary>
</member>
<member name="F:EpicGames.UBA.ProcessStartInfo.CommonProcessConfigs.CompileMsvc">
<summary>
MSVC based compiler
</summary>
</member>
<member name="F:EpicGames.UBA.ProcessStartInfo.CommonProcessConfigs.CompileClang">
<summary>
Clang based compiler
</summary>
</member>
<member name="P:EpicGames.UBA.ProcessStartInfo.Application">
<summary>
The path to the application binary
</summary>
</member>
<member name="P:EpicGames.UBA.ProcessStartInfo.WorkingDirectory">
<summary>
The working directory
</summary>
</member>
<member name="P:EpicGames.UBA.ProcessStartInfo.Arguments">
<summary>
The command line arguments
</summary>
</member>
<member name="P:EpicGames.UBA.ProcessStartInfo.Description">
<summary>
A text description of the process
</summary>
</member>
<member name="P:EpicGames.UBA.ProcessStartInfo.Configuration">
<summary>
Which configuration to use
</summary>
</member>
<member name="P:EpicGames.UBA.ProcessStartInfo.Priority">
<summary>
The process priority of the created process
</summary>
</member>
<member name="P:EpicGames.UBA.ProcessStartInfo.OutputStatsThresholdMs">
<summary>
Threshold in which to report output stats
</summary>
</member>
<member name="P:EpicGames.UBA.ProcessStartInfo.TrackInputs">
<summary>
If input should be tracked
</summary>
</member>
<member name="P:EpicGames.UBA.ProcessStartInfo.LogFile">
<summary>
A path to a log file, or null for not log file
</summary>
</member>
<member name="P:EpicGames.UBA.ProcessStartInfo.UserData">
<summary>
Arbitary user data to pass along with the process
</summary>
</member>
<member name="T:EpicGames.UBA.IProcessStartInfo">
<summary>
Base interface for process start info
</summary>
</member>
<member name="M:EpicGames.UBA.IProcessStartInfo.CreateProcessStartInfo(EpicGames.UBA.ProcessStartInfo,System.Boolean)">
<summary>
Create a IProcessStartInfo object
</summary>
<param name="info">The start info for the process</param>
<param name="useExitedCallback">Set to true if exit callback is used</param>
<returns>The IProcessStartInfo</returns>
</member>
<member name="T:EpicGames.UBA.ExitedEventArgs">
<summary>
Event args for exited event
</summary>
</member>
<member name="P:EpicGames.UBA.ExitedEventArgs.ExitCode">
<summary>
Process exit code
</summary>
</member>
<member name="P:EpicGames.UBA.ExitedEventArgs.ExecutingHost">
<summary>
The remote host that ran the process, if run remotely
</summary>
</member>
<member name="P:EpicGames.UBA.ExitedEventArgs.LogLines">
<summary>
Captured output lines
</summary>
</member>
<member name="P:EpicGames.UBA.ExitedEventArgs.TotalProcessorTime">
<summary>
Total time spent for the processor
</summary>
</member>
<member name="P:EpicGames.UBA.ExitedEventArgs.TotalWallTime">
<summary>
Total wall time spent
</summary>
</member>
<member name="P:EpicGames.UBA.ExitedEventArgs.UserData">
<summary>
Total wall time spent
</summary>
</member>
<member name="M:EpicGames.UBA.ExitedEventArgs.#ctor(EpicGames.UBA.IProcess)">
<summary>
Constructor
</summary>
<param name="process">The process to pull data from</param>
</member>
<member name="T:EpicGames.UBA.IProcess">
<summary>
Interface for a process instance
</summary>
</member>
<member name="T:EpicGames.UBA.IProcess.ExitedEventHandler">
<summary>
Delegate for Exited events
</summary>
<param name="sender">The sender object</param>
<param name="e">The event args</param>
</member>
<member name="E:EpicGames.UBA.IProcess.Exited">
<summary>
Exited event handler
</summary>
</member>
<member name="P:EpicGames.UBA.IProcess.ExitCode">
<summary>
Process exit code
</summary>
</member>
<member name="P:EpicGames.UBA.IProcess.ExecutingHost">
<summary>
The remote host that ran the process, if run remotely
</summary>
</member>
<member name="P:EpicGames.UBA.IProcess.LogLines">
<summary>
Captured output lines
</summary>
</member>
<member name="P:EpicGames.UBA.IProcess.TotalProcessorTime">
<summary>
Total time spent for the processor
</summary>
</member>
<member name="P:EpicGames.UBA.IProcess.TotalWallTime">
<summary>
Total wall time spent
</summary>
</member>
<member name="P:EpicGames.UBA.IProcess.Hash">
<summary>
Unique hash for this process (not stable between runs)
</summary>
</member>
<member name="P:EpicGames.UBA.IProcess.UserData">
<summary>
Arbitary user data
</summary>
</member>
<member name="M:EpicGames.UBA.IProcess.Cancel(System.Boolean)">
<summary>
Cancel the running process
</summary>
<param name="terminate">If the process should be force terminated</param>
</member>
<member name="M:EpicGames.UBA.IProcess.CreateProcess(System.IntPtr,EpicGames.UBA.IProcessStartInfo,EpicGames.UBA.IProcess.ExitedEventHandler,System.Object)">
<summary>
Create a IProcess object
</summary>
<param name="handle">unmanaged pointer to the process</param>
<param name="info">the processes start info</param>
<param name="exitedEventHandler">Optional callback when the process exits</param>
<param name="userData">Arbitary user data</param>
<returns>The IProcess</returns>
</member>
<member name="T:EpicGames.UBA.IServer">
<summary>
Base interface for a server instance
</summary>
</member>
<member name="M:EpicGames.UBA.IServer.StartServer(System.String,System.Int32,System.String)">
<summary>
Start the server
</summary>
<param name="ip">Ip address or host name</param>
<param name="port">The port to use, -1 for default</param>
<param name="crypto">Enable crypto by using a 32 character crypto string (representing a 16 byte value)</param>
<returns></returns>
</member>
<member name="M:EpicGames.UBA.IServer.StopServer">
<summary>
Stop the server
</summary>
</member>
<member name="M:EpicGames.UBA.IServer.AddNamedConnection(System.String)">
<summary>
Add a named connection to the server
</summary>
<param name="name">The name of the connection</param>
<returns>Success</returns>
</member>
<member name="M:EpicGames.UBA.IServer.AddClient(System.String,System.Int32,System.String)">
<summary>
Adds a client that server will try to connect one or more tcp connections to
</summary>
<param name="ip">The ip of the listening client</param>
<param name="port">The port of the listening client</param>
<param name="crypto">Enable crypto by using a 32 character crypto string (representing a 16 byte value)</param>
<returns>Success</returns>
</member>
<member name="M:EpicGames.UBA.IServer.CreateServer(System.Int32,System.Int32,EpicGames.UBA.ILogger,System.Boolean)">
<summary>
Create a IServer object
</summary>
<param name="maxWorkers">Maximum number of workers</param>
<param name="sendSize">Send size in bytes</param>
<param name="logger">The logger</param>
<param name="useQuic">Use Quic protocol instead of tcp for communication between host and helpers</param>
<returns>The IServer</returns>
</member>
<member name="T:EpicGames.UBA.SessionServerCreateInfo">
<summary>
Information needed to create a session server
</summary>
</member>
<member name="P:EpicGames.UBA.SessionServerCreateInfo.RootDirectory">
<summary>
Root directory to store content addressable data
</summary>
</member>
<member name="P:EpicGames.UBA.SessionServerCreateInfo.TraceOutputFile">
<summary>
Path to a trace file that records the build
</summary>
</member>
<member name="P:EpicGames.UBA.SessionServerCreateInfo.DisableCustomAllocator">
<summary>
If the custom allocator should be disabled
</summary>
</member>
<member name="P:EpicGames.UBA.SessionServerCreateInfo.LaunchVisualizer">
<summary>
If the visualizer should be launched
</summary>
</member>
<member name="P:EpicGames.UBA.SessionServerCreateInfo.ResetCas">
<summary>
If the content addressable storage should be reset
</summary>
</member>
<member name="P:EpicGames.UBA.SessionServerCreateInfo.WriteToDisk">
<summary>
If intermediate/output files should be written to disk
</summary>
</member>
<member name="P:EpicGames.UBA.SessionServerCreateInfo.DetailedTrace">
<summary>
More detailed trace information
</summary>
</member>
<member name="P:EpicGames.UBA.SessionServerCreateInfo.AllowWaitOnMem">
<summary>
Wait for memory before starting new processes
</summary>
</member>
<member name="P:EpicGames.UBA.SessionServerCreateInfo.AllowKillOnMem">
<summary>
Kill processes when close to run out of memory
</summary>
</member>
<member name="P:EpicGames.UBA.SessionServerCreateInfo.StoreObjFilesCompressed">
<summary>
Store .obj files compressed on disk
</summary>
</member>
<member name="M:EpicGames.UBA.SessionServerCreateInfo.#ctor(System.String,System.String,System.Boolean,System.Boolean,System.Boolean,System.Boolean,System.Boolean,System.Boolean,System.Boolean,System.Boolean)">
<summary>
Constructor
</summary>
<param name="rootDirectory">Root directory to store content addressable data</param>
<param name="traceOutputFile">Path to a trace file that records the build</param>
<param name="disableCustomAllocator">If the custom allocator should be disabled</param>
<param name="launchVisualizer">If the visualizer should be launched</param>
<param name="resetCas">If the content addressable storage should be reset</param>
<param name="writeToDisk">If intermediate/output files should be written to disk</param>
<param name="detailedTrace">More detailed trace information</param>
<param name="allowWaitOnMem">Wait for memory before starting new processes</param>
<param name="allowKillOnMem">Kill processes when close to run out of memory</param>
<param name="storeObjFilesCompressed">Store .obj files compressed on disk</param>
</member>
<member name="T:EpicGames.UBA.ISessionServerCreateInfo">
<summary>
Base interface for session server create info
</summary>
</member>
<member name="M:EpicGames.UBA.ISessionServerCreateInfo.CreateSessionServerCreateInfo(EpicGames.UBA.IStorageServer,EpicGames.UBA.IServer,EpicGames.UBA.ILogger,EpicGames.UBA.SessionServerCreateInfo)">
<summary>
Create a ISessionServerCreateInfo object
</summary>
<param name="storage">The storage server</param>
<param name="client">The client</param>
<param name="logger">The logger</param>
<param name="info">The session create info</param>
<returns>The ISessionServerCreateInfo</returns>
</member>
<member name="T:EpicGames.UBA.RemoteProcessSlotAvailableEventArgs">
<summary>
Event args for remote process slot available event
</summary>
</member>
<member name="T:EpicGames.UBA.RemoteProcessReturnedEventArgs">
<summary>
Event args for remote process returned event
</summary>
</member>
<member name="M:EpicGames.UBA.RemoteProcessReturnedEventArgs.#ctor(EpicGames.UBA.IProcess)">
<summary>
Constructor
</summary>
<param name="process">The process being returned</param>
</member>
<member name="P:EpicGames.UBA.RemoteProcessReturnedEventArgs.Process">
<summary>
The remote process that was returned
</summary>
</member>
<member name="T:EpicGames.UBA.ISessionServer">
<summary>
Base interface for a session server instance
</summary>
</member>
<member name="T:EpicGames.UBA.ISessionServer.RemoteProcessSlotAvailableEventHandler">
<summary>
Degeate for remote process slot available events
</summary>
<param name="sender">The sender object</param>
<param name="e">The event args</param>
</member>
<member name="T:EpicGames.UBA.ISessionServer.RemoteProcessReturnedEventHandler">
<summary>
Degeate for remote process returned events
</summary>
<param name="sender">The sender object</param>
<param name="e">The event args</param>
</member>
<member name="E:EpicGames.UBA.ISessionServer.RemoteProcessSlotAvailable">
<summary>
Remote process slot available event handler
</summary>
</member>
<member name="E:EpicGames.UBA.ISessionServer.RemoteProcessReturned">
<summary>
Remote process returned event handler
</summary>
</member>
<member name="M:EpicGames.UBA.ISessionServer.DisableRemoteExecution">
<summary>
Will tell all remote machines that they can disconnect once their active processes are done
Will also stop listening for new remote machines
</summary>
</member>
<member name="M:EpicGames.UBA.ISessionServer.SetMaxRemoteProcessCount(System.UInt32)">
<summary>
Set max number of processes that can be executed remotely.
Setting this can let the backend disconnect remote workers earlier
</summary>
</member>
<member name="M:EpicGames.UBA.ISessionServer.RunProcess(EpicGames.UBA.ProcessStartInfo,System.Boolean,EpicGames.UBA.IProcess.ExitedEventHandler,System.Boolean)">
<summary>
Run a local process
</summary>
<param name="info">Process start info</param>
<param name="async">If the process should be run async</param>
<param name="exitedEventHandler">Optional callback when the process exits</param>
<param name="enableDetour">Should be true unless process does not work being detoured (And in that case we need to manually register file system changes)</param>
<returns>The process being run</returns>
</member>
<member name="M:EpicGames.UBA.ISessionServer.RunProcessRemote(EpicGames.UBA.ProcessStartInfo,EpicGames.UBA.IProcess.ExitedEventHandler,System.Double,System.Byte[],System.UInt32)">
<summary>
Run a remote process
</summary>
<param name="info">Process start info</param>
<param name="exitedEventHandler">Optional callback when the process exits</param>
<param name="weight">Number of cores this process uses</param>
<param name="knownInputs">Optionally contains input that we know process will need. Memory block containing zero-terminated strings with an extra termination in the end.</param>
<param name="knownInputsCount">Number of strings in known inputs</param>
<returns>The remote process being run</returns>
</member>
<member name="M:EpicGames.UBA.ISessionServer.RefreshDirectories(System.String[])">
<summary>
Refresh cached information about directories
</summary>
<param name="directories">The directories to refresh</param>
</member>
<member name="M:EpicGames.UBA.ISessionServer.RegisterNewFiles(System.String[])">
<summary>
Registers external files write to session caches
</summary>
<param name="files">The files to register</param>
</member>
<member name="M:EpicGames.UBA.ISessionServer.BeginExternalProcess(System.String)">
<summary>
Registers the start of an external process
</summary>
<param name="description">The description of the process</param>
<returns>The process id that should be sent into EndExternalProcess</returns>
</member>
<member name="M:EpicGames.UBA.ISessionServer.EndExternalProcess(System.UInt32,System.UInt32)">
<summary>
Registers the end of an external process
</summary>
<param name="id">The id returned by BeginExternalProcess</param>
<param name="exitCode">The exit code of the external process</param>
</member>
<member name="M:EpicGames.UBA.ISessionServer.UpdateProgress(System.UInt32,System.UInt32,System.UInt32)">
<summary>
Writes external status to the uba trace stream which can then be visualized by ubavisualizer
</summary>
<param name="processesTotal">Total processes in session</param>
<param name="processesDone">Processes done in session</param>
<param name="errorCount">Number of errors in session</param>
</member>
<member name="M:EpicGames.UBA.ISessionServer.UpdateStatus(System.UInt32,System.UInt32,System.String,EpicGames.UBA.LogEntryType,System.String)">
<summary>
Writes external status to the uba trace stream which can then be visualized by ubavisualizer
</summary>
<param name="statusRow">Row of status text. Reuse one index to show one line in visualizer</param>
<param name="statusColumn">The identation of status name that will be shown in visualizer</param>
<param name="statusText">The status text that will be shown in visualizer</param>
<param name="statusType">The status type</param>
<param name="statusLink">Optional hyperlink that can be used to make text clickable in visualizer</param>
</member>
<member name="M:EpicGames.UBA.ISessionServer.SetCustomCasKeyFromTrackedInputs(System.String,System.String,EpicGames.UBA.IProcess)">
<summary>
Set a custom cas key for a process's tracked inputs
</summary>
<param name="file">The file to track</param>
<param name="workingDirectory">The working directory</param>
<param name="process">The process to get tracked inputs from</param>
</member>
<member name="M:EpicGames.UBA.ISessionServer.CancelAll">
<summary>
Cancel all processes
</summary>
</member>
<member name="M:EpicGames.UBA.ISessionServer.PrintSummary">
<summary>
Print summary information to the logger
</summary>
</member>
<member name="M:EpicGames.UBA.ISessionServer.CreateSessionServer(EpicGames.UBA.ISessionServerCreateInfo)">
<summary>
Create a ISessionServer object
</summary>
<param name="info">The session server create info</param>
<returns>The ISessionServer</returns>
</member>
<member name="T:EpicGames.UBA.StorageServerCreateInfo">
<summary>
Information needed to create a storage server
</summary>
</member>
<member name="P:EpicGames.UBA.StorageServerCreateInfo.RootDirectory">
<summary>
The root directory for the storage
</summary>
</member>
<member name="P:EpicGames.UBA.StorageServerCreateInfo.CapacityBytes">
<summary>
The capacity of the storage in bytes
</summary>
</member>
<member name="P:EpicGames.UBA.StorageServerCreateInfo.StoreCompressed">
<summary>
If the storage should be stored as compressed
</summary>
</member>
<member name="P:EpicGames.UBA.StorageServerCreateInfo.Zone">
<summary>
The geographical zone this machine belongs to. Can be empty
</summary>
</member>
<member name="M:EpicGames.UBA.StorageServerCreateInfo.#ctor(System.String,System.UInt64,System.Boolean,System.String)">
<summary>
Constructor
</summary>
<param name="rootDirectory">The root directory for the storage</param>
<param name="capacityBytes">The capacity of the storage in bytes</param>
<param name="storeCompressed">If the storage should be stored as compressed</param>
<param name="zone">The geographical zone this machine belongs to. Can be empty</param>
</member>
<member name="T:EpicGames.UBA.IStorageServer">
<summary>
Base interface for a storage server instance
</summary>
</member>
<member name="M:EpicGames.UBA.IStorageServer.SaveCasTable">
<summary>
Save tge content addressabale storage table
</summary>
</member>
<member name="M:EpicGames.UBA.IStorageServer.RegisterDisallowedPath(System.String)">
<summary>
Register disallowed paths for clients to download
</summary>
</member>
<member name="M:EpicGames.UBA.IStorageServer.CreateStorageServer(EpicGames.UBA.IServer,EpicGames.UBA.ILogger,EpicGames.UBA.StorageServerCreateInfo)">
<summary>
Create a IStorageServer object
</summary>
<param name="server">The server</param>
<param name="logger">The logger</param>
<param name="info">The storage create info</param>
<returns>The IStorageServer</returns>
</member>
<member name="T:EpicGames.UBA.ThreadedLogger">
<summary>
Threaded logging for use by UBAExecutor
</summary>
</member>
<member name="M:EpicGames.UBA.ThreadedLogger.#ctor(Microsoft.Extensions.Logging.ILogger)">
<summary>
Constructor
</summary>
<param name="logger">The logger</param>
</member>
<member name="M:EpicGames.UBA.ThreadedLogger.Finalize">
<summary>
Destructor
</summary>
</member>
<member name="M:EpicGames.UBA.ThreadedLogger.Dispose">
<inheritdoc/>
</member>
<member name="M:EpicGames.UBA.ThreadedLogger.Dispose(System.Boolean)">
<summary>
Protected dispose
</summary>
</member>
<member name="M:EpicGames.UBA.ThreadedLogger.Log``1(Microsoft.Extensions.Logging.LogLevel,Microsoft.Extensions.Logging.EventId,``0,System.Exception,System.Func{``0,System.Exception,System.String})">
<inheritdoc/>
</member>
<member name="M:EpicGames.UBA.ThreadedLogger.IsEnabled(Microsoft.Extensions.Logging.LogLevel)">
<inheritdoc/>
</member>
<member name="M:EpicGames.UBA.ThreadedLogger.BeginScope``1(``0)">
<inheritdoc/>
</member>
<member name="M:EpicGames.UBA.ThreadedLogger.FinishAsync">
<summary>
Finish logging async
</summary>
</member>
<member name="T:EpicGames.UBA.Utils">
<summary>
Utils
</summary>
</member>
<member name="M:EpicGames.UBA.Utils.IsAvailable">
<summary>
Is UBA available?
</summary>
</member>
<member name="M:EpicGames.UBA.Utils.DisallowedPaths">
<summary>
Paths that are not allowed to be transferred over the network for UBA remote agents.
</summary>
<returns>enumerable of disallowed paths</returns>
</member>
<member name="M:EpicGames.UBA.Utils.RegisterDisallowedPaths(System.String[])">
<summary>
Registers a path that is not allowed to be transferred over the network for UBA remote agents.
</summary>
<param name="paths">The paths to add to thie disallowed list</param>
</member>
<member name="M:EpicGames.UBA.Utils.GetLibraryPath">
<summary>
Get the path to the p/invoke library that would be loaded
</summary>
<returns>The path to the library</returns>
<exception cref="T:System.PlatformNotSupportedException">If the operating system is not supported</exception>
</member>
</members>
</doc>

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -0,0 +1,749 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Build" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-15.1.0.0" newVersion="15.1.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Build.Framework" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-15.1.0.0" newVersion="15.1.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Build.Utilities.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-15.1.0.0" newVersion="15.1.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Build.Tasks.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-15.1.0.0" newVersion="15.1.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Configuration" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Configuration.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.DependencyInjection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Logging" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Options" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Primitives" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.CodeDom" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Configuration.ConfigurationManager" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.EventLog" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Drawing.Common" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.2.3" newVersion="4.0.2.3" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Security.Permissions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.ServiceProcess.ServiceController" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.3.0" newVersion="4.2.3.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Windows.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.VisualBasic.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Win32.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Win32.Registry" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Collections.Concurrent" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Collections.NonGeneric" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Collections.Specialized" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Collections" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel.EventBasedAsync" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel.TypeConverter" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Console" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Data.Common" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.Contracts" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.Debug" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.FileVersionInfo" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.Process" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.StackTrace" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.TextWriterTraceListener" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.TraceSource" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.Tracing" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Drawing.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.IO.Compression.ZipFile" publicKeyToken="b77a5c561934e089" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.IO.FileSystem.AccessControl" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.IO.FileSystem.DriveInfo" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.IO.FileSystem.Watcher" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.IO.FileSystem" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.IO.IsolatedStorage" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.IO.MemoryMappedFiles" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.IO.Pipes.AccessControl" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.IO.Pipes" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Linq.Expressions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Linq.Parallel" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Linq.Queryable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Linq" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.HttpListener" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Mail" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.NameResolution" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.NetworkInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Ping" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Requests" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Security" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.ServicePoint" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Sockets" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.WebClient" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.WebHeaderCollection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.WebProxy" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.WebSockets.Client" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.WebSockets" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.ObjectModel" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Reflection.Emit.ILGeneration" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Reflection.Emit.Lightweight" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Reflection.Emit" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Reflection.Metadata" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Reflection.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Resources.ResourceManager" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Resources.Writer" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.VisualC" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Extensions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.InteropServices" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Intrinsics" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Loader" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Numerics" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Serialization.Formatters" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Serialization.Json" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Serialization.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Serialization.Xml" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Security.AccessControl" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Security.Claims" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Security.Cryptography.Algorithms" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Security.Cryptography.Csp" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Security.Cryptography.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Security.Cryptography.X509Certificates" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Security.Cryptography" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Security.Principal.Windows" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Text.Encoding.CodePages" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Text.Encoding.Extensions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Text.Encodings.Web" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Text.RegularExpressions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Threading.Overlapped" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks.Dataflow" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks.Parallel" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Threading.Thread" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Threading.ThreadPool" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Threading" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Transactions.Local" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.HttpUtility" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Xml.ReaderWriter" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Xml.XDocument" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Xml.XPath.XDocument" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Xml.XPath" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Xml.XmlSerializer" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="netstandard" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,18 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"rollForward": "Major",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
"configProperties": {
"System.GC.Server": true,
"System.GC.HeapCount": 32,
"System.Globalization.Invariant": true,
"System.Globalization.UseNls": true,
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

BIN
Binaries/Win64/UnrealEditor-LyraEditor.dll (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Binaries/Win64/UnrealEditor-LyraEditor.pdb (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Binaries/Win64/UnrealEditor-LyraGame.dll (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Binaries/Win64/UnrealEditor-LyraGame.pdb (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,8 @@
{
"BuildId": "37670630",
"Modules":
{
"LyraEditor": "UnrealEditor-LyraEditor.dll",
"LyraGame": "UnrealEditor-LyraGame.dll"
}
}

View File

@ -0,0 +1,18 @@
R,"WARNING: The option 'android.enableD8' is deprecated and should not be used anymore.","WARNING: ",">> "
R,"WARNING: The specified Android SDK Build Tools version","WARNING: ",">> "
R,"Warning: Resigning with jarsigner.","Warning: ",">> "
R,"Unable to strip library","due to error",""
R,"To suppress this warning,"," warning,",","
S,"Transforming artifact "
R,"WARNING: The option setting 'android.enableR8=false' is deprecated","WARNING: ",">> "
R,"To suppress this warning,","WARNING: ",">> "
R,"WARNING: Failed to verify arm64-v8a\\libeasyanticheat_ig.so native library header.","WARNING: ",">> "
R,"WARNING: Debug Info Strip Guard range rule for class androidx.*. did not match any symbols.","WARNING: ",">> "
R,"WARNING: ProGuard re-trace tool might inaccurately de-obfuscate some / all crash traces due to the following configuration settings:","WARNING: ",">> "
R,"WARNING: DSL element 'useProguard' is obsolete","WARNING: ",">> "
R,"WARNING: Unable to find RequiresApi annotation. It's either unused (okay) or been deleted (not okay)","WARNING: ",">> "
R,"WARNING: The option setting 'android.useNewApkCreator=false' is experimental.","WARNING: ",">> "
R,"WARNING: Excluding all native methods from arm64-v8a","WARNING: ",">> "
R,"WARNING:The option setting 'android.useNewApkCreator=false' is deprecated.","WARNING:",">> "
R,"WARNING:The option setting 'android.bundle.enableUncompressedNativeLibs=false' is deprecated.","WARNING:",">> "
R,"WARNING:Using flatDir should be avoided because it doesn't support any meta-data formats.","WARNING:",">> "

View File

@ -0,0 +1,14 @@
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
# Project target.
target=android-19

BIN
Build/Android/res/drawable-hdpi/icon.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Build/Android/res/drawable-ldpi/icon.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Build/Android/res/drawable-mdpi/icon.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Build/Android/res/drawable-nodpi/vr_icon.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Build/Android/res/drawable-nodpi/vr_icon_background.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Build/Android/res/drawable-xhdpi/icon.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Build/Android/res/drawable/downloadimageh.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Build/Android/res/drawable/downloadimagev.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Build/Android/res/drawable/icon.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Build/Android/res/drawable/splashscreen_landscape.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Build/Android/res/drawable/splashscreen_portrait.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,4 @@
pushd "%~dp0..\..\..\..\.."
call .\Engine\Build\BatchFiles\RunUAT.bat BuildCookRun -nop4 -project=./Samples/Games/Lyra/Lyra.uproject -cook -stage -archive -archivedirectory=./Samples/Games/Lyra/PackagedDev -package -compressed -pak -prereqs -targetplatform=Win64 -build -target=LyraGame -clientconfig=Development -utf8output -compile
pause

View File

@ -0,0 +1,4 @@
pushd "%~dp0..\..\..\..\.."
call .\Engine\Build\BatchFiles\RunUAT.bat BuildCookRun -nop4 -project=./Samples/Games/Lyra/Lyra.uproject -cook -stage -archive -archivedirectory=./Samples/Games/Lyra/PackagedDevEOS -package -compressed -pak -prereqs -targetplatform=Win64 -build -target=LyraGameEOS -clientconfig=Development -utf8output -compile
pause

View File

@ -0,0 +1,4 @@
pushd "%~dp0..\..\..\..\.."
call .\Engine\Build\BatchFiles\RunUAT.bat BuildGraph -Script=Samples/Games/Lyra/Build/LyraTests.xml -Target="BuildAndTest Lyra" -UseLocalBuildStorage
pause

View File

@ -0,0 +1,13 @@
pushd "%~dp0..\..\..\..\.."
REM Pick one of the localizers that you've configured.
REM =======================
REM CrowdIn
REM =======================
REM call .\Engine\Build\BatchFiles\RunUAT.bat Localize -p4 -UEProjectDirectory="Samples\Games\Lyra" -UEProjectName=Lyra -LocalizationBranch="Main" -LocalizationProjectNames=Game -LocalizationProvider=XLoc_Sample
REM =======================
REM LocX
REM =======================
REM call .\Engine\Build\BatchFiles\RunUAT.bat Localize -p4 -UEProjectDirectory="Samples\Games\Lyra" -UEProjectName=Lyra -LocalizationBranch="Main" -LocalizationProjectNames=Game -LocalizationProvider=Crowdin_Sample
pause

View File

@ -0,0 +1,7 @@
Name,Statistic,TelemetryContext,TelemetryDataPoint,TelemetryUnit,BaselineWarningThreshold,BaselineErrorThreshold,
Generated Scope for LoadAsset - /Game/System/DefaultEditorMap/L_DefaultEditorOverview,TotalDurationSeconds,Events,Load L_DefaultEditorOverview,Seconds,10%,,
Generated Scope for PIE - /Game/System/DefaultEditorMap/L_DefaultEditorOverview,TotalDurationSeconds,Events,PIE L_DefaultEditorOverview,Seconds,10%,,
Generated Scope for LoadAsset - /Game/System/FrontEnd/Maps/L_LyraFrontEnd,TotalDurationSeconds,Events,Load L_LyraFrontEnd,Seconds,10%,,
Generated Scope for PIE - /Game/System/FrontEnd/Maps/L_LyraFrontEnd,TotalDurationSeconds,Events,PIE L_LyraFrontEnd,Seconds,10%,,
Generated Scope for LoadAsset - /ShooterMaps/Maps/L_Expanse,TotalDurationSeconds,Events,Load L_Expanse,Seconds,10%,,
Generated Scope for PIE - /ShooterMaps/Maps/L_Expanse,TotalDurationSeconds,Events,PIE L_Expanse,Seconds,10%,,
1 Name Statistic TelemetryContext TelemetryDataPoint TelemetryUnit BaselineWarningThreshold BaselineErrorThreshold
2 Generated Scope for LoadAsset - /Game/System/DefaultEditorMap/L_DefaultEditorOverview TotalDurationSeconds Events Load L_DefaultEditorOverview Seconds 10%
3 Generated Scope for PIE - /Game/System/DefaultEditorMap/L_DefaultEditorOverview TotalDurationSeconds Events PIE L_DefaultEditorOverview Seconds 10%
4 Generated Scope for LoadAsset - /Game/System/FrontEnd/Maps/L_LyraFrontEnd TotalDurationSeconds Events Load L_LyraFrontEnd Seconds 10%
5 Generated Scope for PIE - /Game/System/FrontEnd/Maps/L_LyraFrontEnd TotalDurationSeconds Events PIE L_LyraFrontEnd Seconds 10%
6 Generated Scope for LoadAsset - /ShooterMaps/Maps/L_Expanse TotalDurationSeconds Events Load L_Expanse Seconds 10%
7 Generated Scope for PIE - /ShooterMaps/Maps/L_Expanse TotalDurationSeconds Events PIE L_Expanse Seconds 10%

98
Build/LyraBuild.xml Normal file
View File

@ -0,0 +1,98 @@
<?xml version='1.0' ?>
<BuildGraph xmlns="http://www.epicgames.com/BuildGraph" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.epicgames.com/BuildGraph ../Schema.xsd" >
<Option Name="EditorCompileArgs" DefaultValue="" Description="Arguments to be used for EditorTarget Compile"/>
<Option Name="ExtraToolCompileArguments" DefaultValue="" Description="Arguments to be used for Tool Compile"/>
<Option Name="ExtraTargetCompileArguments" DefaultValue="" Description="Arguments to be used for Client Compile"/>
<Option Name="TargetPlatforms" Restrict="[^ ]*" DefaultValue="Win64" Description="List of the target platforms to build for, separated by semicolons, eg. Win64;Win32;Android"/>
<Option Name="OutputDir" DefaultValue="$(RootDir)\LocalBuilds\LyraBinaries" Description ="Output directory for compiled binaries"/>
<Option Name="Versioned" Restrict="true|false" DefaultValue="$(IsBuildMachine)" Description="Whether to embed changelist number into binaries"/>
<Option Name="PCBSubmitPath" Restrict="(?://.*)?" DefaultValue="" Description="Where in Perforce to submit the PCBs to."/>
<Option Name="PreflightChange" Restrict="\d*" DefaultValue="" Description="The shelved changelist number in a preflight build; empty otherwise"/>
<Property Name="IsPreflight" Value="true" If="'$(PreflightChange)' != ''"/>
<Property Name="IsPreflight" Value="false" If="'$(PreflightChange)' == ''"/>
<EnvVar Name="COMPUTERNAME"/>
<EnvVar Name="P4CLIENT"/>
<Agent Name="Submit Lyra PCBs" Type="CompileWin64;Win64">
<!-- Update the engine version files -->
<Node Name="Update Version Files">
<SetVersion Change="$(Change)" Branch="$(EscapedBranch)" If="$(Versioned)"/>
</Node>
<!-- Compile the tool executables -->
<Node Name="Compile Tools Win64" Requires="Update Version Files" Produces="#ToolBinaries">
<Compile Target="ShaderCompileWorker" Platform="Win64" Configuration="Development" Arguments="$(ExtraToolCompileArguments)" Tag="#ToolBinaries"/>
<Compile Target="UnrealLightmass" Platform="Win64" Configuration="Development" Arguments="$(ExtraToolCompileArguments)" Tag="#ToolBinaries"/>
<Compile Target="UnrealPak" Platform="Win64" Configuration="Development" Arguments="$(ExtraToolCompileArguments)" Tag="#ToolBinaries"/>
<Compile Target="CrashReportClientEditor" Configuration="Shipping" Platform="Win64" Arguments="$(ExtraToolCompileArguments)" Tag="#ToolBinaries"/>
<Compile Target="UnrealInsights" Platform="Win64" Configuration="Shipping" Arguments="$(ExtraToolCompileArguments)" Tag="#ToolBinaries"/>
<!--
This exe is a copy of ShaderCompileWorker.exe, created as a post-build step. See \Engine\Source\Programs\ShaderCompileWorker\ShaderCompileWorker.Target.cs.
It's needed for shader compilation to work with Incredibuild.
-->
<Tag Files="$(RootDir)\Engine\Binaries\Win64\XGEControlWorker.exe" With="#ToolBinaries"/>
</Node>
<!-- Compile the editor executable -->
<Node Name="Compile LyraEditor Win64" Requires="Compile Tools Win64" Produces="#EditorBinaries">
<Compile Target="LyraEditor" Platform="Win64" Configuration="Development" Tag="#EditorBinaries" Arguments="$(EditorCompileArgs)"/>
</Node>
<!-- Compile the game targets -->
<Property Name="GameBinaries" Value=""/>
<ForEach Name="TargetPlatform" Values="$(TargetPlatforms)">
<Node Name="Compile LyraGame $(TargetPlatform)" Requires="Compile Tools Win64" Produces="#GameBinaries_LyraGame_$(TargetPlatform)">
<Compile Target="LyraGame" Platform="$(TargetPlatform)" Configuration="Development" Arguments="$(ExtraTargetCompileArguments)" Tag="#GameBinaries_LyraGame_$(TargetPlatform)"/>
<Compile Target="LyraGame" Platform="$(TargetPlatform)" Configuration="Shipping" Arguments="$(ExtraTargetCompileArguments)" Tag="#GameBinaries_LyraGame_$(TargetPlatform)"/>
</Node>
<Property Name="GameBinaries" Value="$(GameBinaries)#GameBinaries_LyraGame_$(TargetPlatform);"/>
</ForEach>
<!-- Copy all the files to the output directory -->
<Node Name="Tag Output Files" Requires="#ToolBinaries;#EditorBinaries;$(GameBinaries)" Produces="#OutputFiles">
<Tag Files="#ToolBinaries;#EditorBinaries;$(GameBinaries)" Except=".../Intermediate/..." With="#OutputFiles"/>
</Node>
<!-- Copy all the files to the output directory -->
<Node Name="Copy To Staging Directory" Requires="#OutputFiles">
<Delete Files="$(OutputDir)/..."/>
<Copy Files="#OutputFiles" From="$(RootDir)" To="$(OutputDir)"/>
</Node>
<!-- Create a zip archive and submit that to Perforce for use by UGS -->
<Node Name="Submit To Perforce For UGS" Requires="#OutputFiles">
<!-- Clear out the archive directory -->
<Property Name="ArchiveDir" Value="$(RootDir)\LocalBuilds\ArchiveForUGS"/>
<Delete Files="$(ArchiveDir)\..."/>
<!-- Tag required files from UAT and UBT that will already have been built -->
<Tag Files="Engine/Source/Programs/AutomationTool/..." Filter="*.csproj" With="#UAT Projects"/>
<CsCompile Project="#UAT Projects" Configuration="Development" Platform="AnyCPU" Tag="#ArchiveFiles" EnumerateOnly="true"/>
<!-- Partition all the binaries and symbols -->
<Tag Files="#OutputFiles" Except=".../Intermediate/..." With="#ArchiveFiles"/>
<Tag Files="#ArchiveFiles" Except="*.pdb" With="#ArchiveBinaries"/>
<Tag Files="#ArchiveFiles" Filter="*.pdb" With="#ArchiveSymbols"/>
<!-- Stage all the files to be archived -->
<Property Name="ArchiveStagingDir" Value="$(ArchiveDir)\Staging"/>
<Copy Files="#ArchiveBinaries" From="$(RootDir)" To="$(ArchiveStagingDir)"/>
<Strip Files="#ArchiveSymbols" BaseDir="$(RootDir)" OutputDir="$(ArchiveStagingDir)" Platform="Win64"/>
<!-- Create the zip file and submit it to Perforce -->
<Property Name="ArchivePerforceDir" Value="$(ArchiveDir)\Perforce"/>
<Property Name="ArchiveFile" Value="$(ArchivePerforceDir)\$(EscapedBranch)-LyraEditor.zip"/>
<Zip FromDir="$(ArchiveStagingDir)" ZipFile="$(ArchiveFile)"/>
<Property Name="SubmitClient" Value="$(COMPUTERNAME)_ArchiveForUGS"/>
<Property Name="SubmitClient" Value="$(P4CLIENT)_ArchiveForUGS" If="$(IsBuildMachine)"/>
<Submit Description="[CL $(CodeChange)] Updated binaries" Files="$(ArchiveFile)" FileType="binary+FS32" Workspace="$(SubmitClient)" Stream="$(PCBSubmitPath)" RootDir="$(ArchivePerforceDir)"/>
</Node>
</Agent>
</BuildGraph>

281
Build/LyraTests.xml Normal file
View File

@ -0,0 +1,281 @@
<?xml version='1.0' ?>
<BuildGraph xmlns="http://www.epicgames.com/BuildGraph" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.epicgames.com/BuildGraph ../../../../Engine/Build/Graph/Schema.xsd" >
<!-- TODO NDarnell Add documentation -->
<!-- "-Target=BuildAndTestInternalExtended Lyra" -->
<!-- Project Info -->
<!-- @TODO: Can we derive these somehow instead of hardcoding them? Will be an issue when turned into a launcher sample. -->
<Property Name="ProjectName" Value="Lyra" />
<Property Name="ProjectPath" Value="Samples/Games/Lyra" />
<Option Name="TargetName" DefaultValue="LyraGame" Restrict="LyraGame|LyraGameEOS" Description="The project target configuration we're building, like if we're building Lyra with EOS (Epic Online Services) compiled in." />
<Property Name="Versioned" Value="$(IsBuildMachine)" />
<Property Name="PublishHashedStagingData" Value="$(IsBuildMachine)" />
<Property Name="IncludeEpicWebHelperInToolCompile" Value="true" />
<Option Name="UploadArtifactId" DefaultValue="" Description="ID of the artifact to chunked and uploaded. Upload is ignored if no ID is specified." />
<Option Name="UploadTargetPlatform" DefaultValue="" Description="Platform build to upload, i.e. Win64" />
<Option Name="UploadConfiguration" DefaultValue="" Description="Configuration to upload, if applicable." />
<Option Name="UploadLaunchArgs" DefaultValue="" Description="Arguments to be passed when launching the uploaded app."/>
<Option Name="SkipUpdateAuditCollections" DefaultValue="false" Description="Whether to skip updating the audit collections (showing which files got cooked)" />
<Option Name="SymbolServerPath" DefaultValue="" Description="A shared symbols server for your office, debugging shipped builds."/>
<Option Name="RunCookOnTheFlyTest" DefaultValue="false" Description="To run cook on the fly test"/>
<Option Name="RunProjectTests" DefaultValue="false" Description="To run all tests under the Project Group"/>
<Option Name="SourceBuildVersion" DefaultValue="" Description="The source build version for diffing"/>
<!-- Turn off defaults so we can set out own -->
<Property Name="WithBATDefaults" Value="false" />
<!-- Set defaults for people running this script with no arguments. These can still be overriden with -set:TargetPlatforms= etc) -->
<Property Name="DefaultEditorPlatforms" Value="Win64" />
<Property Name="DefaultTargetPlatforms" Value="Win64"/>
<Property Name="DefaultTargetConfigurations" Value="Development" />
<Property Name="DefaultEditorTestList" Value="" />
<Property Name="DefaultTargetTestList" Value="" />
<Property Name="NetworkTempRootOverride" Value="" />
<Property Name="NetworkPublishRootOverride" Value="" />
<Property Name="NetworkReportRootOverride" Value="" />
<Property Name="WithInterchangeWorker" Value="true" />
<!-- If a build machine, turn off all defaults. Settings should be specified via the website UI -->
<Do If="$(IsBuildMachine)">
<Property Name="DefaultEditorPlatforms" Value="" />
<Property Name="DefaultTargetPlatforms" Value=""/>
<Property Name="DefaultTargetConfigurations" Value="" />
<Property Name="DefaultEditorTestList" Value="" />
<Property Name="DefaultTargetTestList" Value="" />
</Do>
<Property Name="DefaultTargetTestList" Value="$(DefaultTargetTestList)+UE.CookOnTheFly(Map=L_Expanse)" If="$(RunCookOnTheFlyTest)" />
<Property Name="DefaultTargetTestList" Value="$(DefaultTargetTestList)+UE.TargetAutomation(RunTest=Group:Project)" If="$(RunProjectTests)" />
<Property Name="DefaultEditorTestList" Value="$(DefaultEditorTestList)+UE.EditorAutomation(RunTest=Group:Project)" If="$(RunProjectTests)" />
<Property Name="ExtraStageAndPackageArguments" Value="-target=&quot;$(TargetName)&quot; -compressed -CrashReporter" />
<Property Name="CheckBuildSizePlatforms" Value="Android:420000" />
<!-- =============================================================================== -->
<!-- Setup -->
<!-- =============================================================================== -->
<!-- This will declare an aggregate called BuildAndTest Lyra -->
<Include Script="../../../../Engine/Build/Graph/Tasks/BuildAndTestProject.xml" />
<!-- Add BuildAndTest project target node as the base requirement. We append items to BuildAndTestExtendedRequirements, that need to be performed. -->
<Property Name="BuildAndTestExtendedRequirements" Value="BuildAndTest $(ProjectName)" />
<!-- =============================================================================== -->
<!-- CONTENT VALIDATION -->
<!-- =============================================================================== -->
<Do If="ContainsItem('$(RequiredEditorPlatforms)', 'Win64', '+')">
<Agent Name="$(ProjectName) Content Validation" Type="Win64">
<Node Name="$(ProjectName) Content Validation" Requires="$(PreNodeName)Compile Editor Win64">
<Property Name="RefExtensionsTypelist" Value=".uasset,.umap,.cpp,.c,.h,.inl,.ini,.uproject,.uplugin,.json"/>
<Property Name="CLArgs" Value="-CL=$(Change) -LastGoodContentCLPath=$(NetworkOutputDirectory)/AutoTest/LastGoodContentCL"/>
<Property Name="CLArgs" Value="-CL=$(PreflightChange) -shelved -SkipPrevCLFileExport" If="$(IsPreflight)" />
<Property Name="CLArgs" Value="-opened" If="!$(IsBuildMachine)" />
<Property Name="CheckAssetReferencesArgs" Value="-Branch=$(Branch) $(CLArgs) -ExtTypeList=&quot;$(RefExtensionsTypelist)&quot; -MaxPackagesToLoad=3000" />
<Command Name="LyraContentValidation" Arguments="$(CheckAssetReferencesArgs)"/>
</Node>
<Label Category="Test" Name="Content Validation" Requires="$(ProjectName) Content Validation" />
</Agent>
<Do If="!$(SkipTest)">
<!-- Append Content Validation to the list of things to do -->
<Property Name="BuildAndTestExtendedRequirements" Value="$(BuildAndTestExtendedRequirements);$(ProjectName) Content Validation"/>
</Do>
</Do>
<!-- =============================================================================== -->
<!-- LOCALIZATION -->
<!-- =============================================================================== -->
<Option Name="SkipLocalization" DefaultValue="false" Description="Should we skip performing a localization gather?"/>
<Do If="!$(SkipLocalization) and ContainsItem('$(RequiredEditorPlatforms)', 'Win64', '+')">
<Property Name="ProjectsIncludedInLocalization" Value="Game,EngineOverrides"/>
<!-- This an example setup for using either XLoc or Crowdin providers to localize your game. -->
<!-- XLoc Example -->
<Option Name="XLoc_Server" DefaultValue="" Description="XLoc Server"/>
<Option Name="XLoc_APIKey" DefaultValue="" Description="XLoc API Key"/>
<Option Name="XLoc_APISecret" DefaultValue="" Description="XLoc API Secret"/>
<Option Name="XLoc_LocalizationId" DefaultValue="" Description="XLoc LocalizationId"/>
<Option Name="XLoc_AgentType" DefaultValue="Loc;Win64" Description="XLoc Agent Type"/>
<Do If="'$(XLoc_Server)' != '' And '$(XLoc_APIKey)' != '' And '$(XLoc_APISecret)' != '' And '$(XLoc_LocalizationId)' != ''">
<Agent Name="Localization" Type="$(XLoc_AgentType)">
<Node Name="$(ProjectName) Localize" Requires="$(PreNodeName)Compile Editor Win64">
<Command Name="Localize" Arguments="-LocalizationProvider=XLoc_Sample -UEProjectDirectory=$(ProjectPath) -UEProjectName=$(ProjectName) -LocalizationProjectNames=$(ProjectsIncludedInLocalization) -LocalizationBranch=&quot;$(EscapedBranch)&quot; -Server=&quot;$(XLoc_Server)&quot; -APIKey=&quot;$(XLoc_APIKey)&quot; -APISecret=&quot;$(XLoc_APISecret)&quot; -LocalizationId=&quot;$(XLoc_LocalizationId)&quot;" />
</Node>
</Agent>
<!-- Append Localize to the list of things to do. -->
<Label Category="Localize" Name="Localize" Requires="$(ProjectName) Localize" />
<Property Name="BuildAndTestExtendedRequirements" Value="$(BuildAndTestExtendedRequirements);$(ProjectName) Localize"/>
</Do>
<!-- Crowdin Example -->
<Option Name="Crowdin_ProjectId" DefaultValue="" Description="Crowdin ProjectId"/>
<Option Name="Crowdin_AccessToken" DefaultValue="" Description="Crowdin AccessToken"/>
<Do If="'$(Crowdin_ProjectId)' != '' And '$(Crowdin_AccessToken)' != ''">
<Agent Name="Localization" Type="$(XLoc_AgentType)">
<Node Name="$(ProjectName) Localize" Requires="$(PreNodeName)Compile Editor Win64">
<Command Name="Localize" Arguments="-LocalizationProvider=Crowdin_Sample -UEProjectDirectory=$(ProjectPath) -UEProjectName=$(ProjectName) -LocalizationProjectNames=$(ProjectsIncludedInLocalization) -LocalizationBranch=&quot;$(EscapedBranch)&quot; -ProjectId=&quot;$(Crowdin_ProjectId)&quot; -AccessToken=&quot;$(Crowdin_AccessToken)&quot;" />
</Node>
</Agent>
<!-- Append Localize to the list of things to do. -->
<Label Category="Localize" Name="Localize" Requires="$(ProjectName) Localize" />
<Property Name="BuildAndTestExtendedRequirements" Value="$(BuildAndTestExtendedRequirements);$(ProjectName) Localize"/>
</Do>
</Do>
<!-- =============================================================================== -->
<!-- UPDATE ASSET AUDIT COLLECTIONS -->
<!-- =============================================================================== -->
<Do If="!$(SkipUpdateAuditCollections) and ContainsItem('$(TargetPlatforms)', 'Win64', '+')">
<Agent Name="UpdateAuditCollections" Type="Win64">
<Node Name="$(ProjectName) UpdateAuditCollections" After="$(PreNodeName)Stage Win64" Produces="#AuditInCookCollection">
<Property Name="UpdateAuditCollectionsArgs" Value="" />
<Copy Files="Manifest_UFSFiles_Win64.txt" From="$(NetworkOutputDirectory)/Windows/Staged" To="$(RootDir)/Engine/Programs/AutomationTool/Saved"/>
<Command Name="Lyra_UpdateAuditCollections" Arguments="$(UpdateAuditCollectionsArgs)"/>
<Tag Files="$(RootDir)/$(ProjectPath)/Content/Collections/Audit_InCook.collection" With="#AuditInCookCollection"/>
</Node>
<Label Category="Clients" Name="UpdateAuditCollections" Requires="$(ProjectName) UpdateAuditCollections"/>
</Agent>
<!-- Append Update Audit Collections to the list of things to do -->
<Property Name="BuildAndTestExtendedRequirements" Value="$(BuildAndTestExtendedRequirements);$(ProjectName) UpdateAuditCollections"/>
</Do>
<!-- =============================================================================== -->
<!-- DEPLOY TO EPIC GAME STORE -->
<!-- =============================================================================== -->
<Option Name="EpicGameStore_BuildPackageTool_Credentials_Path" DefaultValue="" Description="Epic Games Store's Build Package File Credentials File Path"/>
<Do If="'$(UploadArtifactId)' != '' And '$(EpicGameStore_BuildPackageTool_Credentials_Path)' != ''">
<Warning If="!Exists('$(EpicGameStore_BuildPackageTool_Credentials_Path)')" Message="EpicGameStore BuildPackageTool Credentials File Not Found!" />
<Warning If="UploadTargetPlatform == ''" Message="You did not specify the 'UploadTargetPlatform' for the deploying to the Epic Game Store." />
<!-- Declare the property, for some reason I have to do it outside the agent? -->
<Property Name="UploadNodeName" Value="" />
<Agent Name="Upload $(TargetName)" Type="Win64">
<Property Name="PublishNodeName" Value="$(PreNodeName)Publish Staged $(UploadTargetPlatform)" />
<!-- Set UploadPlatform since it isn't always the same as the target -->
<Property Name="UploadPlatform" Value="$(UploadTargetPlatform)" />
<Property Name="UploadPlatform" Value="Windows" If="'$(UploadTargetPlatform)' == 'Win64'"/>
<Property Name="UploadNodeName" Value="$(ProjectName) Upload $(TargetName) $(UploadTargetPlatform)" />
<Node Name="$(UploadNodeName)" Requires="$(PublishNodeName)">
<Property Name="ConfigurationSuffix" Value="" />
<Property Name="ConfigurationSuffix" Value="-$(UploadTargetPlatform)-$(UploadConfiguration)" If="'$(UploadConfiguration)' != 'Development' and '$(UploadConfiguration)' != ''" />
<Property Name="Launch" Value="$(ProjectName)/Binaries/$(UploadTargetPlatform)/$(TargetName)$(ConfigurationSuffix).exe"/>
<!-- Copy published files to local agent and tag them for upload -->
<Copy From="$(NetworkOutputDirectory)/$(UploadPlatform)/Staged/..." To="$(ProjectOutputDirectory)/$(UploadPlatform)/..." />
<Tag Files="$(ProjectOutputDirectory)/$(UploadPlatform)/..." Except="*.pdb" With="#MainGameFiles"/>
<Tag Files="$(ProjectOutputDirectory)/$(UploadPlatform)/..." Filter="*.pdb" With="#MainGameSymbols"/>
<Delete Files="#MainGameSymbols"/>
<Property Name="BuildRoot" Value="$(ProjectOutputDirectory)/$(UploadPlatform)"/>
<Property Name="CloudDir" Value="$(ProjectOutputDirectory)/CloudDir/$(UploadPlatform)"/>
<Property Name="AppLaunch" Value="$(Launch)"/>
<Property Name="AppArgs" Value="-installed -GpuPreference=0"/>
<Property Name="FileAttributeList" Value=""/>
<Property Name="FileIgnoreList" Value=""/>
<Property Name="Label" Value="Live"/>
<Property Name="Platform" Value="Windows"/>
<Property Name="CommandLineFile" Value="$(EpicGameStore_BuildPackageTool_Credentials_Path)"/>
<Command Name="DeployToEpicGameStore" Arguments="-ArtifactId=&quot;$(UploadArtifactId)&quot; -BuildRoot=&quot;$(BuildRoot)&quot; -CloudDir=&quot;$(CloudDir)&quot; -BuildVersion=&quot;$(BuildVersion)&quot; -AppLaunch=&quot;$(AppLaunch)&quot; -AppArgs=&quot;$(AppArgs)&quot; -FileAttributeList=&quot;$(FileAttributeList)&quot; -FileIgnoreList=&quot;$(FileIgnoreList)&quot; -Label=&quot;$(Label)&quot; -Platform=&quot;$(Platform)&quot; -CommandLineFile=&quot;$(CommandLineFile)&quot;" />
</Node>
<Label Category="Clients" Name="Publish To Store" Requires="$(UploadNodeName)" />
</Agent>
<!-- Just upload? -->
<!-- TODO, should we just move these inside the agent? -->
<Aggregate Name="BuildAndTestWithUpload $(ProjectName)" Requires="BuildAndTest $(ProjectName);$(UploadNodeName)" />
<Label Category="Upload" Name="Upload $(UploadTargetPlatform)" Requires="$(UploadNodeName)" />
<Property Name="BuildAndTestExtendedRequirements" Value="$(BuildAndTestExtendedRequirements);$(UploadNodeName)" If="'$(UploadNodeName)' != ''"/>
</Do>
<!-- =============================================================================== -->
<!-- =============================================================================== -->
<!-- Finally this defines the actual aggregated build command that will run all the requirements. -->
<Aggregate Name="BuildAndTestExtended $(ProjectName)" Requires="$(BuildAndTestExtendedRequirements)" />
<!-- =============================================================================== -->
<!-- PGO BUILDS -->
<!-- =============================================================================== -->
<Include Script="$(RootDir)/Engine/Build/Graph/Tasks/PGOProfileProject.xml" />
<!-- Create simple PGO nodes for all supported platforms -->
<!-- -->
<!-- Example: generate PGO training data for Win64 & check it in to Perforce -->
<!-- RunUAT BuildGraph -script="Samples\Games\Lyra\Build\LyraTests.xml" -target="Lyra PGO Profile Replay Win64" -set:TargetConfigurations=Shipping -set:WithWin64=true -set:PGOAutoSubmitResults=true -->
<!-- -->
<!-- Example: generate PGO optimization data, then build a PGO optimized Win64 build -->
<!-- RunUAT BuildGraph -script="Samples\Games\Lyra\Build\LyraTests.xml" -target="Lyra PGO Optimize Win64" -set:TargetConfigurations=Shipping -set:WithWin64=true -->
<!-- -->
<!-- Note: PGO is only supported on Test and Shipping configurations -->
<ForEach Name="Platform" Values="$(AllPGOPlatforms)" If="ContainsItem('$(TargetConfigurations)','Test','+') or ContainsItem('$(TargetConfigurations)','Shipping','+')">
<!-- Set the folder for the local build. Based on StagedPlatformFolder from BuildAndTestProject.xml -->
<Property Name="StagedPlatformFolder" Value="$(Platform)"/>
<Property Name="StagedPlatformFolder" Value="Windows" If="'$(Platform)'=='Win64'"/>
<Property Name="StagedPlatformFolder" Value="$(StagedPlatformFolder)_ETC2" If="'$(Platform)' == 'Android'"/>
<Property Name="StagedPlatformFolder" Value="$(StagedPlatformFolder)Client" If="'$(TargetType)' == 'Client'" />
<!-- Declare a PGO Profiling node that is dependent on a staged build (as defined in BuildAndTestProject.xml). This will also check in updated PGO training data if $(PGOAutoSubmitResults) is true. -->
<!-- e.g. "Lyra PGO Profile Replay Win64" -->
<!-- Note that depending on your project and build farm needs this may not be the most efficient approach. Instead of depending on a staged build (which causes it to be recooked if necessary), you may wish to point to a previously-archived build from the same CL -->
<Expand Name="BasicReplayPGOProfile"
Platform="$(Platform)"
Configuration="$(TargetConfigurations)"
LocalReplay="$(ProjectPath)/Build/Replays/PGO.replay"
LocalStagingDir="$(ProjectPath)/LocalBuilds/PGO/$(StagedPlatformFolder)"
Build="$(ProjectPath)/Saved/StagedBuilds/$(StagedPlatformFolder)"
BuildRequires="$(PreNodeName)Stage $(Platform)"
CompileArgs="$(GenericCompileArguments) $(ExtraTargetCompileArguments)"
/>
<!-- Declare a PGO Optimization node which regenerates the PGO training data first. -->
<!-- e.g. "Lyra PGO Optimize Win64" -->
<!-- Note that depending on your project and build farm needs this may not be the most efficient approach. PGO Profiling does not have to occur as frequently as PGO Optimization -->
<Property Name="HostAgentType" Value="Win64" />
<Property Name="HostAgentType" Value="Mac" If="'$(Platform)' == 'Mac' or '$(Platform)' == 'IOS' or '$(Platform)' == 'tvOS'"/>
<Property Name="HostAgentType" Value="Linux" If="'$(Platform)' == 'Linux'"/>
<Agent Name="PGO Optimize Agent $(Platform)" Type="$(HostAgentType)">
<Node Name="$(ProjectName) PGO Optimize $(Platform)" Requires="$(PreNodeName)PGO Profile Replay $(Platform)">
<ForEach Name="Configuration" Values="$(TargetConfigurations)" Separator="+">
<Compile Target="$(TargetName)" Platform="$(Platform)" Configuration="$(Configuration)" Arguments="$(PGOOptimizeCompileArgs$(Platform)) -BuildVersion=&quot;$(BuildVersion)&quot; $(GenericCompileArguments) $(ExtraTargetCompileArguments)" Tag="#PGO Optimized Binaries $(Platform)"/>
</ForEach>
</Node>
</Agent>
</ForEach>
</BuildGraph>

BIN
Build/Replays/PGO.replay Normal file

Binary file not shown.

View File

@ -0,0 +1,27 @@
// Copyright Epic Games, Inc. All Rights Reserved.
using System;
using System.Collections.Generic;
using AutomationTool;
using UnrealBuildTool;
using EpicGames.CrowdinLocalization;
public class CrowdinLocalizationProvider_Sample : CrowdinLocalizationProvider
{
public CrowdinLocalizationProvider_Sample(LocalizationProviderArgs InArgs)
: base(InArgs)
{
Config.ProjectId = Command.ParseParamValue("ProjectId");
Config.AccessToken = Command.ParseParamValue("AccessToken");
}
public static string StaticGetLocalizationProviderId()
{
return "Crowdin_Sample";
}
public override string GetLocalizationProviderId()
{
return StaticGetLocalizationProviderId();
}
}

View File

@ -0,0 +1 @@
Pick one localization provider that suits you best and finish putting in the information it needs to function.

View File

@ -0,0 +1,29 @@
// Copyright Epic Games, Inc. All Rights Reserved.
using System;
using System.Collections.Generic;
using AutomationTool;
using UnrealBuildTool;
using EpicGames.XLocLocalization;
public class XLocLocalizationProvider_Sample : XLocLocalizationProvider
{
public XLocLocalizationProvider_Sample(LocalizationProviderArgs InArgs)
: base(InArgs)
{
Config.Server = Command.ParseParamValue("Server");
Config.APIKey = Command.ParseParamValue("APIKey");
Config.APISecret = Command.ParseParamValue("APISecret");
Config.LocalizationId = Command.ParseParamValue("LocalizationId");
}
public static string StaticGetLocalizationProviderId()
{
return "XLoc_Sample";
}
public override string GetLocalizationProviderId()
{
return StaticGetLocalizationProviderId();
}
}

View File

@ -0,0 +1,33 @@
// Copyright Epic Games, Inc.All Rights Reserved.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using EpicGame;
using Gauntlet;
namespace LyraTest
{
/// <summary>
/// Basic Boot Test
/// </summary>
public class BootTest : EpicGameTestNode<LyraTestConfig>
{
public BootTest(UnrealTestContext InContext) : base (InContext)
{
}
public override LyraTestConfig GetConfiguration()
{
LyraTestConfig Config = base.GetConfiguration();
Config.NoMCP = true;
UnrealTestRole Client = Config.RequireRole(UnrealTargetRole.Client);
Client.Controllers.Add("BootTest");
return Config;
}
}
}

View File

@ -0,0 +1,351 @@
// Copyright Epic Games, Inc.All Rights Reserved.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using AutomationTool;
using EpicGame;
using EpicGames.Core;
using Microsoft.Extensions.Logging;
using static AutomationTool.CommandUtils;
namespace LyraTest
{
[Help("Commandlet for checking content to know if passes all the existing UEditorValidators.")]
[Help("Branch=<Name>", "Branch to use")]
[Help("CL=<value>", "Check file changes in the range LastCL,CL")]
[Help("p4shelved", "If specified, treat CL as a shelved file to check the contents")]
[Help("p4opened", "Check currently opened files instead of using CL ranged")]
[Help("MaxPackagesToLoad=<value>", "Maximum number of recent changes to check")]
[Help("LastGoodContentCLPath=<value>", "A directory location to store the 'last good' CL so we can determine CLs between runs.")]
[Help("SkipPrevCLFileExport", "Skip exporting the 'last good' CL.")]
public class LyraContentValidation : BuildCommand
{
public override void ExecuteBuild()
{
int ThisCLInt = 0;
int PrevCL = 0;
bool CheckOpenedFiles = ParseParam("opened");
bool CheckShelvedFiles = ParseParam("shelved");
string CommandletArgs = "";
bool RunCommandlet = false;
string PrevCLFilePath = "";
bool SkipPrevCLFileExport = ParseParam("SkipPrevCLFileExport");
//@TODO: Should derive these, otherwise it will break as soon as someone clones the projects
string GameProjectDirectory = "Samples/Games/Lyra";
string GameProject = "Lyra.uproject";
string ExtensionTypeListParam = ParseParamValue("ExtTypeList", ".uasset,.umap,.cpp,.c,.h,.inl,.ini,.uproject,.uplugin,.json");
List<string> ExtensionTypeList = new List<string>();
if (string.IsNullOrEmpty(ExtensionTypeListParam))
{
Logger.LogInformation("No extensions were passed in, defaulting to always run. Set -ExtTypeList to the extension typelist for triggering the commandlet");
RunCommandlet = true;
}
else
{
ExtensionTypeList = ExtensionTypeListParam.Split(',').ToList();
}
// if not checking open files, use CL ranges
if (CheckOpenedFiles)
{
// Quickly check if the CL has any files we're interested in. This is significantly faster than firing up the editor to do
// nothing
RunCommandlet = AreFileTypesModifiedInOpenChangelists(ExtensionTypeList);
// save anyone who forgot to run this without -p4
if (!P4Enabled)
{
throw new AutomationException("This script must be executed with -p4");
}
CommandletArgs = "-P4Opened -P4Client=" + P4Env.Client;
}
else
{
string ThisCL = ParseParamValue("CL");
if (string.IsNullOrEmpty(ThisCL))
{
throw new AutomationException("-CL=<num> or -opened must be specified.");
}
if (!int.TryParse(ThisCL, out ThisCLInt))
{
throw new AutomationException("-CL must be a number.");
}
if (CheckShelvedFiles)
{
// Quickly check if the CL has any files we're interested in. This is significantly faster than firing up the editor to do
// nothing
RunCommandlet = AreFileTypesModifiedInShelvedChangelist(ThisCL, ExtensionTypeList);
// filter is what's passed to p4 files. If shelved we'll use the syntax that pulls the shelved file list
CommandletArgs = String.Format("-P4Filter=@={0}", ThisCL);
}
else
{
string Branch = ParseParamValue("Branch");
if (string.IsNullOrEmpty(Branch))
{
throw new AutomationException("-Branch must be specified to check a CL range when -opened or -shelved are not present");
}
string LastGoodContentCLPath = ParseParamValue("LastGoodContentCLPath");
if (string.IsNullOrEmpty(LastGoodContentCLPath))
{
// Default to local storage for this file (Legacy behavior)
LastGoodContentCLPath = CombinePaths(CmdEnv.LocalRoot, "Engine", "Saved");
}
string PrevCLFileName = "PrevCL_" + Branch.Replace("/", "+") + ".txt";
PrevCLFilePath = CombinePaths(LastGoodContentCLPath, PrevCLFileName);
PrevCL = ReadPrevCLFile(PrevCLFilePath);
if (PrevCL <= 0)
{
Logger.LogInformation("Previous CL file didn't exist. Defaulting to none!");
RunCommandlet = true;
}
else if (PrevCL >= ThisCLInt)
{
Logger.LogInformation("Previous CL file shows a CL equal or newer than the current CL. This content was already checked. Skipping.");
RunCommandlet = false;
}
else
{
// +1 to the previous cl so it won't use content from the previous change
PrevCL++;
CommandletArgs = String.Format("-P4Filter={0}/{1}/...@{2},{3}", Branch, GameProjectDirectory, PrevCL, ThisCL);
Logger.LogInformation("Generated Filter: {CommandletArgs}", CommandletArgs);
RunCommandlet = WereFileTypesModifiedInChangelistRange(Branch, PrevCL, ThisCL, ExtensionTypeList);
}
if (!RunCommandlet)
{
Logger.LogInformation("No files in CL Range {PrevCL} -> {ThisCL} contained any files ending with extensions {ExtensionTypeListParam}, or they were already checked in a previous job, skipping commandlet run", PrevCL, ThisCL, ExtensionTypeListParam);
}
}
}
if (RunCommandlet)
{
string EditorExe = "UnrealEditor.exe";
EditorExe = AutomationTool.HostPlatform.Current.GetUnrealExePath(EditorExe);
string PerforceToken = P4.GetAuthenticationToken();
CommandletArgs += " -ini:Engine:[Core.System]:AssetLogShowsDiskPath=True -LogCmds=\"LogHttp Error\" ";
// Do we have a valid perforce token?
//if (!string.IsNullOrEmpty(PerforceToken))
{
CommandletArgs += String.Format(" -SCCProvider={0} -P4Port={1} -P4User={2} -P4Client={3} -P4Passwd={4}", "Perforce", P4Env.ServerAndPort, P4Env.User, P4Env.Client, PerforceToken);
// If skip export was specified (e.g. a preflight) don't export anything
}
string MaxPackagesToLoad = ParseParamValue("MaxPackagesToLoad", "2000");
CommandletArgs += String.Format(" -MaxPackagesToLoad={0}", MaxPackagesToLoad);
CommandUtils.RunCommandlet(new FileReference(CombinePaths(CmdEnv.LocalRoot, GameProjectDirectory, GameProject)), EditorExe, "ContentValidationCommandlet", CommandletArgs);
}
// Read the previous CL file one more time before writing to it, in case it changed while we were running
if (SkipPrevCLFileExport)
{
Logger.LogInformation("Not writing PrevCLFile as -SkipPrevCLFileExport was specified");
}
else
{
ExportPrevCL(PrevCL, ThisCLInt, PrevCLFilePath);
}
}
/// <summary>
/// Exports 'last good' CL information by reading the previous CL file before writing the current CL to it, in case it changed while we were running
/// </summary>
/// <param name="PrevCL"></param>
/// <param name="ThisCL"></param>
/// <param name="PrevCLFilePath"></param>
private void ExportPrevCL(int PrevCL, int ThisCL, string PrevCLFilePath)
{
if (ThisCL > 0)
{
if (PrevCL < ThisCL)
{
PrevCL = ReadPrevCLFile(PrevCLFilePath);
}
if (PrevCL < ThisCL)
{
Logger.LogInformation("Writing PrevCLFile {PrevCLFilePath}...", PrevCLFilePath);
WritePrevCLFile(PrevCLFilePath, ThisCL.ToString());
}
else
{
Logger.LogInformation("Not writing PrevCLFile {PrevCLFilePath}. The current CL was not newer", PrevCLFilePath);
}
}
else
{
Logger.LogInformation("Not writing PrevCLFile {PrevCLFilePath} as the current CL {ThisCL} was invalid", PrevCLFilePath, ThisCL);
}
}
private int ReadPrevCLFile(string PrevCLFilePath)
{
int RetVal = 0;
if (File.Exists(PrevCLFilePath))
{
string PrevCLString = "";
int RetryCount = 10;
bool bProceed = false;
do
{
try
{
PrevCLString = File.ReadAllText(PrevCLFilePath);
bProceed = true;
}
catch (Exception Ex)
{
if (RetryCount > 0)
{
Logger.LogInformation("Failed to read PrevCLFilePath {PrevCLFilePath}. Retrying in a few seconds. Ex:{Arg1}", PrevCLFilePath, Ex.Message);
RetryCount--;
Thread.Sleep(TimeSpan.FromSeconds(5));
}
else
{
Logger.LogError("Failed to read PrevCLFilePath {PrevCLFilePath}. All Retries exhausted, skipping. Ex:{Arg1}", PrevCLFilePath, Ex.Message);
bProceed = true;
}
}
} while (!bProceed);
if (int.TryParse(PrevCLString, out RetVal))
{
// Read the file successfully, and it was a number
}
else
{
Logger.LogWarning("{Text}", "Couldn't parse out the changelist number from the saved PrevCLFilePath file. " + PrevCLFilePath);
}
}
return RetVal;
}
private void WritePrevCLFile(string PrevCLFilePath, string ThisCL)
{
int RetryCount = 10;
bool bProceed = false;
do
{
try
{
Directory.CreateDirectory(Path.GetDirectoryName(PrevCLFilePath));
File.WriteAllText(PrevCLFilePath, ThisCL);
bProceed = true;
}
catch (Exception Ex)
{
if (RetryCount > 0)
{
Logger.LogInformation("Failed to write PrevCLFilePath {PrevCLFilePath}. Retrying in a few seconds. Ex:{Arg1}", PrevCLFilePath, Ex.Message);
RetryCount--;
Thread.Sleep(TimeSpan.FromSeconds(5));
}
else
{
Logger.LogError("Failed to write PrevCLFilePath {PrevCLFilePath}. All Retries exhausted, skipping. Ex:{Arg1}", PrevCLFilePath, Ex.Message);
bProceed = true;
}
}
} while (!bProceed);
}
/// <summary>
/// Returns true if files with extensions in the provided list were modified in the specified changelist range
/// </summary>
/// <param name="Branch"></param>
/// <param name="PrevCL"></param>
/// <param name="ThisCL"></param>
/// <param name="ExtensionTypeList"></param>
/// <returns></returns>
private bool WereFileTypesModifiedInChangelistRange(string Branch, int PrevCL, string ThisCL, List<string> ExtensionTypeList)
{
// we don't need to do any of this if there was no extensions typelist passed in
if (ExtensionTypeList.Count != 0)
{
// check all the changes in FN from PrevCL to now
List<P4Connection.ChangeRecord> ChangeRecords;
CommandUtils.P4.Changes(out ChangeRecords, string.Format("{0}/...@{1},{2}", Branch, PrevCL, ThisCL), false);
foreach (P4Connection.ChangeRecord Record in ChangeRecords)
{
P4Connection.DescribeRecord DescribeRecord;
CommandUtils.P4.DescribeChangelist(Record.CL, out DescribeRecord, false);
// check all the files in each cl record
foreach (P4Connection.DescribeRecord.DescribeFile File in DescribeRecord.Files)
{
// if any of them end in extensions in our typelist, we need to build
foreach (string Extension in ExtensionTypeList)
{
if (File.File.EndsWith(Extension))
{
return true;
}
}
}
}
}
return false;
}
/// <summary>
/// Returns true if files with extensions in the provided list are in the specified shelved changelist
/// </summary>
/// <param name="ShelvedChangelist"></param>
/// <param name="ExtensionTypeList"></param>
/// <returns></returns>
private bool AreFileTypesModifiedInShelvedChangelist(string ShelvedChangelist, List<string> ExtensionTypeList)
{
// we don't need to do any of this if there was no extensions typelist passed in
if (ExtensionTypeList.Count != 0)
{
// Get all files in this changelist
IEnumerable<string> FileList = CommandUtils.P4.Files("@=" + ShelvedChangelist);
return FileList.Any(F => ExtensionTypeList.Contains(Path.GetExtension(F), StringComparer.OrdinalIgnoreCase));
}
return false;
}
/// <summary>
/// Returns true if files with extensions in the provided list are open locally
/// </summary>
/// <param name="ExtensionTypeList"></param>
/// <returns></returns>
private bool AreFileTypesModifiedInOpenChangelists(List<string> ExtensionTypeList)
{
// we don't need to do any of this if there was no extensions typelist passed in
if (ExtensionTypeList.Count != 0)
{
// Get all files in this changelist
IEnumerable<string> FileList = CommandUtils.P4.Opened("");
return FileList.Any(F => ExtensionTypeList.Contains(Path.GetExtension(F), StringComparer.OrdinalIgnoreCase));
}
return false;
}
}
}

View File

@ -0,0 +1,40 @@
// Copyright Epic Games, Inc.All Rights Reserved.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using EpicGame;
using Gauntlet;
namespace LyraTest
{
public class LyraTestConfig : EpicGameTestConfig
{
[AutoParam]
public int TargetNumOfCycledMatches = 2;
[AutoParam]
public bool WithPacketHandlerEncryption = false;
public override void ApplyToConfig(UnrealAppConfig AppConfig, UnrealSessionRole ConfigRole, IEnumerable<UnrealSessionRole> OtherRoles)
{
base.ApplyToConfig(AppConfig, ConfigRole, OtherRoles);
if (AppConfig.ProcessType.IsClient())
{
AppConfig.CommandLine += string.Format(" -TargetNumOfCycledMatches={0}", TargetNumOfCycledMatches);
}
if (WithPacketHandlerEncryption)
{
AppConfig.CommandLine += " -ini:Engine:[PacketHandlerComponents]:EncryptionComponent=AESGCMHandlerComponent -execcmds=\"Lyra.TestEncryption true\"";
}
const float InitTime = 120.0f;
const float MatchTime = 300.0f;
MaxDuration = InitTime + (MatchTime * TargetNumOfCycledMatches);
}
}
}

Some files were not shown because too many files have changed in this diff Show More