// Copyright Epic Games, Inc. All Rights Reserved. using System; using System.Collections.Generic; using System.IO; using System.Linq; using EpicGames.Core; using Microsoft.Extensions.Logging; using UnrealBuildBase; namespace UnrealBuildTool { /// /// Read-only wrapper around an existing TargetRules instance. This exposes target settings to modules without letting them to modify the global environment. /// public partial class ReadOnlyTargetRules { /// /// The writeable TargetRules instance /// readonly TargetRules Inner; /// /// Constructor /// /// The TargetRules instance to wrap around public ReadOnlyTargetRules(TargetRules inner) { Inner = inner; AndroidPlatform = new ReadOnlyAndroidTargetRules(inner.AndroidPlatform); IOSPlatform = new ReadOnlyIOSTargetRules(inner.IOSPlatform); LinuxPlatform = new ReadOnlyLinuxTargetRules(inner.LinuxPlatform); MacPlatform = new ReadOnlyMacTargetRules(inner.MacPlatform); WindowsPlatform = new ReadOnlyWindowsTargetRules(inner.WindowsPlatform); CppCompileWarningSettings = new ReadOnlyCppCompileWarnings(inner.CppCompileWarningSettings); } /// /// Accessors for fields on the inner TargetRules instance /// #region Read-only accessor properties #pragma warning disable CS1591 public string Name => Inner.Name; public string OriginalName => Inner.OriginalName; internal FileReference File => Inner.File!; internal FileReference TargetSourceFile => Inner.TargetSourceFile!; internal IReadOnlySet TargetFiles => Inner.TargetFiles!; public object? AdditionalData => Inner.AdditionalData; public UnrealTargetPlatform Platform => Inner.Platform; public UnrealTargetConfiguration Configuration => Inner.Configuration; public UnrealArchitectures Architectures => Inner.Architectures; public UnrealIntermediateEnvironment IntermediateEnvironment => Inner.IntermediateEnvironment; public UnrealArch Architecture => Inner.Architecture; public FileReference? ProjectFile => Inner.ProjectFile; public ReadOnlyBuildVersion Version => Inner.Version; public TargetType Type => Inner.Type; /// public ILogger Logger => Inner.Logger; public BuildSettingsVersion DefaultBuildSettings => Inner.DefaultBuildSettings; public EngineIncludeOrderVersion? ForcedIncludeOrder => Inner.ForcedIncludeOrder; public EngineIncludeOrderVersion IncludeOrderVersion => Inner.IncludeOrderVersion; internal ConfigValueTracker ConfigValueTracker => Inner.ConfigValueTracker; public string? OutputFile => Inner.OutputFile; [Obsolete("Deprecated in UE5.5 - No longer used in engine.")] public bool bUsesSteam => Inner.bUsesSteam; public bool bUsesCEF3 => Inner.bUsesCEF3; public bool bUsesSlate => Inner.bUsesSlate; public bool bUseStaticCRT => Inner.bUseStaticCRT; public bool bDebugBuildsActuallyUseDebugCRT => Inner.bDebugBuildsActuallyUseDebugCRT; public bool bLegalToDistributeBinary => Inner.bLegalToDistributeBinary; public UnrealTargetConfiguration UndecoratedConfiguration => Inner.UndecoratedConfiguration; public string DecoratedSeparator => Inner.DecoratedSeparator; public bool bAllowHotReload => Inner.bAllowHotReload; public bool bBuildAllModules => Inner.bBuildAllModules; public IReadOnlyList AdditionalPlugins => Inner.AdditionalPlugins; public IReadOnlyList EnablePlugins => Inner.EnablePlugins; public IReadOnlyList DisablePlugins => Inner.DisablePlugins; public IReadOnlyList OptionalPlugins => Inner.OptionalPlugins; public bool bAllowEnginePluginsEnabledByDefault => Inner.bAllowEnginePluginsEnabledByDefault; public WarningLevel DisablePluginsConflictWarningLevel => Inner.CppCompileWarningSettings.DisablePluginsConflictWarningLevel; public IReadOnlyList BuildPlugins => Inner.BuildPlugins; public IReadOnlyList InternalPluginDependencies => Inner.InternalPluginDependencies; public bool bRuntimeDependenciesComeFromBuildPlugins => Inner.bRuntimeDependenciesComeFromBuildPlugins; public string PakSigningKeysFile => Inner.PakSigningKeysFile; public string SolutionDirectory => Inner.SolutionDirectory; public string CustomConfig => Inner.CustomConfig; public bool? bBuildInSolutionByDefault => Inner.bBuildInSolutionByDefault; public string ExeBinariesSubFolder => Inner.ExeBinariesSubFolder; public EGeneratedCodeVersion GeneratedCodeVersion => Inner.GeneratedCodeVersion; public bool bEnableMeshEditor => Inner.bEnableMeshEditor; public bool bUseVerseBPVM => Inner.bUseVerseBPVM; public bool bUseVerseVM => !bUseVerseBPVM || Inner.GlobalDefinitions.Contains("WITH_VERSE_VM=1") || Inner.GlobalDefinitions.Contains("WITH_VERSE_VM=WITH_COREUOBJECT"); public bool bUseAutoRTFMCompiler => Inner.bUseAutoRTFMCompiler; public bool bUseAutoRTFMVerifier => Inner.bUseAutoRTFMVerifier; public bool bAutoRTFMVerify => Inner.bAutoRTFMVerify; public bool bAutoRTFMClosedStaticLinkage => Inner.bAutoRTFMClosedStaticLinkage; [Obsolete("Deprecated in UE5.1 - No longer used as Chaos is always enabled.")] public bool bCompileChaos => Inner.bCompileChaos; [Obsolete("Deprecated in UE5.1 - No longer used as Chaos is always enabled.")] public bool bUseChaos => Inner.bUseChaos; public bool bUseChaosMemoryTracking => Inner.bUseChaosMemoryTracking; public bool bCompileChaosVisualDebuggerSupport => Inner.bCompileChaosVisualDebuggerSupport; public bool bUseChaosChecked => Inner.bUseChaosChecked; [Obsolete("Deprecated in UE5.1 - No longer used in engine.")] public bool bCustomSceneQueryStructure => Inner.bCustomSceneQueryStructure; [Obsolete("Deprecated in UE5.1 - No longer used as Chaos is always enabled.")] public bool bCompilePhysX => Inner.bCompilePhysX; [Obsolete("Deprecated in UE5.1 - No longer used as Chaos is always enabled.")] public bool bCompileAPEX => Inner.bCompileAPEX; [Obsolete("Deprecated in UE5.1 - No longer used as Chaos is always enabled.")] public bool bCompileNvCloth => Inner.bCompileNvCloth; public bool bCompileICU => Inner.bCompileICU; public bool bCompileCEF3 => Inner.bCompileCEF3; public bool bCompileISPC => Inner.bCompileISPC; public bool bUseGameplayDebugger => Inner.bUseGameplayDebugger; public bool bUseGameplayDebuggerCore => Inner.bUseGameplayDebuggerCore; public bool bCompileIoStoreOnDemand => Inner.bCompileIoStoreOnDemand; public bool bUseIris => Inner.bUseIris; public bool bTrackRHIResourceInfoForTest => Inner.bTrackRHIResourceInfoForTest; [Obsolete("Deprecated in UE5.4 - No longer used.")] public bool bCompileIntelMetricsDiscovery => Inner.bCompileIntelMetricsDiscovery; public bool bCompilePython => Inner.bCompilePython; public bool bBuildEditor => Inner.bBuildEditor; public bool bBuildRequiresCookedData => Inner.bBuildRequiresCookedData; public bool bBuildWithEditorOnlyData => Inner.bBuildWithEditorOnlyData; public bool bBuildDeveloperTools => Inner.bBuildDeveloperTools; public bool bBuildTargetDeveloperTools => Inner.bBuildTargetDeveloperTools; public bool bForceBuildTargetPlatforms => Inner.bForceBuildTargetPlatforms; public bool bForceBuildShaderFormats => Inner.bForceBuildShaderFormats; public bool bNeedsExtraShaderFormats => Inner.bNeedsExtraShaderFormats; public bool bCompileCustomSQLitePlatform => Inner.bCompileCustomSQLitePlatform; public bool bUseCacheFreedOSAllocs => Inner.bUseCacheFreedOSAllocs; public bool bCompileAgainstEngine => Inner.bCompileAgainstEngine; public bool bCompileAgainstCoreUObject => Inner.bCompileAgainstCoreUObject; public bool bCompileAgainstApplicationCore => Inner.bCompileAgainstApplicationCore; public bool bEnableTrace => Inner.bEnableTrace; public bool bForceEnableTrace => Inner.bForceEnableTrace; public bool bCompileAgainstEditor => Inner.bCompileAgainstEditor; public bool bCompileRecast => Inner.bCompileRecast; public bool bCompileNavmeshSegmentLinks => Inner.bCompileNavmeshSegmentLinks; public bool bCompileNavmeshClusterLinks => Inner.bCompileNavmeshClusterLinks; public bool bCompileSpeedTree => Inner.bCompileSpeedTree; public bool bForceEnableExceptions => Inner.bForceEnableExceptions; public bool bForceEnableObjCExceptions => Inner.bForceEnableObjCExceptions; public bool bForceEnableRTTI => Inner.bForceEnableRTTI; public bool bEnablePrivateBuildInformation => Inner.bEnablePrivateBuildInformation; public bool bEnablePIE => Inner.bEnablePIE; public bool bEnableStackProtection => Inner.bEnableStackProtection; public bool bUseInlining => Inner.bUseInlining; public bool bWithClientCode => Inner.bWithClientCode; public bool bWithServerCode => Inner.bWithServerCode; public bool bFNameOutlineNumber => Inner.bFNameOutlineNumber; public bool bWithPushModel => Inner.bWithPushModel; public bool bCompileWithStatsWithoutEngine => Inner.bCompileWithStatsWithoutEngine; public bool bCompileWithPluginSupport => Inner.bCompileWithPluginSupport; public bool bIncludePluginsForTargetPlatforms => Inner.bIncludePluginsForTargetPlatforms; public bool bCompileWithAccessibilitySupport => Inner.bCompileWithAccessibilitySupport; public bool bWithPerfCounters => Inner.bWithPerfCounters; public bool bWithLiveCoding => Inner.bWithLiveCoding; public bool bUseDebugLiveCodingConsole => Inner.bUseDebugLiveCodingConsole; [Obsolete("Deprecated in UE 5.6 - DirectXMath path was incompatible with LWC and unused since 5.0")] public bool bWithDirectXMath => Inner.bWithDirectXMath; public bool bWithFixedTimeStepSupport => Inner.bWithFixedTimeStepSupport; public bool bUseLoggingInShipping => Inner.bUseLoggingInShipping; public bool bUseConsoleInShipping => Inner.bUseConsoleInShipping; public bool bLoggingToMemoryEnabled => Inner.bLoggingToMemoryEnabled; public bool bUseLauncherChecks => Inner.bUseLauncherChecks; public bool bUseChecksInShipping => Inner.bUseChecksInShipping; public bool bAllowProfileGPUInTest => Inner.bAllowProfileGPUInTest; public bool bAllowProfileGPUInShipping => Inner.bAllowProfileGPUInShipping; public bool bTCHARIsUTF8 => Inner.bTCHARIsUTF8; public bool bUseEstimatedUtcNow => Inner.bUseEstimatedUtcNow; public bool bCompileFreeType => Inner.bCompileFreeType; public bool bUseExecCommandsInShipping => Inner.bUseExecCommandsInShipping; [Obsolete("Deprecated in UE5.1 - Please use OptimizationLevel instead.")] public bool bCompileForSize => Inner.bCompileForSize; public OptimizationMode OptimizationLevel => Inner.OptimizationLevel; public FPSemanticsMode FPSemantics => Inner.FPSemantics; public bool bRetainFramePointers => Inner.bRetainFramePointers; public bool bForceCompileDevelopmentAutomationTests => Inner.bForceCompileDevelopmentAutomationTests; public bool bForceCompilePerformanceAutomationTests => Inner.bForceCompilePerformanceAutomationTests; public bool bForceDisableAutomationTests => Inner.bForceDisableAutomationTests; public bool bUseXGEController => Inner.bUseXGEController; public bool bEventDrivenLoader => Inner.bEventDrivenLoader; public PointerMemberBehavior? NativePointerMemberBehaviorOverride => Inner.NativePointerMemberBehaviorOverride; public bool bIWYU => Inner.bIWYU; public bool bIncludeHeaders => Inner.bIncludeHeaders; public bool bHeadersOnly => Inner.bHeadersOnly; public bool bEnforceIWYU => Inner.bEnforceIWYU; public bool bWarnAboutMonolithicHeadersIncluded => Inner.bWarnAboutMonolithicHeadersIncluded; public bool bHasExports => Inner.bHasExports; public bool bPrecompile => Inner.bPrecompile; public bool bEnableOSX109Support => Inner.bEnableOSX109Support; public bool bIsBuildingConsoleApplication => Inner.bIsBuildingConsoleApplication; public bool bBuildAdditionalConsoleApp => Inner.bBuildAdditionalConsoleApp; public bool bBuildConsoleAppOnly => Inner.bBuildConsoleAppOnly; public bool bDisableSymbolCache => Inner.bDisableSymbolCache; public bool bUseUnityBuild => Inner.bUseUnityBuild; public bool bForceUnityBuild => Inner.bForceUnityBuild; public bool bAlwaysUseUnityForGeneratedFiles => Inner.bAlwaysUseUnityForGeneratedFiles; public IReadOnlyList? DisableMergingModuleAndGeneratedFilesInUnityFiles => Inner.DisableMergingModuleAndGeneratedFilesInUnityFiles; public bool bAdaptiveUnityDisablesOptimizations => Inner.bAdaptiveUnityDisablesOptimizations; public bool bAdaptiveUnityDisablesPCH => Inner.bAdaptiveUnityDisablesPCH; public bool bAdaptiveUnityDisablesPCHForProject => Inner.bAdaptiveUnityDisablesPCHForProject; public bool bAdaptiveUnityCreatesDedicatedPCH => Inner.bAdaptiveUnityCreatesDedicatedPCH; public bool bAdaptiveUnityEnablesEditAndContinue => Inner.bAdaptiveUnityEnablesEditAndContinue; public bool bAdaptiveUnityCompilesHeaderFiles => Inner.bAdaptiveUnityCompilesHeaderFiles; public int MinGameModuleSourceFilesForUnityBuild => Inner.MinGameModuleSourceFilesForUnityBuild; public bool bValidateFormatStrings => Inner.bValidateFormatStrings; public WarningLevel DefaultWarningLevel => Inner.DefaultWarningLevel; [Obsolete("Deprecated in UE5.6 - Replace with ReadOnlyTargetRules.CppCompileWarningSettings.DeprecationWarningLevel")] public WarningLevel DeprecationWarningLevel => Inner.CppCompileWarningSettings.DeprecationWarningLevel; public ReadOnlyCppCompileWarnings CppCompileWarningSettings { get; init; } [Obsolete("Deprecated in UE5.6 - Replace with ReadOnlyTargetRules.CppCompileWarningSettings.ShadowVariableWarningLevel")] public WarningLevel ShadowVariableWarningLevel => Inner.CppCompileWarningSettings.ShadowVariableWarningLevel; [Obsolete("Deprecated in UE5.6 - Replace with ReadOnlyTargetRules.CppCompileWarningSettings.UnsafeTypeCastWarningLevel")] public WarningLevel UnsafeTypeCastWarningLevel => Inner.CppCompileWarningSettings.UnsafeTypeCastWarningLevel; [Obsolete("Deprecated in UE5.6 - Replace with ReadOnlyTargetRules.CppCompileWarningSettings.UndefinedIdentifierWarningLevel")] public WarningLevel UndefinedIdentifierWarningLevel => Inner.CppCompileWarningSettings.UndefinedIdentifierWarningLevel; [Obsolete("Deprecated in UE5.5 - Replace with ModuleRules.UndefinedIdentifierWarningLevel")] public bool bUndefinedIdentifierErrors => Inner.bUndefinedIdentifierErrors; [Obsolete("Deprecated in UE5.6 - Replace with ReadOnlyTargetRules.CppCompileWarningSettings.PCHPerformanceIssueWarningLevel")] public WarningLevel PCHPerformanceIssueWarningLevel => Inner.CppCompileWarningSettings.PCHPerformanceIssueWarningLevel; [Obsolete("Deprecated in UE5.6 - Replace with ReadOnlyTargetRules.CppCompileWarningSettings.ModuleIncludePathWarningLevel")] public WarningLevel ModuleIncludePathWarningLevel => Inner.CppCompileWarningSettings.ModuleIncludePathWarningLevel; [Obsolete("Deprecated in UE5.6 - Replace with ReadOnlyTargetRules.CppCompileWarningSettings.ModuleIncludePrivateWarningLevel")] public WarningLevel ModuleIncludePrivateWarningLevel => Inner.CppCompileWarningSettings.ModuleIncludePrivateWarningLevel; [Obsolete("Deprecated in UE5.6 - Replace with ReadOnlyTargetRules.CppCompileWarningSettings.ModuleIncludeSubdirectoryWarningLevel")] public WarningLevel ModuleIncludeSubdirectoryWarningLevel => Inner.CppCompileWarningSettings.ModuleIncludeSubdirectoryWarningLevel; public bool bShowIncludes => Inner.bShowIncludes; public bool bWarningsAsErrors => Inner.bWarningsAsErrors; public bool bUseFastMonoCalls => Inner.bUseFastMonoCalls; public int NumIncludedBytesPerUnityCPP => Inner.NumIncludedBytesPerUnityCPP; public bool bDisableModuleNumIncludedBytesPerUnityCPPOverride => Inner.bDisableModuleNumIncludedBytesPerUnityCPPOverride; public bool bStressTestUnity => Inner.bStressTestUnity; [Obsolete("Deprecated in UE5.6")] public bool bDetailedUnityFiles => Inner.bDetailedUnityFiles; [Obsolete("Deprecated in UE5.4 - Replace with ReadOnlyTargetRules.DebugInfo")] public bool bDisableDebugInfo => Inner.bDisableDebugInfo; public DebugInfoMode DebugInfo => Inner.DebugInfo; public IReadOnlySet DisableDebugInfoModules => Inner.DisableDebugInfoModules; public IReadOnlySet DisableDebugInfoPlugins => Inner.DisableDebugInfoPlugins; public DebugInfoMode DebugInfoLineTablesOnly => Inner.DebugInfoLineTablesOnly; public IReadOnlySet DebugInfoLineTablesOnlyModules => Inner.DebugInfoLineTablesOnlyModules; public IReadOnlySet DebugInfoLineTablesOnlyPlugins => Inner.DebugInfoLineTablesOnlyPlugins; public bool bDisableDebugInfoForGeneratedCode => Inner.bDisableDebugInfoForGeneratedCode; public bool bOmitPCDebugInfoInDevelopment => Inner.bOmitPCDebugInfoInDevelopment; public bool bUsePDBFiles => Inner.bUsePDBFiles; public bool bUsePCHFiles => Inner.bUsePCHFiles; public bool bDeterministic => Inner.bDeterministic; public bool bUseVFS => Inner.bUseVFS; public bool bChainPCHs => Inner.bChainPCHs; public bool bForceIncludePCHHeadersForGenCppFilesWhenPCHIsDisabled => Inner.bForceIncludePCHHeadersForGenCppFilesWhenPCHIsDisabled; public bool bPreprocessOnly => Inner.bPreprocessOnly; public bool bPreprocessDepends => Inner.bPreprocessDepends; public bool bWithAssembly => Inner.bWithAssembly; public bool bAllowUbaCompression => Inner.bAllowUbaCompression; public StaticAnalyzer StaticAnalyzer => Inner.StaticAnalyzer; public StaticAnalyzerOutputType StaticAnalyzerOutputType => Inner.StaticAnalyzerOutputType; public StaticAnalyzerMode StaticAnalyzerMode => Inner.StaticAnalyzerMode; public int StaticAnalyzerPVSPrintLevel => Inner.StaticAnalyzerPVSPrintLevel; public bool bStaticAnalyzerProjectOnly => Inner.bStaticAnalyzerProjectOnly; public bool bStaticAnalyzerIncludeGenerated => Inner.bStaticAnalyzerIncludeGenerated; public int MinFilesUsingPrecompiledHeader => Inner.MinFilesUsingPrecompiledHeader; public bool bForcePrecompiledHeaderForGameModules => Inner.bForcePrecompiledHeaderForGameModules; public bool bUseIncrementalLinking => Inner.bUseIncrementalLinking; public bool bAllowLTCG => Inner.bAllowLTCG; public bool bPreferThinLTO => Inner.bPreferThinLTO; public bool bCompressDebugFile => Inner.bCompressDebugFile; public bool bPGOProfile => Inner.bPGOProfile; public bool bPGOOptimize => Inner.bPGOOptimize; public bool bSupportEditAndContinue => Inner.bSupportEditAndContinue; public bool bCodeCoverage => Inner.bCodeCoverage; public bool bOmitFramePointers => Inner.bOmitFramePointers; public bool bEnableCppModules => Inner.bEnableCppModules; public bool bEnableCppCoroutinesForEvaluation => Inner.bEnableCppCoroutinesForEvaluation; public bool bEnableProcessPriorityControl => Inner.bEnableProcessPriorityControl; [Obsolete("Deprecated in UE5.3 - No longer used as MallocProfiler is removed in favor of UnrealInsights.")] public bool bUseMallocProfiler => Inner.bUseMallocProfiler; public bool bShaderCompilerWorkerTrace => Inner.bShaderCompilerWorkerTrace; public bool bUseSharedPCHs => Inner.bUseSharedPCHs; public bool bUseShippingPhysXLibraries => Inner.bUseShippingPhysXLibraries; public bool bUseCheckedPhysXLibraries => Inner.bUseCheckedPhysXLibraries; public bool bCheckLicenseViolations => Inner.bCheckLicenseViolations; public bool bBreakBuildOnLicenseViolation => Inner.bBreakBuildOnLicenseViolation; public bool? bUseFastPDBLinking => Inner.bUseFastPDBLinking; public bool bCreateMapFile => Inner.bCreateMapFile; public bool bAllowRuntimeSymbolFiles => Inner.bAllowRuntimeSymbolFiles; public string? PackagePath => Inner.PackagePath; public string? CrashDiagnosticDirectory => Inner.CrashDiagnosticDirectory; public string? ThinLTOCacheDirectory => Inner.ThinLTOCacheDirectory; public string? ThinLTOCachePruningArguments => Inner.ThinLTOCachePruningArguments; public string? BundleVersion => Inner.BundleVersion; public bool bDeployAfterCompile => Inner.bDeployAfterCompile; public bool bAllowRemotelyCompiledPCHs => Inner.bAllowRemotelyCompiledPCHs; public bool bUseHeaderUnitsForPch => Inner.bUseHeaderUnitsForPch; public bool bCheckSystemHeadersForModification => Inner.bCheckSystemHeadersForModification; public bool bDisableLinking => Inner.bDisableLinking; public bool bIgnoreBuildOutputs => Inner.bIgnoreBuildOutputs; public bool bFormalBuild => Inner.bFormalBuild; public bool bUseAdaptiveUnityBuild => Inner.bUseAdaptiveUnityBuild; public bool bFlushBuildDirOnRemoteMac => Inner.bFlushBuildDirOnRemoteMac; public bool bPrintToolChainTimingInfo => Inner.bPrintToolChainTimingInfo; public bool bParseTimingInfoForTracing => Inner.bParseTimingInfoForTracing; public bool bPublicSymbolsByDefault => Inner.bPublicSymbolsByDefault; public string? ToolChainName => Inner.ToolChainName; public float MSVCCompileActionWeight => Inner.MSVCCompileActionWeight; public float ClangCompileActionWeight => Inner.ClangCompileActionWeight; public bool bLegacyPublicIncludePaths => Inner.bLegacyPublicIncludePaths; public bool bLegacyParentIncludePaths => Inner.bLegacyParentIncludePaths; public bool bDisableEngineDeprecations => Inner.bDisableEngineDeprecations; public CppStandardVersion CppStandardEngine => Inner.CppStandardEngine; public CppStandardVersion CppStandard => Inner.CppStandard; public CStandardVersion CStandard => Inner.CStandard; public MinimumCpuArchitectureX64 MinCpuArchX64 => Inner.MinCpuArchX64; public Arm64TargetCpuType MinArm64CpuTarget => Inner.MinArm64CpuTarget; internal bool bNoManifestChanges => Inner.bNoManifestChanges; public string? BuildVersion => Inner.BuildVersion; public TargetLinkType LinkType => Inner.LinkType; public bool bStripExports => Inner.bStripExports; public bool bMergeModules => Inner.bMergeModules; public IReadOnlyList MergePlugins => Inner.MergePlugins; public IReadOnlyList MergePluginsIgnored => Inner.MergePluginsIgnored; public IReadOnlyDictionary> MergePluginsShared => Inner.MergePluginsShared.ToDictionary(k => k.Key, v => v.Value.AsEnumerable()); public IReadOnlyList MergePluginsLaunch => Inner.MergePluginsLaunch; public IReadOnlyList GlobalDefinitions => Inner.GlobalDefinitions.AsReadOnly(); public IReadOnlyList ProjectDefinitions => Inner.ProjectDefinitions.AsReadOnly(); public string? LaunchModuleName => Inner.LaunchModuleName; public string? ExportPublicHeader => Inner.ExportPublicHeader; public IReadOnlyList ExtraModuleNames => Inner.ExtraModuleNames.AsReadOnly(); public IReadOnlyList ManifestFileNames => Inner.ManifestFileNames.AsReadOnly(); public IReadOnlyList DependencyListFileNames => Inner.DependencyListFileNames.AsReadOnly(); public TargetBuildEnvironment BuildEnvironment => Inner.BuildEnvironment; public bool bOverrideBuildEnvironment => Inner.bOverrideBuildEnvironment; public IReadOnlyList PreBuildTargets => Inner.PreBuildTargets; public IReadOnlyList PreBuildSteps => Inner.PreBuildSteps; public IReadOnlyList PostBuildSteps => Inner.PostBuildSteps; public IReadOnlyList AdditionalBuildProducts => Inner.AdditionalBuildProducts; public string? AdditionalCompilerArguments => Inner.AdditionalCompilerArguments; public string? AdditionalLinkerArguments => Inner.AdditionalLinkerArguments; public double MemoryPerActionGB => Inner.MemoryPerActionGB; public string? GeneratedProjectName => Inner.GeneratedProjectName; public ReadOnlyAndroidTargetRules AndroidPlatform { get; init; } public ReadOnlyLinuxTargetRules LinuxPlatform { get; init; } public ReadOnlyIOSTargetRules IOSPlatform { get; init; } public ReadOnlyMacTargetRules MacPlatform { get; init; } public ReadOnlyWindowsTargetRules WindowsPlatform { get; init; } public bool bShouldCompileAsDLL => Inner.bShouldCompileAsDLL; public bool bGenerateProjectFiles => Inner.bGenerateProjectFiles; public bool bIsEngineInstalled => Inner.bIsEngineInstalled; public IReadOnlyList? DisableUnityBuildForModules => Inner.DisableUnityBuildForModules; public IReadOnlyList? EnableOptimizeCodeForModules => Inner.EnableOptimizeCodeForModules; public IReadOnlyList? DisableOptimizeCodeForModules => Inner.DisableOptimizeCodeForModules; public IReadOnlyList? OptimizeForSizeModules => Inner.OptimizeForSizeModules; public IReadOnlyList? OptimizeForSizeAndSpeedModules => Inner.OptimizeForSizeAndSpeedModules; public IReadOnlyList? OptedInModulePlatforms => Inner.OptedInModulePlatforms; public TestTargetRules? InnerTestTargetRules => Inner as TestTargetRules; #pragma warning restore C1591 #endregion /// /// Provide access to the RelativeEnginePath property for code referencing ModuleRules.BuildConfiguration. /// public string RelativeEnginePath => Unreal.EngineDirectory.MakeRelativeTo(DirectoryReference.GetCurrentDirectory()) + Path.DirectorySeparatorChar; /// /// Provide access to the UEThirdPartySourceDirectory property for code referencing ModuleRules.UEBuildConfiguration. /// public string UEThirdPartySourceDirectory => "ThirdParty/"; /// /// Provide access to the UEThirdPartyBinariesDirectory property for code referencing ModuleRules.UEBuildConfiguration. /// public string UEThirdPartyBinariesDirectory => "../Binaries/ThirdParty/"; /// /// Whether this is a low level tests target. /// public bool IsTestTarget => Inner.IsTestTarget; /// /// Whether this is a test target explicitly defined. /// Explicitley defined test targets always inherit from TestTargetRules and define their own tests. /// Implicit test targets are created from existing targets when building with -Mode=Test and they include tests from all dependencies. /// public bool ExplicitTestsTarget => Inner.ExplicitTestsTarget; /// /// Controls the value of WITH_LOW_LEVEL_TESTS that dictates whether module-specific low level tests are compiled in or not. /// public bool WithLowLevelTests => Inner.WithLowLevelTests; /// /// Get the platforms this target supports /// public IEnumerable SupportedPlatforms => Inner.GetSupportedPlatforms(); /// /// Get the configurations this target supports /// public IEnumerable SupportedConfigurations => Inner.GetSupportedConfigurations(); /// /// Checks if current platform is part of a given platform group /// /// The platform group to check /// True if current platform is part of a platform group public bool IsInPlatformGroup(UnrealPlatformGroup group) => UEBuildPlatform.IsPlatformInGroup(Platform, group); /// /// Gets diagnostic messages about default settings which have changed in newer versions of the engine /// /// List of messages to be appended to internal void GetBuildSettingsInfo(List diagnostics) => Inner.GetBuildSettingsInfo(diagnostics); public bool IsPlatformOptedIn(UnrealTargetPlatform platform) => Inner.OptedInModulePlatforms == null || Inner.OptedInModulePlatforms.Contains(platform); /// /// Checks if a plugin should be programmatically allowed in the build /// /// true if the plugin is allowed public bool ShouldIgnorePluginDependency(PluginInfo parentInfo, PluginReferenceDescriptor childDescriptor) => Inner.ShouldIgnorePluginDependency(parentInfo, childDescriptor); /// /// Determines if the automation tests should be compiled based on the current configuration and optional forced settings. /// If either the development tests or performance tests are compiled (unless explicitly disabled), this property returns true. /// private bool? _bWithAutomationTestsPrivate = null; public bool WithAutomationTests { get { if (!_bWithAutomationTestsPrivate.HasValue) { bool bCompileDevTests = (Configuration != UnrealTargetConfiguration.Test && Configuration != UnrealTargetConfiguration.Shipping); bool bCompilePerfTests = bCompileDevTests; if (bForceCompileDevelopmentAutomationTests) { bCompileDevTests = true; } if (bForceCompilePerformanceAutomationTests) { bCompilePerfTests = true; } if (bForceDisableAutomationTests) { bCompileDevTests = bCompilePerfTests = false; } _bWithAutomationTestsPrivate = bCompileDevTests || bCompilePerfTests; } return _bWithAutomationTestsPrivate.Value; } } public StaticAllocatorType StaticAllocator => Inner.StaticAllocator; } }