// Copyright Epic Games, Inc. All Rights Reserved. using System; using EpicGames.Core; namespace UnrealBuildTool { /// /// Global settings for building. Should not contain any target-specific settings. /// class BuildConfiguration { /// /// Whether to ignore import library files that are out of date when building targets. Set this to true to improve iteration time. /// By default, we do not bother re-linking targets if only a dependent .lib has changed, as chances are that /// the import library was not actually different unless a dependent header file of this target was also changed, /// in which case the target would automatically be rebuilt. /// [XmlConfigFile] public bool bIgnoreOutdatedImportLibraries = true; /// /// Use existing static libraries for all engine modules in this target. /// [CommandLine("-UsePrecompiled")] public bool bUsePrecompiled = false; /// /// Whether debug info should be written to the console. /// [XmlConfigFile] [CommandLine("-PrintDebugInfo", Value = "true")] public bool bPrintDebugInfo = false; /// /// Whether the hybrid executor will be used (a remote executor and local executor). /// [XmlConfigFile] public bool bAllowHybridExecutor = false; #if __BOXEXECUTOR_AVAILABLE__ /// /// Whether the experimental box executor will be used. /// [XmlConfigFile] [CommandLine("-Box", Value = "true")] [CommandLine("-NoBox", Value = "false")] public bool bAllowBoxExecutor = false; #endif // #if __BOXEXECUTOR_AVAILABLE__ /// /// Whether XGE may be used. /// [XmlConfigFile] [CommandLine("-NoXGE", Value = "false")] public bool bAllowXGE = true; /// /// Whether FASTBuild may be used. /// [XmlConfigFile] [CommandLine("-NoFASTBuild", Value = "false")] public bool bAllowFASTBuild = true; /// /// Whether SN-DBS may be used. /// [XmlConfigFile] [CommandLine("-NoSNDBS", Value = "false")] public bool bAllowSNDBS = true; /// /// 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 are 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 did not 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 will load those cached indirect includes and check for outdatedness. /// [XmlConfigFile] [CommandLine("-NoUBTMakefiles", Value = "false")] public bool bUseUBTMakefiles = true; /// /// Number of actions that can be executed in parallel. If 0 then code will pick a default based /// on the number of cores and memory available. Applies to the ParallelExecutor, HybridExecutor, and LocalExecutor /// [XmlConfigFile] [CommandLine("-MaxParallelActions")] public int MaxParallelActions = 0; /// /// Consider logical cores when determining how many total cpu cores are available. /// [XmlConfigFile(Name = "bAllCores")] [CommandLine("-AllCores")] public bool bAllCores = false; /// /// If true, force header regeneration. Intended for the build machine. /// [CommandLine("-ForceHeaderGeneration")] [XmlConfigFile(Category = "UEBuildConfiguration")] public bool bForceHeaderGeneration = false; /// /// If true, do not build UHT, assume it is already built. /// [Obsolete] [XmlConfigFile(Category = "UEBuildConfiguration", Deprecated = true)] public bool bDoNotBuildUHT = false; /// /// If true, fail if any of the generated header files is out of date. /// [CommandLine("-FailIfGeneratedCodeChanges")] [XmlConfigFile(Category = "UEBuildConfiguration")] public bool bFailIfGeneratedCodeChanges = false; /// /// True if hot-reload from IDE is allowed. /// [CommandLine("-NoHotReloadFromIDE", Value = "false")] [XmlConfigFile(Category = "UEBuildConfiguration")] public bool bAllowHotReloadFromIDE = true; /// /// If true, the Debug version of UnrealHeaderTool will be built and run instead of the Development version. /// [Obsolete] [XmlConfigFile(Category = "UEBuildConfiguration", Deprecated = true)] public bool bForceDebugUnrealHeaderTool = false; /// /// If true, use C# UHT internal to UBT /// [Obsolete] [XmlConfigFile(Category = "UEBuildConfiguration", Deprecated = true)] public bool bUseBuiltInUnrealHeaderTool = true; /// /// If true, generate warnings when C++ UHT is used /// [Obsolete] [XmlConfigFile(Category = "UEBuildConfiguration", Deprecated = true)] public bool bWarnOnCppUnrealHeaderTool = true; /// /// Whether to skip compiling rules assemblies and just assume they are valid /// [CommandLine("-SkipRulesCompile")] public bool bSkipRulesCompile = false; /// /// Whether to force compiling rules assemblies, regardless of whether they are valid /// [CommandLine("-ForceRulesCompile")] public bool bForceRulesCompile = false; /// /// Maximum recommended root path length. /// [XmlConfigFile(Category = "WindowsPlatform")] public int MaxRootPathLength = 50; /// /// Maximum length of a path relative to the root directory. Used on Windows to ensure paths are portable between machines. Defaults to off. /// [XmlConfigFile(Category = "WindowsPlatform")] public int MaxNestedPathLength = 200; /// /// When single file targets are specified, via -File=, -SingleFile=, or -FileList= /// If this option is set, no error will be produced if the source file is not included in the target. /// Additionally, if any file or file list is specified, the target will not be built if none of the specified files are part of that target, /// including the case where a file specified via -FileList= is empty. /// [CommandLine("-IgnoreInvalidFiles")] public bool bIgnoreInvalidFiles; /// /// Instruct the executor to write compact output e.g. only errors, if supported by the executor. /// This field is used to hold the value when specified from the command line or XML /// [XmlConfigFile(Name = "bCompactOutput")] [CommandLine("-CompactOutput")] private bool bCompactOutputCommandLine = false; /// /// If set, artifacts will be read /// [XmlConfigFile(Category = "BuildConfiguration")] [CommandLine("-ArtifactReads", Value = "True")] [CommandLine("-NoArtifactReads", Value = "False")] public bool bArtifactRead = true; /// /// If set, artifacts will be written /// [XmlConfigFile(Category = "BuildConfiguration")] [CommandLine("-ArtifactWrites", Value = "True")] [CommandLine("-NoArtifactWrites", Value = "False")] public bool bArtifactWrites = true; /// /// If true, log all artifact cache misses as informational messages /// [XmlConfigFile(Category = "BuildConfiguration")] [CommandLine("-LogArtifactCacheMisses", Value = "True")] public bool bLogArtifactCacheMisses = false; /// /// Location to store the artifacts. /// [XmlConfigFile(Category = "BuildConfiguration")] [CommandLine("-ArtifactDirectory=")] public string ArtifactDirectory = String.Empty; /// /// Instruct the executor to write compact output e.g. only errors, if supported by the executor, /// and only if output is not being redirected e.g. during a build from within Visual Studio /// public bool bCompactOutput => bCompactOutputCommandLine && !Console.IsOutputRedirected; /// /// Whether to unify C++ code into larger files for faster compilation. /// [XmlConfigFile(Category = "BuildConfiguration")] public bool? bUseUnityBuild; /// /// Whether to force C++ source files to be combined into larger files for faster compilation. /// [XmlConfigFile(Category = "BuildConfiguration")] public bool? bForceUnityBuild; /// /// Intermediate environment. Determines if the intermediates end up in a different folder than normal. /// public UnrealIntermediateEnvironment? IntermediateEnvironment { get { if (bForceUnityBuild == true) { return UnrealIntermediateEnvironment.Default; } if (bUseUnityBuild == false) { return UnrealIntermediateEnvironment.NonUnity; } return null; } } } }