You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
========================== MAJOR FEATURES + CHANGES ========================== Change 2719147 on 2015/10/07 by Mark.Satterthwaite Allow the shader cache to perform some precompilation synchronously on load before falling back to asynchronous compilation to balance load times against total time spent precompiling. Added a stat to the group that reports how long the precompile has been running until it completes so it is easier to track. Change 2719182 on 2015/10/07 by Mark.Satterthwaite Refactor the ShaderCache's internal data structures and change the way we handle recording whether a particular predraw state has been submitted to try and make it more efficient. Change 2719185 on 2015/10/07 by Mark.Satterthwaite Merging CL #2717701: Try and fix random crashes on Mac when manipulating bound-shader-states caused by ShaderCache potentially providing a bogus shader state pointer on exit from predraw. Change 2719434 on 2015/10/07 by Mark.Satterthwaite Make sure that Mac ensures reports have a source context and a sane callstack when sent to the crash-reports server. Change 2724764 on 2015/10/12 by Josh.Adams [Initial AppleTV support] Merging //depot/YakBranch/... to //UE4/Dev-Platform/... Change 2726266 on 2015/10/13 by Lee.Clark PS4 - Calc reserve size required for DMA copy when using unsafe command buffers Change 2726401 on 2015/10/13 by Mark.Satterthwaite Merging CL #2716418: Fix UE-15228 'Crash Report Client doesn't restart into project editor on Mac' by reporting the original command line supplied by LaunchMac, not the modified one that strips the project name. The CRC can then relaunch as expected. #jira UE-15228 Change 2726421 on 2015/10/13 by Lee.Clark PS4 - Don't try to clear invalid targets Change 2727040 on 2015/10/13 by Michael.Trepka Merging CL 2724777 - Fixed splash screen rendering for images with DPI different than 72 Change 2729783 on 2015/10/15 by Keith.Judge Fix huge memory leak in Test/Shipping configurations, caused because I am a numpty. Change 2729847 on 2015/10/15 by Mark.Satterthwaite Merging CL #2729846: On OS X unconstrain windows from the dimension of the parent display when in Windowed mode - it is OK for them to be larger in this case. They do need to be repositioned if on the Primary display so that they don't creep under the menu bar and become unmovable/unclosable and Fullscreen windows still need to be constrained to a single display. We can now take screenshots of windows that are larger than the display & not get grey bars beyond the cutoff. #jira UE-21992 Change 2729865 on 2015/10/15 by Keith.Judge Fast semantics - Finish up resource transitions, adding resource decompression where appropriate and using non-fast clears where we can't determine the resource transition. Change 2729897 on 2015/10/15 by Keith.Judge Fast Semantics - Make sure all GetData() calls are made safe with GPU fences. Change 2729972 on 2015/10/15 by Keith.Judge Removed the last vestiges of ID3D11DeviceContext/ID3D11DeviceContext1 from the Xbox RHI. Everything now uses ID3D11DeviceContextX directly. This should be marginally quicker as it stops a double call to ClearState(). Change 2731503 on 2015/10/16 by Keith.Judge Added _XDK_VERSION to the DDC key for textures, which should solve the issue of the tiling mode changing in August XDK (and future changes Microsoft may inflict). Change 2731596 on 2015/10/16 by Keith.Judge Fast Semantics - Add deferred resource deletion queue to make deleted resources be actually deleted a number of frames later so that the GPU is definitely finished with them. Hooked up the temporary SRVs for dynamic VBs as a first step. Change 2731928 on 2015/10/16 by Michael.Trepka PR #1659: Mac/Build.sh handles additional arguments (Contributed by judgeaxl) Change 2731934 on 2015/10/16 by Michael.Trepka PR #1618: added clang 3.7.0 -Wshift-negative-value ignore in JpegImageWrapper.cpp (Contributed by bsekura) Change 2732018 on 2015/10/16 by Mark.Satterthwaite Emit a shader code cache for each platforms requested shader formats, this is separate to the targeted formats as not all can or need to be cached. - The implementation extends the ShaderCache's hooks in FShaderResource's serialisation function to capture the required shaders. - Each target platform has its own list of cached shader formats, analogous to the list of targeted RHIs. Presently only the Mac implements this. - Code cached shaders are now compressed (for size) to reduce the overhead associated with keeping all the shader code around - this works esp. well for text-based formats like GLSL. Change 2732365 on 2015/10/16 by Josh.Adams - Packaging a TVOS .ipa now works (still haven't tried any of the Editor integration like Launch On) Change 2733170 on 2015/10/18 by Terence.Burns Fix for Android IAP query not returning entire inventory. Change 2733174 on 2015/10/18 by Terence.Burns Fix Movie player issue where wait for movie to finish isnt being respected. Seems a stray bUserCanceled event flag was causing this not to be observed. Added some verbose logging to apple movie player. Change 2733488 on 2015/10/19 by Mark.Satterthwaite Added the ability to merge the .ushadercache files used by the ShaderCache to store shader & draw state information. - Fixed a bug that would cause invalid shader membership and draw state information to be logged. - Added a separate command-line tool to merge shader cache files, currently Mac-only but in theory should work on other platforms too. Change 2735226 on 2015/10/20 by Mark.Satterthwaite Fix temporal AA rendering on GL/Mac OS X - you can't rely on EyeAdaptation values unless SM5 is available so only perform that code on SM5 & we must correctly clamp saturate(NaN) to 0 as the current hlslcc won't do that for us (& is required by the HLSL spec). The latter used to be clamped in the AA_ALPHA && AA_VELOCITY_WEIGHTING code block that was removed recently. #jira UE-21214 #jira UE-19913 Change 2736722 on 2015/10/21 by Daniel.Lamb Improved performance of cooking stats system. Change 2737172 on 2015/10/21 by Daniel.Lamb Improved cooking stats performance for ddc stats.
837 lines
30 KiB
C#
837 lines
30 KiB
C#
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
|
|
|
|
using System;
|
|
using System.IO;
|
|
using System.Collections.Generic;
|
|
using System.Xml;
|
|
using System.Reflection;
|
|
|
|
namespace UnrealBuildTool
|
|
{
|
|
public class BuildConfiguration
|
|
{
|
|
static BuildConfiguration()
|
|
{
|
|
if (!UnrealBuildTool.bIsSafeToReferenceConfigurationValues)
|
|
{
|
|
throw new BuildException("UEBuildConfiguration was referenced before the XmlConfig files could be loaded.");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Whether to unify C++ code into larger files for faster compilation.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bUseUnityBuild;
|
|
/// <summary>
|
|
/// Whether to _force_ unify C++ code into larger files for faster compilation.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bForceUnityBuild;
|
|
|
|
/// <summary>
|
|
/// An experimental new feature that, when enabled, will try to determine source files that you are actively iteratively changing,
|
|
/// and break those files out of their unity blobs so that you can compile them as individual translation units, much faster than
|
|
/// recompiling the entire unity blob each time.
|
|
/// IMPORTANT: This feature is not complete yet! Currently, it requires source files to be read-only that you aren't actively working with!
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bUseAdaptiveUnityBuild;
|
|
|
|
/// <summary>
|
|
/// The number of source files in a game module before unity build will be activated for that module. This
|
|
/// allows small game modules to have faster iterative compile times for single files, at the expense of slower full
|
|
/// rebuild times. This setting can be overridden by the bFasterWithoutUnity option in a module's Build.cs file.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static int MinGameModuleSourceFilesForUnityBuild;
|
|
|
|
/// <summary>
|
|
/// Forces shadow variable warnings to be treated as errors on platforms that support it.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bShadowVariableErrors;
|
|
|
|
/// <summary>
|
|
/// New Monolithic Graphics drivers have optional "fast calls" replacing various D3d functions
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bUseFastMonoCalls;
|
|
|
|
/// <summary>
|
|
/// New Xbox driver supports a "fast semantics" context type. This switches it on for the immediate and deferred contexts
|
|
/// EXPERIMENTAL - WILL CAUSE RENDERING ISSUES AND/OR CRASHES AT PRESENT!
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bUseFastSemanticsRenderContexts;
|
|
|
|
/// Async Compute context support. Requires Mono and Fastcalls
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bUseAsyncComputeContext;
|
|
|
|
/// <summary>
|
|
/// An approximate number of bytes of C++ code to target for inclusion in a single unified C++ file.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static int NumIncludedBytesPerUnityCPP;
|
|
|
|
/// <summary>
|
|
/// Whether to stress test the C++ unity build robustness by including all C++ files files in a project from a single unified file.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bStressTestUnity;
|
|
|
|
/// <summary>
|
|
/// Whether headers in system paths should be checked for modification when determining outdated actions.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bCheckSystemHeadersForModification;
|
|
|
|
/// <summary>
|
|
/// Whether headers in the Development\External folder should be checked for modification when determining outdated actions.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bCheckExternalHeadersForModification;
|
|
|
|
/// <summary>
|
|
/// Whether to ignore import library files that are out of date when building targets. Set this to true to improve iteration time.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bIgnoreOutdatedImportLibraries;
|
|
|
|
/// <summary>
|
|
/// Whether to globally disable debug info generation; see DebugInfoHeuristics.cs for per-config and per-platform options.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bDisableDebugInfo;
|
|
|
|
/// <summary>
|
|
/// Whether to disable debug info on PC in development builds (for faster developer iteration, as link times are extremely fast with debug info disabled.)
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bOmitPCDebugInfoInDevelopment;
|
|
|
|
/// <summary>
|
|
/// Whether PDB files should be used for Visual C++ builds.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bUsePDBFiles;
|
|
|
|
/// <summary>
|
|
/// Whether PCH files should be used.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bUsePCHFiles;
|
|
|
|
/// <summary>
|
|
/// Whether to generate command line dependencies for compile actions when requested
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bUseActionHistory;
|
|
|
|
/// <summary>
|
|
/// The minimum number of files that must use a pre-compiled header before it will be created and used.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static int MinFilesUsingPrecompiledHeader;
|
|
|
|
/// <summary>
|
|
/// When enabled, a precompiled header is always generated for game modules, even if there are only a few source files
|
|
/// in the module. This greatly improves compile times for iterative changes on a few files in the project, at the expense of slower
|
|
/// full rebuild times for small game projects. This can be overridden by setting MinFilesUsingPrecompiledHeaderOverride in
|
|
/// a module's Build.cs file
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bForcePrecompiledHeaderForGameModules;
|
|
|
|
/// <summary>
|
|
/// Whether debug info should be written to the console.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bPrintDebugInfo;
|
|
|
|
/// <summary>
|
|
/// Allows logging to a file
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static string LogFilename;
|
|
|
|
/// <summary>
|
|
/// Prints performance diagnostics about include dependencies and other bits
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bPrintPerformanceInfo;
|
|
|
|
/// <summary>
|
|
/// Whether to log detailed action stats. This forces local execution.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bLogDetailedActionStats;
|
|
|
|
/// <summary>
|
|
/// Whether to deploy the executable after compilation on platforms that require deployment.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bDeployAfterCompile;
|
|
|
|
/// <summary>
|
|
/// Whether to clean Builds directory on a remote Mac before building
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bFlushBuildDirOnRemoteMac;
|
|
|
|
/// <summary>
|
|
/// Whether XGE may be used.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bAllowXGE;
|
|
|
|
/// <summary>
|
|
/// Whether we should just export the XGE XML and pretend it succeeded
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bXGEExport;
|
|
|
|
/// <summary>
|
|
/// Whether to display the XGE build monitor.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bShowXGEMonitor;
|
|
|
|
/// <summary>
|
|
/// When enabled, XGE will stop compiling targets after a compile error occurs. Recommended, as it saves computing resources for others.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bStopXGECompilationAfterErrors;
|
|
|
|
/// <summary>
|
|
/// When enabled, allows XGE to compile pre-compiled header files on remote machines. Otherwise, PCHs are always generated locally.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bAllowRemotelyCompiledPCHs;
|
|
|
|
/// <summary>
|
|
/// Whether SN-DBS may be used.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bAllowSNDBS;
|
|
|
|
/// <summary>
|
|
/// Whether or not to delete outdated produced items.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bShouldDeleteAllOutdatedProducedItems;
|
|
|
|
/// <summary>
|
|
/// Whether to use incremental linking or not.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bUseIncrementalLinking;
|
|
|
|
/// <summary>
|
|
/// Whether to allow the use of LTCG (link time code generation)
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bAllowLTCG;
|
|
|
|
/// <summary>
|
|
/// Whether to support edit and continue. Only works on Microsoft compilers in 32-bit compiles.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bSupportEditAndContinue;
|
|
|
|
/// <summary>
|
|
/// Whether to omit frame pointers or not. Disabling is useful for e.g. memory profiling on the PC
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bOmitFramePointers;
|
|
|
|
/// <summary>
|
|
/// What level of logging we wish to show
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static string LogLevel;
|
|
|
|
/// <summary>
|
|
/// Processor count multiplier for local execution. Can be below 1 to reserve CPU for other tasks.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static double ProcessorCountMultiplier;
|
|
|
|
/// <summary>
|
|
/// Maximum processor count for local execution.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static int MaxProcessorCount;
|
|
|
|
/// <summary>
|
|
/// The intermediate folder - i.e. Intermediate/Build.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static string BaseIntermediateFolder;
|
|
|
|
/// <summary>
|
|
/// Relative root engine path.
|
|
/// </summary>
|
|
private static string _RelativeEnginePath = "../../Engine/";
|
|
public static string RelativeEnginePath
|
|
{
|
|
get
|
|
{
|
|
return _RelativeEnginePath;
|
|
}
|
|
set
|
|
{
|
|
_RelativeEnginePath = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// The path to the intermediate folder, relative to Engine/Source.
|
|
/// </summary>
|
|
public static string BaseIntermediatePath
|
|
{
|
|
get
|
|
{
|
|
return RelativeEnginePath + BaseIntermediateFolder;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// The intermediate folder - i.e. Intermediate/Build/Platform[-Architecture] for the current platform
|
|
/// </summary>
|
|
private static string _PlatformIntermediateFolder = null;
|
|
public static string PlatformIntermediateFolder
|
|
{
|
|
get
|
|
{
|
|
if (_PlatformIntermediateFolder == null)
|
|
{
|
|
throw new BuildException("Attempted to use PlatformIntermediateFolder before it was initialized");
|
|
}
|
|
return _PlatformIntermediateFolder;
|
|
}
|
|
set { _PlatformIntermediateFolder = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// The path to the platform intermediate folder, relative to Engine/Source.
|
|
/// </summary>
|
|
public static string PlatformIntermediatePath
|
|
{
|
|
get
|
|
{
|
|
return RelativeEnginePath + PlatformIntermediateFolder;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Whether to generate a dSYM file or not.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bGeneratedSYMFile;
|
|
|
|
/// <summary>
|
|
/// Whether to strip iOS symbols or not (implied by bGeneratedSYMFile).
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bStripSymbolsOnIOS;
|
|
|
|
/// <summary>
|
|
/// If true, then a stub IPA will be generated when compiling is done (minimal files needed for a valid IPA)
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bCreateStubIPA;
|
|
|
|
/// <summary>
|
|
/// If true, then a stub IPA will be generated when compiling is done (minimal files needed for a valid IPA)
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bCopyAppBundleBackToDevice;
|
|
|
|
/// <summary>
|
|
/// If true, then enable memory profiling in the build (defines USE_MALLOC_PROFILER=1 and forces bOmitFramePointers=false)
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bUseMallocProfiler;
|
|
|
|
/// <summary>
|
|
/// Enables code analysis mode. Currently, this has specific requirements. It only works on Windows
|
|
/// platform with the MSVC compiler. Also, it requires a version of the compiler that supports the
|
|
/// /analyze option, such as Visual Studio 2013
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bEnableCodeAnalysis;
|
|
|
|
/// <summary>
|
|
/// Enables "Shared PCHs", a feature which significantly speeds up compile times by attempting to
|
|
/// share certain PCH files between modules that UBT detects is including those PCH's header files
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bUseSharedPCHs;
|
|
|
|
/// <summary>
|
|
/// Whether the dependency cache includes pre-resolved include locations so UBT doesn't have to re-resolve each include location just to check the timestamp.
|
|
/// This is technically not fully correct because the dependency cache is global and each module could have a different set of include paths that could cause headers
|
|
/// to resolve files differently. In practice this is not the case, and significantly speeds up UBT when nothing is to be done.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bUseIncludeDependencyResolveCache;
|
|
|
|
/// <summary>
|
|
/// Used to test the dependency resolve cache. This will verify the resolve cache has no conflicts by resolving every time and checking against any previous resolve attempts.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bTestIncludeDependencyResolveCache;
|
|
|
|
/// <summary>
|
|
/// True if we should compile Debug builds using Debug CRT libs and Debug third party dependencies. Otherwise, we'll actually
|
|
/// compile against the Release CRT but leave optimizations turned off, so that it is still easy to debug. If you enable this
|
|
/// setting, actual Debug versions of third party static libraries will be needed when compiling in Debug.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bDebugBuildsActuallyUseDebugCRT;
|
|
|
|
/// <summary>
|
|
/// True if Development and Release builds should use the release configuration of PhysX/APEX.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bUseShippingPhysXLibraries;
|
|
|
|
/// <summary>
|
|
/// True if Development and Release builds should use the checked configuration of PhysX/APEX. if bUseShippingPhysXLibraries is true this is ignored
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bUseCheckedPhysXLibraries;
|
|
|
|
/// <summary>
|
|
/// Tells the UBT to check if module currently being built is violating EULA.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bCheckLicenseViolations;
|
|
|
|
/// <summary>
|
|
/// Tells the UBT to break build if module currently being built is violating EULA.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bBreakBuildOnLicenseViolation;
|
|
|
|
/// <summary>
|
|
/// Enables support for very fast iterative builds by caching target data. Turning this on causes Unreal Build Tool to emit
|
|
/// 'UBT Makefiles' for targets when they're built the first time. Subsequent builds will load these Makefiles and begin
|
|
/// outdatedness checking and build invocation very quickly. The caveat is that if source files are added or removed to
|
|
/// the project, UBT will need to gather information about those in order for your build to complete successfully. Currently,
|
|
/// you must run the project file generator after adding/removing source files to tell UBT to re-gather this information.
|
|
///
|
|
/// Events that can invalidate the 'UBT Makefile':
|
|
/// - Adding/removing .cpp files
|
|
/// - Adding/removing .h files with UObjects
|
|
/// - Adding new UObject types to a file that didn't previously have any
|
|
/// - Changing global build settings (most settings in this file qualify.)
|
|
/// - Changed code that affects how Unreal Header Tool works
|
|
///
|
|
/// You can force regeneration of the 'UBT Makefile' by passing the '-gather' argument, or simply regenerating project files
|
|
///
|
|
/// This also enables the fast include file dependency scanning and caching system that allows Unreal Build Tool to detect out
|
|
/// of date dependencies very quickly. When enabled, a deep C++ include graph does not have to be generated, and instead
|
|
/// we only scan and cache indirect includes for after a dependent build product was already found to be out of date. During the
|
|
/// next build, we'll load those cached indirect includes and check for outdatedness.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bUseUBTMakefiles;
|
|
|
|
/// <summary>
|
|
/// Enables support for fast UHT parsing by caching results of previous UHT runs. If a module or UnrealHeaderTool.manifest
|
|
/// gets changed, all modules up to first changed one get loaded from makefile and the rest is parsed regularly.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bUseUHTMakefiles;
|
|
|
|
/// <summary>
|
|
/// Whether DMUCS/Distcc may be used.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bAllowDistcc;
|
|
|
|
/// <summary>
|
|
/// When enabled allows DMUCS/Distcc to fallback to local compilation when remote compiling fails. Defaults to true as separation of pre-process and compile stages can introduce non-fatal errors.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bAllowDistccLocalFallback;
|
|
|
|
/// <summary>
|
|
/// When true enable verbose distcc output to aid debugging.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bVerboseDistccOutput;
|
|
|
|
/// <summary>
|
|
/// Path to the Distcc & DMUCS executables.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static string DistccExecutablesPath;
|
|
|
|
/// <summary>
|
|
/// DMUCS coordinator hostname or IP address.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static string DMUCSCoordinator;
|
|
|
|
/// <summary>
|
|
/// The DMUCS distinguishing property value to request for compile hosts.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static string DMUCSDistProp;
|
|
|
|
/// <summary>
|
|
/// Run UnrealCodeAnalyzer instead of regular compilation. Requires setting UCA mode by bUCACheckUObjectThreadSafety or bUCACheckPCHFiles.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bRunUnrealCodeAnalyzer;
|
|
|
|
/// <summary>
|
|
/// Perform basic UObject thread safety checks. Dumps information whether UObject constructors, Serialize and PostInitProperties functions access any global/static variables or functions.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bUCACheckUObjectThreadSafety;
|
|
|
|
/// <summary>
|
|
/// Dumps information about header inclusion in PCH.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bUCACheckPCHFiles;
|
|
|
|
/// <summary>
|
|
/// Percentage of cpp files in module where header must be included to get included in PCH.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static float UCAUsageThreshold;
|
|
|
|
/// <summary>
|
|
/// If specified, UnrealCodeAnalyzer will analyze only specific module.
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static string UCAModuleToAnalyze;
|
|
|
|
/// <summary>
|
|
/// If specified, we will only build this particular source file, ignore all other outputs. Useful for testing non-Unity builds.
|
|
/// </summary>
|
|
public static string SingleFileToCompile;
|
|
|
|
/// <summary>
|
|
/// Whether to automatically add the -FastPDB option to the build commands in generated project files
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bAddFastPDBToProjects;
|
|
|
|
/// <summary>
|
|
/// Whether to use the :FASTLINK option when building with /DEBUG to create local PDBs
|
|
/// </summary>
|
|
[XmlConfig]
|
|
public static bool bUseFastPDBLinking;
|
|
|
|
/// <summary>
|
|
/// Sets the configuration back to defaults.
|
|
/// </summary>
|
|
public static void LoadDefaults()
|
|
{
|
|
bAllowLTCG = false;
|
|
bAllowRemotelyCompiledPCHs = false;
|
|
bAllowXGE = true;
|
|
bAllowSNDBS = true;
|
|
|
|
// Don't bother to check external (stable) headers for modification. It slows down UBT's dependency checking.
|
|
bCheckExternalHeadersForModification = false;
|
|
bCheckSystemHeadersForModification = false;
|
|
|
|
bCopyAppBundleBackToDevice = false;
|
|
bCreateStubIPA = true;
|
|
bDeployAfterCompile = false;
|
|
bDisableDebugInfo = false;
|
|
bEnableCodeAnalysis = false;
|
|
bFlushBuildDirOnRemoteMac = false;
|
|
bGeneratedSYMFile = false;
|
|
bStripSymbolsOnIOS = bGeneratedSYMFile;
|
|
|
|
// By default we don't bother relinking targets if only a dependent .lib has changed, as chances are that
|
|
// the import library wasn't actually different unless a dependent header file of this target was also changed,
|
|
// in which case the target would be rebuilt automatically.
|
|
bIgnoreOutdatedImportLibraries = true;
|
|
|
|
bLogDetailedActionStats = false;
|
|
bOmitFramePointers = true;
|
|
bOmitPCDebugInfoInDevelopment = false;
|
|
bPrintDebugInfo = false;
|
|
bPrintPerformanceInfo = false;
|
|
bShouldDeleteAllOutdatedProducedItems = false;
|
|
bShowXGEMonitor = false;
|
|
bStopXGECompilationAfterErrors = true;
|
|
bStressTestUnity = false;
|
|
bSupportEditAndContinue = false;
|
|
bUseActionHistory = true;
|
|
|
|
LogLevel = "Log";
|
|
|
|
// Incremental linking can yield faster iteration times when making small changes
|
|
// NOTE: We currently don't use incremental linking because it tends to behave a bit buggy on some computers (PDB-related compile errors)
|
|
bUseIncrementalLinking = false;
|
|
|
|
bUseMallocProfiler = false;
|
|
bUsePDBFiles = false;
|
|
bUsePCHFiles = true;
|
|
|
|
// Shared PCHs are necessary to avoid generating tons of private PCH files for every single little module. While
|
|
// these private PCHs do yield fastest incremental compiles for single files, it causes full rebuilds to
|
|
// take an inordinate amount of time, and intermediates will use up many gigabytes of disk space.
|
|
bUseSharedPCHs = true;
|
|
|
|
// Using unity build to coalesce source files allows for much faster full rebuild times. For fastest iteration times on single-file
|
|
// changes, consider turning this off. In some cases, unity builds can cause linker errors after iterative changes to files, because
|
|
// the synthesized file names for unity code files may change between builds.
|
|
bUseUnityBuild = true;
|
|
|
|
// This experimental feature may help to improve iterative compile times when working on code, but is
|
|
// disabled by default until we test it sufficiently
|
|
bUseAdaptiveUnityBuild = true;
|
|
|
|
bForceUnityBuild = false;
|
|
|
|
// For programmers working on gameplay code, it's convenient to have fast iteration times when changing only single source
|
|
// files. We've set this default such that smaller gameplay modules will not use the unity build feature, allowing them
|
|
// the fastest possible iterative compile times at the expense of slower full rebuild times. For larger game modules, unity
|
|
// build will automatically be activated.
|
|
MinGameModuleSourceFilesForUnityBuild = 32;
|
|
|
|
// This controls how big unity files are. Use smaller values for faster iterative iteration times at the cost of slower full rebuild times.
|
|
// This setting can greatly affect how effective parallelized compilation can be.
|
|
NumIncludedBytesPerUnityCPP = 384 * 1024;
|
|
|
|
// This sets the number of source files (post-unity-combine) in a module before we'll bother to generate a precompiled header
|
|
// for that module. If you want the fastest iterative builds for non-header changes (at the expense of slower full rebuild times),
|
|
// set this to value to 1
|
|
MinFilesUsingPrecompiledHeader = 6;
|
|
|
|
// We want iterative changes to gameplay modules to be very fast! This makes full rebuilds for small game projects a bit slower,
|
|
// but changes to individual code files will compile quickly.
|
|
bForcePrecompiledHeaderForGameModules = true;
|
|
|
|
// When using the local executor (not XGE), run a single action on each CPU core. Note that you can set this to a larger value
|
|
// to get slightly faster build times in many cases, but your computer's responsiveness during compiling may be much worse.
|
|
ProcessorCountMultiplier = 1.0;
|
|
|
|
MaxProcessorCount = int.MaxValue;
|
|
|
|
bTestIncludeDependencyResolveCache = false;
|
|
// if we are testing the resolve cache, we require UBT to use it.
|
|
bUseIncludeDependencyResolveCache = true;
|
|
|
|
//IMPORTANT THIS IS THE MAIN SWITCH FOR MONO FAST CALLS
|
|
// if this is set to true, then fast calls will be on by default on Dingo, and if false it will be off by default on Dingo.
|
|
// This can be overridden by -fastmonocalls or -nofastmonocalls in the NMAKE params.
|
|
bUseFastMonoCalls = true;
|
|
bUseAsyncComputeContext = bUseFastMonoCalls;
|
|
|
|
// Switch for fast semantics D3D contexts
|
|
// Try disabling this if you see rendering issues or crashes in the Xbox One RHI
|
|
bUseFastSemanticsRenderContexts = false;
|
|
|
|
// By default we use the Release C++ Runtime (CRT), even when compiling Debug builds. This is because the Debug C++
|
|
// Runtime isn't very useful when debugging Unreal Engine projects, and linking against the Debug CRT libraries forces
|
|
// our third party library dependencies to also be compiled using the Debug CRT (and often perform more slowly.) Often
|
|
// it can be inconvenient to require a separate copy of the debug versions of third party static libraries simply
|
|
// so that you can debug your program's code.
|
|
bDebugBuildsActuallyUseDebugCRT = false;
|
|
|
|
// By default we use the Profile PhysX/APEX binaries.
|
|
// We do this in order to keep all configurations the same for behavior consistency. Profile gives some nice debug tools and warnings so we use it instead of Release
|
|
bUseShippingPhysXLibraries = false;
|
|
|
|
// By default we use the Profile PhysX/APEX binaries.
|
|
// We do this in order to keep all configurations the same for behavior consistency.
|
|
bUseCheckedPhysXLibraries = false;
|
|
|
|
// set up some paths
|
|
BaseIntermediateFolder = "Intermediate/Build/";
|
|
|
|
// By default check and stop the build on EULA violation
|
|
bCheckLicenseViolations = false;
|
|
bBreakBuildOnLicenseViolation = true;
|
|
|
|
// Enables support for fast include dependency scanning, as well as gathering data for 'UBT Makefiles', then quickly
|
|
// assembling builds in subsequent runs using data in those cached makefiles
|
|
// NOTE: This feature is new and has a number of known issues (search the code for '@todo ubtmake')
|
|
bUseUBTMakefiles = true;
|
|
|
|
// Enables support for caching results of previous UHT runs to speed up iterative development.
|
|
// This feature is new and can have issues that weren't discovered in isolated testing so disabling by default.
|
|
bUseUHTMakefiles = false;
|
|
|
|
// Distcc requires some setup - so by default disable it so we don't break local or remote building
|
|
bAllowDistcc = false;
|
|
bAllowDistccLocalFallback = true;
|
|
bVerboseDistccOutput = false;
|
|
|
|
// The normal Posix place to install distcc/dmucs would be /usr/local so start there
|
|
DistccExecutablesPath = "/usr/local/bin";
|
|
|
|
// The standard coordinator is localhost and the default distprop is empty
|
|
DMUCSCoordinator = "localhost";
|
|
DMUCSDistProp = "";
|
|
|
|
// By default compile code instead of analyzing it.
|
|
bRunUnrealCodeAnalyzer = false;
|
|
|
|
// If header is included in 0% or more cpp files in module it should be included in PCH.
|
|
UCAUsageThreshold = 100.0f;
|
|
|
|
// Compile everything by default
|
|
SingleFileToCompile = null;
|
|
|
|
bUCACheckUObjectThreadSafety = false;
|
|
|
|
// Use Fast PDB linking by default in projects but not all builds
|
|
bAddFastPDBToProjects = false;
|
|
bUseFastPDBLinking = false;
|
|
|
|
// The default for normal Mac users should be to use DistCode which installs as an Xcode plugin and provides dynamic host management
|
|
if (BuildHostPlatform.Current.Platform == UnrealTargetPlatform.Mac)
|
|
{
|
|
string UserDir = Environment.GetEnvironmentVariable("HOME");
|
|
string MacDistccExecutablesPath = UserDir + "/Library/Application Support/Developer/Shared/Xcode/Plug-ins/Distcc 3.2.xcplugin/Contents/usr/bin";
|
|
|
|
// But we should use the standard Posix directory when not installed - a build farm would use a static .dmucs hosts file not DistCode.
|
|
if (System.IO.Directory.Exists(MacDistccExecutablesPath))
|
|
{
|
|
DistccExecutablesPath = MacDistccExecutablesPath;
|
|
}
|
|
|
|
if (System.IO.File.Exists(UserDir + "/Library/Preferences/com.marksatt.DistCode.plist"))
|
|
{
|
|
using (System.Diagnostics.Process DefaultsProcess = new System.Diagnostics.Process())
|
|
{
|
|
try
|
|
{
|
|
DefaultsProcess.StartInfo.FileName = "/usr/bin/defaults";
|
|
DefaultsProcess.StartInfo.CreateNoWindow = true;
|
|
DefaultsProcess.StartInfo.UseShellExecute = false;
|
|
DefaultsProcess.StartInfo.RedirectStandardOutput = true;
|
|
DefaultsProcess.StartInfo.Arguments = "read com.marksatt.DistCode DistProp";
|
|
DefaultsProcess.Start();
|
|
string Output = DefaultsProcess.StandardOutput.ReadToEnd();
|
|
DefaultsProcess.WaitForExit();
|
|
if (DefaultsProcess.ExitCode == 0)
|
|
{
|
|
DMUCSDistProp = Output;
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Validates the configuration. E.g. some options are mutually exclusive whereof some imply others. Also
|
|
/// some functionality is not available on all platforms.
|
|
/// @warning: the order of validation is important
|
|
/// </summary>
|
|
/// <param name="Configuration">Current configuration (e.g. development, debug, ...)</param>
|
|
/// <param name="Platform">Current platform (e.g. Win32, PS3, ...)</param>
|
|
/// <param name="bCreateDebugInfo">True if debug info should be created</param>
|
|
public static void ValidateConfiguration(CPPTargetConfiguration Configuration, CPPTargetPlatform Platform, bool bCreateDebugInfo, UEBuildPlatformContext PlatformContext)
|
|
{
|
|
var BuildPlatform = UEBuildPlatform.GetBuildPlatformForCPPTargetPlatform(Platform);
|
|
|
|
// E&C support.
|
|
if (bSupportEditAndContinue)
|
|
{
|
|
bUseIncrementalLinking = BuildPlatform.ShouldUseIncrementalLinking(Platform, Configuration);
|
|
}
|
|
|
|
// Incremental linking.
|
|
if (bUseIncrementalLinking)
|
|
{
|
|
bUsePDBFiles = BuildPlatform.ShouldUsePDBFiles(Platform, Configuration, bCreateDebugInfo);
|
|
}
|
|
|
|
// Detailed stats
|
|
if (bLogDetailedActionStats && bAllowXGE)
|
|
{
|
|
// Some build machines apparently have this turned on, so if you really want detailed stats, don't run with XGE
|
|
bLogDetailedActionStats = false;
|
|
}
|
|
|
|
// PDB
|
|
if (bUsePDBFiles)
|
|
{
|
|
// NOTE: Currently we allow XGE to run, even with PDBs, until we notice an issue with this
|
|
bool bDisallowXGEWithPDBFiles = false;
|
|
if (bDisallowXGEWithPDBFiles)
|
|
{
|
|
// Force local execution as we have one PDB for all files using the same PCH. This currently doesn't
|
|
// scale well with XGE due to required networking bandwidth. Xoreax mentioned that this was going to
|
|
// be fixed in a future version of the software.
|
|
bAllowXGE = false;
|
|
}
|
|
}
|
|
|
|
// Allow for the build platform to perform custom validation here...
|
|
// NOTE: This CAN modify the static BuildConfiguration settings!!!!
|
|
PlatformContext.ValidateBuildConfiguration(Configuration, Platform, bCreateDebugInfo);
|
|
|
|
if (!BuildPlatform.CanUseXGE())
|
|
{
|
|
bAllowXGE = false;
|
|
}
|
|
|
|
if (!BuildPlatform.CanUseDistcc())
|
|
{
|
|
bAllowDistcc = false;
|
|
}
|
|
|
|
if (!BuildPlatform.CanUseSNDBS())
|
|
{
|
|
bAllowSNDBS = false;
|
|
}
|
|
|
|
// If we're compiling just a single file, we need to prevent unity builds from running
|
|
if(SingleFileToCompile != null)
|
|
{
|
|
bUseUnityBuild = false;
|
|
bForceUnityBuild = false;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Function to call to after reset default data.
|
|
/// </summary>
|
|
public static void PostReset()
|
|
{
|
|
// Analyzing UCA is disabled for debugging convenience.
|
|
if (UnrealBuildTool.CommandLineContains(@"UnrealCodeAnalyzer")
|
|
// UHT is necessary to generate code for proper compilation.
|
|
|| UnrealBuildTool.CommandLineContains(@"UnrealHeaderTool"))
|
|
{
|
|
BuildConfiguration.bRunUnrealCodeAnalyzer = false;
|
|
}
|
|
|
|
// Couple flags have to be set properly when running UCA.
|
|
if (BuildConfiguration.bRunUnrealCodeAnalyzer)
|
|
{
|
|
// Analyzing header usage makes more sense on non unity builds.
|
|
BuildConfiguration.bUseUnityBuild = false;
|
|
|
|
// Unfortunately clang doesn't work with PCH files specified via cl.exe syntax.
|
|
BuildConfiguration.bUsePCHFiles = false;
|
|
BuildConfiguration.bUseSharedPCHs = false;
|
|
|
|
BuildConfiguration.bUseUBTMakefiles = false;
|
|
BuildConfiguration.bUseActionHistory = false;
|
|
}
|
|
}
|
|
}
|
|
}
|