Files
UnrealEngineUWP/Engine/Source/Programs/UnrealBuildTool/Configuration/UEBuildDeployTarget.cs
Marc Audy 608734e30d Merging //UE4/Dev-Main to Dev-Framework (//UE4/Dev-Framework) @ 4664414
#rb
#rnx

[CL 4666113 by Marc Audy in Dev-Framework branch]
2018-12-17 12:24:20 -05:00

193 lines
6.3 KiB
C#

// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tools.DotNETCommon;
namespace UnrealBuildTool
{
/// <summary>
/// Contains information about a target required to deploy it. Written at build time, and read back in when UBT needs to run the deploy step.
/// </summary>
class UEBuildDeployTarget
{
/// <summary>
/// Path to the project file
/// </summary>
public readonly FileReference ProjectFile;
/// <summary>
/// Path to the .target.cs
/// </summary>
public readonly FileReference TargetFile;
/// <summary>
/// The shared app name for this target (eg. UE4Editor)
/// </summary>
public readonly string AppName;
/// <summary>
/// The name of this target
/// </summary>
public readonly string TargetName;
/// <summary>
/// Type of the target to build
/// </summary>
public readonly TargetType TargetType;
/// <summary>
/// The platform being built
/// </summary>
public readonly UnrealTargetPlatform Platform;
/// <summary>
/// The configuration being built
/// </summary>
public readonly UnrealTargetConfiguration Configuration;
/// <summary>
/// The output path
/// </summary>
public FileReference OutputPath
{
get
{
if (OutputPaths.Count != 1)
{
throw new BuildException("Attempted to use UEBuildDeployTarget.OutputPath property, but there are multiple (or no) OutputPaths. You need to handle multiple in the code that called this (size = {0})", OutputPaths.Count);
}
return OutputPaths[0];
}
}
/// <summary>
/// The full list of output paths, for platforms that support building multiple binaries simultaneously
/// </summary>
public readonly List<FileReference> OutputPaths;
/// <summary>
/// Path to the directory for engine intermediates. May be under the project directory if not being built for the shared build environment.
/// </summary>
public readonly DirectoryReference EngineIntermediateDirectory;
/// <summary>
/// The project directory, or engine directory for targets without a project file.
/// </summary>
public readonly DirectoryReference ProjectDirectory;
/// <summary>
/// Path to the generated build receipt.
/// </summary>
public readonly FileReference BuildReceiptFileName;
/// <summary>
/// Whether incremental linking is enabled (disables icon update on Windows)
/// </summary>
public readonly bool bUseIncrementalLinking;
/// <summary>
/// If true, then a stub IPA will be generated when compiling is done (minimal files needed for a valid IPA)
/// </summary>
public readonly bool bCreateStubIPA;
/// <summary>
/// Which architectures to deploy for on Android
/// </summary>
public readonly string[] AndroidArchitectures;
/// <summary>
/// Which GPU architectures to deploy for on Android
/// </summary>
public readonly string[] AndroidGPUArchitectures;
/// <summary>
/// Which GPU architectures to deploy for on Lumin
/// </summary>
public readonly string[] LuminGPUArchitectures;
/// <summary>
/// Construct the deployment info from a target
/// </summary>
/// <param name="Target">The target being built</param>
public UEBuildDeployTarget(UEBuildTarget Target)
{
this.ProjectFile = Target.ProjectFile;
this.TargetFile = Target.TargetRulesFile;
this.AppName = Target.AppName;
this.TargetName = Target.TargetName;
this.TargetType = Target.TargetType;
this.Platform = Target.Platform;
this.Configuration = Target.Configuration;
this.OutputPaths = new List<FileReference>(Target.OutputPaths);
this.EngineIntermediateDirectory = Target.EngineIntermediateDirectory;
this.ProjectDirectory = Target.ProjectDirectory;
this.BuildReceiptFileName = Target.ReceiptFileName;
this.bUseIncrementalLinking = Target.Rules.bUseIncrementalLinking;
this.bCreateStubIPA = Target.Rules.bCreateStubIPA;
this.AndroidArchitectures = Target.Rules.AndroidPlatform.Architectures.ToArray();
this.AndroidGPUArchitectures = Target.Rules.AndroidPlatform.GPUArchitectures.ToArray();
this.LuminGPUArchitectures = Target.Rules.LuminPlatform.GPUArchitectures.ToArray();
}
/// <summary>
/// Read the deployment info from a file on disk
/// </summary>
/// <param name="Location">Path to the file to read</param>
public UEBuildDeployTarget(FileReference Location)
{
using (BinaryReader Reader = new BinaryReader(File.Open(Location.FullName, FileMode.Open, FileAccess.Read, FileShare.Read)))
{
ProjectFile = Reader.ReadFileReference();
TargetFile = Reader.ReadFileReference();
AppName = Reader.ReadString();
TargetName = Reader.ReadString();
TargetType = (TargetType)Reader.ReadInt32();
Platform = (UnrealTargetPlatform)Reader.ReadInt32();
Configuration = (UnrealTargetConfiguration)Reader.ReadInt32();
OutputPaths = Reader.ReadList(() => Reader.ReadFileReference());
EngineIntermediateDirectory = Reader.ReadDirectoryReference();
ProjectDirectory = Reader.ReadDirectoryReference();
BuildReceiptFileName = Reader.ReadFileReference();
bUseIncrementalLinking = Reader.ReadBoolean();
bCreateStubIPA = Reader.ReadBoolean();
AndroidArchitectures = Reader.ReadStringArray();
AndroidGPUArchitectures = Reader.ReadStringArray();
LuminGPUArchitectures = Reader.ReadStringArray();
}
}
/// <summary>
/// Write the deployment info to a file on disk
/// </summary>
/// <param name="Location">File to write to</param>
public void Write(FileReference Location)
{
DirectoryReference.CreateDirectory(Location.Directory);
using (BinaryWriter Writer = new BinaryWriter(File.Open(Location.FullName, FileMode.Create, FileAccess.Write, FileShare.Read)))
{
Writer.Write(ProjectFile);
Writer.Write(TargetFile);
Writer.Write(AppName);
Writer.Write(TargetName);
Writer.Write((Int32)TargetType);
Writer.Write((Int32)Platform);
Writer.Write((Int32)Configuration);
Writer.Write(OutputPaths, Item => Writer.Write(Item));
Writer.Write(EngineIntermediateDirectory);
Writer.Write(ProjectDirectory);
Writer.Write(BuildReceiptFileName);
Writer.Write(bUseIncrementalLinking);
Writer.Write(bCreateStubIPA);
Writer.Write(AndroidArchitectures);
Writer.Write(AndroidGPUArchitectures);
Writer.Write(LuminGPUArchitectures);
}
}
}
}