2021-03-09 21:05:18 -04:00
<?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" >
<EnvVar Name= "UE_HORDE_JOBID" />
2023-06-06 17:40:06 -04:00
<EnvVar Name= "UE-CloudPublishHost" />
<EnvVar Name= "UE-CloudPublishNamespace" />
2021-03-09 21:05:18 -04:00
<!-- Project Options -->
2021-03-11 23:26:40 -04:00
<Option Name= "ProjectName" DefaultValue= "None" Restrict= ".+" Description= "Name of Project" />
<Option Name= "ProjectPath" DefaultValue= "None" Restrict= ".+" Description= "Path to the folder that contains your project" />
2021-12-10 17:46:49 -05:00
<Option Name= "IsContentOnlyProject" DefaultValue= "false" Restrict= "true|false" Description= "Is the project a content only project?" />
2021-03-09 21:05:18 -04:00
<Option Name= "TargetName" DefaultValue= "" Restrict= "" Description= "If your project supports both Game and Client you can set this, otherwise one will be selected" />
2021-07-21 21:54:44 -04:00
<Option Name= "EditorTargetName" DefaultValue= "" Restrict= "" Description= "Specify the editor target name if different than (ProjectName)Editor" />
2022-07-11 09:50:47 -04:00
<Option Name= "CookedEditorTargetName" DefaultValue= "" Restrict= "" Description= "Specify the cooked editor target name if different than (ProjectName)CookedEditor" />
2021-07-21 21:54:44 -04:00
2023-01-13 13:36:19 -05:00
<Option Name= "PreNodeName" DefaultValue= "$(ProjectName)" Description= "String to prepend to node name" />
<Option Name= "PreLabelName" DefaultValue= "" Description= "String to prepend to label name" />
<Property Name= "PreNodeName" Value= "$(PreNodeName) " If= "'$(PreNodeName)' != ''" />
<Property Name= "PreLabelName" Value= "$(PreLabelName) " If= "'$(PreLabelName)' != ''" />
2021-08-18 13:58:57 -04:00
<Option Name= "GenericCompileArguments" DefaultValue= "" Restrict= "" Description= "Configurable compile args applied to all compile targets." />
2021-03-12 00:44:40 -04:00
<Option Name= "ExtraToolCompileArguments" DefaultValue= "" Restrict= "" Description= "Extra arguments to use when building the tools" />
2021-03-11 23:26:40 -04:00
<Option Name= "ExtraEditorCompileArguments" DefaultValue= "" Restrict= "" Description= "Extra arguments to use when building the editor" />
<Option Name= "ExtraTargetCompileArguments" DefaultValue= "" Restrict= "" Description= "Extra arguments to use when building targets" />
<Option Name= "MapIniSection" DefaultValue= "" Restrict= "" Description= "MapIniSection argument to pass when cooking" />
<Option Name= "ExtraCookArguments" DefaultValue= "" Restrict= "" Description= "Extra arguments to use when cooking" />
<Option Name= "ExtraStageAndPackageArguments" DefaultValue= "" Restrict= "" Description= "Extra arguments to use when staging and packaging" />
2022-08-23 17:02:18 -04:00
<Option Name= "ExtraPackageOnlyArguments" DefaultValue= "" Restrict= "" Description= "Extra arguments to use when staging only" />
2021-12-03 13:38:15 -05:00
<Option Name= "TargetPlatformFilteredExtraStageAndPackageArguments" DefaultValue= "" Restrict= "" Description= "Extra arguments to use when staging and packaging. Filtered to specific platforms via TargetPlatformFilteredExtraStageAndPackageArgumentsFilter." />
<Option Name= "TargetPlatformFilteredExtraStageAndPackageArgumentsFilter" DefaultValue= "" Restrict= "" Description= "Platform filter applied to TargetPlatformFilteredExtraStageAndPackageArguments." />
2021-11-18 14:37:34 -05:00
<Option Name= "WithRemoteExecWorkers" DefaultValue= "false" Restrict= "" Description= "If your project uses standalone remote execution workers" />
2021-03-11 23:26:40 -04:00
<Option Name= "UseIncrementalAgents" DefaultValue= "false" Restrict= "true|false" Description= "Use incremental agents for building" />
2021-04-12 09:36:42 -04:00
<Option Name= "AgentOverride" DefaultValue= "" Description= "If set, other logic is ignored and this agent type is used for all non-test work." />
<Option Name= "TestAgentOverride" DefaultValue= "" Description= "If set, other logic is ignored and this agent type is used for all test work." />
2022-10-07 19:45:18 -04:00
<Option Name= "TargetPlatformTestAgentOverride" DefaultValue= "DevkitAutomation" Description= "Override agent type use to run target platform tests" />
2021-12-03 02:42:56 -05:00
<Option Name= "ClientCompileAgentOverride" DefaultValue= "" Description= "Specifies the agent type to use for C++ compilation jobs for target platform binaries." />
2023-04-19 16:55:45 -04:00
<Option Name= "UnrealInsightsBuildConfiguration" DefaultValue= "Shipping" Restrict= "Development|Debug|Shipping" Description= "In which configuration to build Unreal Insights, if included. Shipping, Debug, or Development." />
2022-09-22 15:00:30 -04:00
<Option Name= "IncludeUnrealInsightsInToolCompile" DefaultValue= "false" Description= "Include Unreal Insights into Compile Tools prerequisites" />
2023-01-31 18:02:13 -05:00
<Option Name= "IncludeEpicWebHelperInToolCompile" DefaultValue= "false" Description= "Include EpicWebHelper into Compile Tools prerequisites" />
2021-03-28 22:51:06 -04:00
2021-03-09 21:05:18 -04:00
<!--
2022-07-11 09:50:47 -04:00
Allow project graphs that Include this file to specify their own defaults.
2021-03-09 21:05:18 -04:00
-->
2022-07-11 09:50:47 -04:00
<Option Name= "DefaultEditorPlatforms" DefaultValue= "" Description= "Default Editor platforms" />
<Option Name= "DefaultCookedEditorPlatforms" DefaultValue= "" Description= "Default Cooked Editor platforms" />
<Option Name= "DefaultTargetPlatforms" DefaultValue= "" Description= "Default Target platforms" />
<Option Name= "DefaultTargetConfigurations" DefaultValue= "Development" Description= "Default Target configurations" />
<Option Name= "DefaultCookedEditorConfigurations" DefaultValue= "Development" Description= "Default Cooked Editor configurations" />
<Option Name= "DefaultEditorTestList" DefaultValue= "" Description= "Default Editor test list" />
<Option Name= "DefaultTargetTestList" DefaultValue= "" Description= "Default Target test list" />
<Option Name= "DefaultCookedEditorTestList" DefaultValue= "" Description= "Default Cooked Editor test list" />
<Option Name= "NetworkTempRootOverride" DefaultValue= "" Description= "Network temp root override" />
<Option Name= "NetworkPublishRootOverride" DefaultValue= "" Description= "Network publish root override" />
<Option Name= "NetworkReportRootOverride" DefaultValue= "" Description= "Network report root override" />
<Option Name= "SymbolServerPath" DefaultValue= "" Description= "Symbol server path" />
2021-03-09 21:05:18 -04:00
2023-06-06 17:40:06 -04:00
<Option Name= "PublishCloudSnapshot" DefaultValue= "false" Restrict= "true|false" Description= "Publish build to cloud host" />
2021-07-28 16:20:59 -04:00
<Option Name= "EnableSymbolStore" DefaultValue= "$(IsBuildMachine)" Restrict= "true|false" Description= "Enables the upload of debugging symbols" />
<Property Name= "SymbolServerPath" Value= "" If= "$(EnableSymbolStore) == 'false'" />
2021-03-09 21:05:18 -04:00
<!-- This will define options for all platforms and create lists called EditorPlatforms, RequiredEditorPlatforms, and TargetPlatforms. E.g. TargetPlatforms=Win64+Mac+PS4 -->
<Include Script= "Inc/PlatformOptions.xml" />
2021-05-13 20:20:15 -04:00
<!-- For compatibility with build graphs relying on PlatformsToSkipTests option from PlatformOptions that was replaced with Editor/Target specific options -->
<Do If= "'$(PlatformsToSkipTests)' != ''" >
<Property Name= "EditorPlatformsToSkipTests" Value= "$(PlatformsToSkipTests)" />
<Property Name= "TargetPlatformsToSkipTests" Value= "$(PlatformsToSkipTests)" />
2022-07-11 09:50:47 -04:00
<Property Name= "CookedEditorPlatformsToSkipTests" Value= "$(PlatformsToSkipTests)" />
2021-05-13 20:20:15 -04:00
<Property Name= "EditorPlatformsToSkipBootTests" Value= "$(PlatformsToSkipTests)" />
<Property Name= "TargetPlatformsToSkipBootTests" Value= "$(PlatformsToSkipTests)" />
2022-07-11 09:50:47 -04:00
<Property Name= "CookedEditorPlatformsToSkipBootTests" Value= "$(PlatformsToSkipTests)" />
2021-05-13 20:20:15 -04:00
</Do>
2021-03-09 21:05:18 -04:00
<!-- Does this project require a dedicated server for testing? (not currently implemented!) -->
<Option Name= "DedicatedServer" DefaultValue= "false" Description= "Project uses a dedicated server" />
<!-- Customizations -->
2021-04-28 12:44:15 -04:00
<Option Name= "Versioned" Restrict= "true|false" DefaultValue= "false" Description= "Whether to embed changelist number into binaries" />
2021-03-09 21:05:18 -04:00
<Option Name= "SkipBuild" DefaultValue= "false" Description= "Whether to skip building" />
<Option Name= "SkipCook" DefaultValue= "false" Description= "Whether to skip cooking and packaging" />
<Option Name= "SkipPackage" DefaultValue= "false" Description= "Whether to skip packaging" />
<Option Name= "SkipPublish" DefaultValue= "false" Description= "Whether to skip cooking, packaging, publishing" />
<Option Name= "SkipTest" DefaultValue= "false" Description= "Whether to skip testing" />
<!-- Defines whether we always run a simple 'does it boot' test before running other tests. This can save a lot of time/repeated errors -->
<Option Name= "EditorBootTest" DefaultValue= "!$(SkipTest)" Description= "Run a simple boot test on the editor before other tests" />
<Option Name= "TargetBootTest" DefaultValue= "!$(SkipTest)" Description= "Run a simple boot test on target platforms before other tests" />
2022-07-11 09:50:47 -04:00
<Option Name= "CookedEditorBootTest" DefaultValue= "!$(SkipTest)" Description= "Run a simple boot test on cooked editor platforms before other tests" />
2021-03-09 21:05:18 -04:00
2021-11-03 10:26:04 -04:00
<Option Name= "FillEditorDDC" DefaultValue= "false" Description= "Whether to fill the editor DDC before running any editor tests" />
2021-05-13 20:20:15 -04:00
<Option Name= "EditorTestList" DefaultValue= "$(DefaultEditorTestList)" Description= "Tests to run on the editor. Test1+Test2 etc" />
2021-03-09 21:05:18 -04:00
<Option Name= "TargetTestList" DefaultValue= "$(DefaultTargetTestList)" Description= "Tests to run on the target platform(s). Test1+Test2 etc" />
2022-07-11 09:50:47 -04:00
<Option Name= "CookedEditorTestList" DefaultValue= "$(DefaultCookedEditorTestList)" Description= "Tests to run on the cooked editor. Test1+Test2 etc" />
2021-05-13 20:20:15 -04:00
<Option Name= "EditorPlatformsToSkipBootTests" DefaultValue= "$(EditorPlatformsToSkipTests)" Description= "Editor platforms that should skip boot tests." />
<Option Name= "TargetPlatformsToSkipBootTests" DefaultValue= "$(TargetPlatformsToSkipTests)" Description= "Target platforms that should skip boot tests." />
2022-07-11 09:50:47 -04:00
<Option Name= "CookedEditorPlatformsToSkipBootTests" DefaultValue= "$(CookedEditorPlatformsToSkipTests)" Description= "Cooked editor platforms that should skip boot tests." />
2021-03-09 21:05:18 -04:00
<!-- Settings files that can be overriden -->
<Option Name= "PathSettingsFile" DefaultValue= "Inc/PathSettings.xml" Description= "Path settings to use" />
<Option Name= "GauntletSettingsFile" DefaultValue= "Inc/GauntletSettings.xml" Description= "Gauntlet settings to use" />
2021-08-18 13:58:57 -04:00
2023-03-13 09:32:52 -04:00
<!-- Annotations notif settings -->
<Option Name= "AnnotationsTarget" DefaultValue= "" Description= "Set annotations target" />
<Option Name= "AnnotationsPlatforms" DefaultValue= "" Description= "List of platforms that require annotations" />
<Option Name= "AnnotationsTests" DefaultValue= "" Description= "List of tests that require annotations" />
2021-03-09 21:05:18 -04:00
<!-- Some common properties -->
<Include Script= "Inc/CommonProperties.xml" />
<!-- Common settings but can be overidden -->
<Include Script= "$(PathSettingsFile)" />
<Include Script= "$(GauntletSettingsFile)" />
<!-- At this point we have all options so calculate a few things -->
<!-- Validate that the project exists -->
2021-03-11 23:26:40 -04:00
<Error Message= "ProjectName and ProjectPath must be specified" If= "'$(ProjectName)' == 'None' or '$(ProjectPath)' == 'None'" />
2021-03-09 21:05:18 -04:00
<Property Name= "TargetProject" Value= "$(ProjectPath)/$(ProjectName).uproject" />
<Error Message= "Project file $(TargetProject) does not exist" If= "!Exists('$(TargetProject)')" />
2021-12-10 17:46:49 -05:00
<!-- If the user didn't supply a TargetName then use the ProjectName -->
<Property Name= "TargetName" Value= "$(ProjectName)" If= "'$(TargetName)' == ''" />
2021-07-21 21:54:44 -04:00
<Property Name= "EditorTargetName" Value= "$(ProjectName)Editor" If= "'$(EditorTargetName)' == ''" />
2022-07-11 09:50:47 -04:00
<Property Name= "CookedEditorTargetName" Value= "$(ProjectName)CookedEditor" If= "'$(CookedEditorTargetName)' == ''" />
2021-03-09 21:05:18 -04:00
<!-- If skip test is true, add all target platforms to the "do not test" list -->
<Do If= "$(SkipTest)" >
2021-05-13 20:20:15 -04:00
<Property Name= "EditorPlatformsToSkipTests" Value= "$(EditorPlatforms)" />
<Property Name= "TargetPlatformsToSkipTests" Value= "$(TargetPlatforms)" />
2022-07-11 09:50:47 -04:00
<Property Name= "CookedEditorPlatformsToSkipTests" Value= "$(CookedEditorPlatforms)" />
2021-05-13 20:20:15 -04:00
<Property Name= "EditorPlatformsToSkipBootTests" Value= "$(EditorPlatformsToSkipTests)" />
<Property Name= "TargetPlatformsToSkipBootTests" Value= "$(TargetPlatformsToSkipTests)" />
2022-07-11 09:50:47 -04:00
<Property Name= "CookedEditorPlatformsToSkipBootTests" Value= "$(CookedEditorPlatformsToSkipTests)" />
2021-03-09 21:05:18 -04:00
</Do>
<!-- If skip packaging is true, add all target platforms to the "do not test" list -->
<Do If= "$(SkipPackage)" >
<Property Name= "PlatformsToSkipPackaging" Value= "$(EditorPlatforms)+$(TargetPlatforms)" />
</Do>
2021-03-12 00:44:40 -04:00
<Do If= "$(UseIncrementalAgents)" >
2022-08-24 16:04:24 -04:00
<Property Name= "ExtraToolCompileArguments" Value= "-allmodules -nodebuginfo -2019 -Strict -WarningsAsErrors" />
<Property Name= "ExtraEditorCompileArguments" Value= "-allmodules -nodebuginfo -2019 -Strict -WarningsAsErrors" />
2021-03-12 00:44:40 -04:00
<Property Name= "ExtraTargetCompileArguments" Value= "-nodebuginfo -WarningsAsErrors" />
</Do>
2021-03-09 21:05:18 -04:00
<!-- Detect the type of the client based on the target name -->
<Property Name= "TargetType" Value= "Game" />
<Property Name= "TargetType" Value= "Client" If= "Contains('$(TargetName)', 'Client')" />
2023-03-13 11:35:43 -04:00
<!-- Sanitize node title for test name that include ':' ie: 'Runtest=Group:Animation' => 'Runtest=Group_Animation' -->
<Macro Name= "SanitizeTestNameTitle" >
<!-- Expect a Property named "TestNameTitle" to be defined beforehand -->
<Do If= "Contains('$(TestNameTitle)', ':')" >
<Property Name= "Left" Value= "" />
<Property Name= "Right" Value= "" />
<Regex Pattern= "(.*):(.*)" Capture= "Left;Right" Input= "$(TestNameTitle)" />
<Property Name= "TestNameTitle" Value= "$(Left)_$(Right)" />
</Do>
</Macro>
2021-03-09 21:05:18 -04:00
<!-- These properties will be filled in with nodes that are generated based on options -->
<Property Name= "GeneratedToolNodes" Value= "" />
<Property Name= "GeneratedEditorTestNodes" Value= "" />
<Property Name= "GeneratedTargetNodes" Value= "" />
<Property Name= "GeneratedTargetTestNodes" Value= "" />
2022-07-11 09:50:47 -04:00
<Property Name= "GeneratedCookedEditorNodes" Value= "" />
<Property Name= "GeneratedCookedEditorTestNodes" Value= "" />
2021-03-09 21:05:18 -04:00
<!-- Do all editor steps under a single agent as the things that can be done in parallel probably aren't worth the overhead -->
<ForEach Name= "EditorPlatform" Values= "$(RequiredEditorPlatforms)" Separator= "+" >
<!-- Set Agent Types -->
<Property Name= "HostAgentType" Value= "$(EditorPlatform)" />
2021-03-11 23:26:40 -04:00
<!-- Use incremental agents for building? -->
<Property Name= "HostAgentType" Value= "Incremental$(HostAgentType)" If= "$(UseIncrementalAgents)" />
2021-03-09 21:05:18 -04:00
<Property Name= "TestAgentType" Value= "Test$(EditorPlatform)" />
2021-04-12 09:36:42 -04:00
<!-- Use overrides for agent types? -->
<Property Name= "HostAgentType" Value= "$(AgentOverride)" If= "'$(AgentOverride)' != ''" />
<Property Name= "TestAgentType" Value= "$(TestAgentOverride)" If= "'$(TestAgentOverride)' != ''" />
2021-03-09 21:05:18 -04:00
<!-- Test nodes for this editor platform -->
<Property Name= "PlatformEditorTestNodes" Value= "" />
<Agent Name= "Build $(ProjectName)Editor $(EditorPlatform)" Type= "$(HostAgentType)" >
2021-04-28 12:44:15 -04:00
<!-- Update the Version.h and Build.version files if we're making a formal build on a build machine -->
2023-01-13 13:36:19 -05:00
<Node Name= "$(PreNodeName)Update Version Files $(EditorPlatform)" >
2021-04-28 12:44:15 -04:00
<SetVersion Change= "$(Change)" Branch= "$(EscapedBranch)" If= "$(Versioned) and $(IsBuildMachine)" />
</Node>
2021-03-09 21:05:18 -04:00
<!-- First generate nodes to build the required tools (e.g. UHT, ShaderCompiler, Editor -->
2023-01-13 13:36:19 -05:00
<Node Name= "$(PreNodeName)Compile Tools $(EditorPlatform)" Requires= "$(PreNodeName)Update Version Files $(EditorPlatform)" >
2021-08-18 13:58:57 -04:00
<Compile Target= "ShaderCompileWorker" Platform= "$(EditorPlatform)" Configuration= "Development" Arguments= "$(GenericCompileArguments)" />
<Compile Target= "UnrealPak" Platform= "$(EditorPlatform)" Configuration= "Development" Arguments= "$(GenericCompileArguments)" />
<Compile Target= "CrashReportClient" Platform= "$(EditorPlatform)" Configuration= "Shipping" Arguments= "$(GenericCompileArguments)" />
<Compile Target= "CrashReportClientEditor" Platform= "$(EditorPlatform)" Configuration= "Shipping" Arguments= "$(GenericCompileArguments)" />
2021-11-18 14:37:34 -05:00
<Do If= "$(WithRemoteExecWorkers)" >
<Compile Target= "BaseTextureBuildWorker" Platform= "$(EditorPlatform)" Configuration= "Development" Arguments= "-project="$(RootDir)/$(TargetProject)" $(GenericCompileArguments)" />
<Do If= "'$(EditorPlatform)' == 'Win64'" >
2022-01-31 04:36:25 -05:00
<ForEach Name= "TargetPlatform" Values= "PS4+PS5+Switch+XboxOneGDK+XB1+XSX" Separator= "+" >
2021-11-18 14:37:34 -05:00
<Compile Target= "$(TargetPlatform)TextureBuildWorker" Platform= "$(EditorPlatform)" Configuration= "Development" Arguments= "-project="$(RootDir)/$(TargetProject)" $(GenericCompileArguments)" If= "ContainsItem('$(TargetPlatforms)', '$(TargetPlatform)', '+')" />
</ForEach>
</Do>
</Do>
2023-04-19 16:55:45 -04:00
<Compile Target= "UnrealInsights" Platform= "$(EditorPlatform)" Configuration= "$(UnrealInsightsBuildConfiguration)" Arguments= "$(GenericCompileArguments)" If= "$(IncludeUnrealInsightsInToolCompile)" />
2023-01-31 18:02:13 -05:00
<Compile Target= "EpicWebHelper" Platform= "$(EditorPlatform)" Configuration= "Shipping" Arguments= "$(GenericCompileArguments)" If= "$(IncludeEpicWebHelperInToolCompile)" />
2021-03-09 21:05:18 -04:00
</Node>
2023-05-30 15:34:34 -04:00
<Property Name= "CompileEditor" Value= "$(PreNodeName)Compile Editor $(EditorPlatform)" />
<Node Name= "$(CompileEditor)" Requires= "$(PreNodeName)Compile Tools $(EditorPlatform)" >
<Switch >
<Case If= "$(IsContentOnlyProject)" >
<Command Name= "BuildCookRun" Arguments= "-project="$(RootDir)/$(TargetProject)" -platform=$(EditorPlatform) -configuration=Development -build -notools -ubtargs="$(GenericCompileArguments) $(ExtraEditorCompileArguments)"" />
<Tag Files= "$(RootDir)/$(ProjectPath)/Binaries/..." Filter= "$(EditorTargetName).target" With= "#$(CompileEditor)" />
<TagReceipt Files= "#$(CompileEditor)" BuildProducts= "true" With= "#$(CompileEditor)" />
</Case>
<Default >
<Compile Target= "$(EditorTargetName)" Platform= "$(EditorPlatform)" Configuration= "Development" Arguments= "$(GenericCompileArguments) $(ExtraEditorCompileArguments)" />
</Default>
</Switch>
2021-03-09 21:05:18 -04:00
</Node>
2022-07-11 09:50:47 -04:00
<!-- Cooked editor target -->
2023-01-13 13:36:19 -05:00
<Node Name= "$(PreNodeName)Compile CookedEditor $(EditorPlatform)" Requires= "$(PreNodeName)Compile Tools $(EditorPlatform)" >
2022-07-11 09:50:47 -04:00
<ForEach Name= "Config" Values= "$(CookedEditorConfigurations)" Separator= "+" >
<Compile Target= "$(CookedEditorTargetName)" Platform= "$(EditorPlatform)" Configuration= "$(Config)" Arguments= "$(GenericCompileArguments) $(ExtraEditorCompileArguments)" />
</ForEach>
</Node>
2021-03-09 21:05:18 -04:00
<!-- Add these nodes to our dependency list -->
2023-05-30 15:34:34 -04:00
<Property Name= "GeneratedToolNodes" Value= "$(CompileEditor);$(PreNodeName)Compile Tools $(EditorPlatform)" If= "!$(SkipBuild)" />
2022-07-11 09:50:47 -04:00
<!-- Editor Labels -->
2023-01-13 13:36:19 -05:00
<Label Category= "Editors" Name= "$(PreLabelName)Editor $(EditorPlatform)" Requires= "$(GeneratedToolNodes)" />
2021-03-09 21:05:18 -04:00
</Agent>
<Agent Name= "Test $(ProjectName)Editor $(EditorPlatform)" Type= "$(TestAgentType)" >
<!-- Prerequisites for the editor test to run -->
<Property Name= "TestPrerequisites" Value= "$(GeneratedToolNodes)" />
<!-- Declare a boot test for the editor -->
2023-01-13 13:36:19 -05:00
<Property Name= "PlatformBootTestNodeName" Value= "$(PreNodeName)Editor $(EditorPlatform) Test=BootTest" />
2021-03-09 21:05:18 -04:00
<Do If= "'$(AutomationReportOutputDirectory)' != ''" >
<Property Name= "OutputFragmentPath" Value= "$(EditorPlatform)Editor/UE.EditorBootTest" />
<Property Name= "OutputReportPath" Value= "$(AutomationReportOutputDirectory)/$(OutputFragmentPath)" />
<Property Name= "GauntletReportArgs" Value= "-logdir="$(OutputReportPath)" -artifactname=Gauntlet -ReportExportPath="$(OutputReportPath)"" />
<Property Name= "GauntletReportArgs" Value= "$(GauntletReportArgs) -ReportURL="$(AutomationReportUrl)/$(OutputFragmentPath)/"" If= "'$(AutomationReportUrl)' != ''" />
</Do>
2023-03-13 09:32:52 -04:00
<!-- Annotations -->
<Property Name= "NodeAnnotations" Value= "" />
<Property Name= "NodeAnnotations" Value= "Workflow=$(AnnotationsTarget)" If= "ContainsItem('$(AnnotationsPlatforms)', '$(EditorPlatform)Editor', ';') and ContainsItem('$(AnnotationsTests)', 'BootTest', ';')" />
2023-05-30 15:34:34 -04:00
<Node Name= "$(PlatformBootTestNodeName)" Requires= "$(TestPrerequisites)" Annotations= "$(NodeAnnotations)" >
2021-03-09 21:05:18 -04:00
<Command Name= "RunUnreal" Arguments= "-project=$(TargetProject) -build=Editor -test="UE.EditorBootTest" $(GauntletEditorTestArgs) $(GauntletReportArgs)" />
</Node>
2023-01-13 13:36:19 -05:00
<Property Name= "ProjectEditorDDC" Value= "$(PreNodeName)Editor DDC $(EditorPlatform)" />
2021-11-03 10:26:04 -04:00
<Node Name= "$(ProjectEditorDDC)" Requires= "$(GeneratedToolNodes)" >
<Property Name= "DDCTargetPlatform" Value= "$(EditorPlatform)" />
<Property Name= "DDCTargetPlatform" Value= "Windows" If= "'$(DDCTargetPlatform)' == 'Win64'" />
<Commandlet Name= "DerivedDataCache" Project= "$(RootDir)/$(TargetProject)" Arguments= "-fill -targetplatform=$(DDCTargetPlatform)Editor" />
</Node>
2021-03-09 21:05:18 -04:00
<!-- Link the boot test in to the prerequisites and generated nodes if its enabled -->
<Do If= "$(EditorBootTest)" >
<Property Name= "TestPrerequisites" Value= "$(TestPrerequisites);$(PlatformBootTestNodeName)" />
</Do>
<!-- Now generate a test node for each editor test in the list -->
<ForEach Name= "TestName" Values= "$(EditorTestList)" Separator= "+" >
2023-03-13 11:35:43 -04:00
<Property Name= "TestNameTitle" Value= "$(TestName)" />
<Expand Name= "SanitizeTestNameTitle" />
2021-05-13 20:20:15 -04:00
<Do If= "'$(AutomationReportOutputDirectory)' != ''" >
2023-03-13 11:35:43 -04:00
<Property Name= "OutputFragmentPath" Value= "$(EditorPlatform)/Editor$(TestNameTitle)" />
2021-05-13 20:20:15 -04:00
<Property Name= "OutputReportPath" Value= "$(AutomationReportOutputDirectory)/$(OutputFragmentPath)" />
<Property Name= "GauntletReportArgs" Value= "-logdir="$(OutputReportPath)" -artifactname=Gauntlet -ReportExportPath="$(OutputReportPath)"" />
<Property Name= "GauntletReportArgs" Value= "$(GauntletReportArgs) -ReportURL="$(AutomationReportUrl)/$(OutputFragmentPath)/"" If= "'$(AutomationReportUrl)' != ''" />
</Do>
2023-03-13 11:35:43 -04:00
<Property Name= "TestNodeName" Value= "$(PreNodeName)Editor $(EditorPlatform) Test=$(TestNameTitle)" />
2023-03-13 09:32:52 -04:00
<Property Name= "NodeAnnotations" Value= "" />
<Property Name= "NodeAnnotations" Value= "Workflow=$(AnnotationsTarget)" If= "ContainsItem('$(AnnotationsPlatforms)', '$(EditorPlatform)Editor', ';') and ContainsItem('$(AnnotationsTests)', '$(TestName)', ';')" />
<Node Name= "$(TestNodeName)" Requires= "$(TestPrerequisites)" Annotations= "$(NodeAnnotations)" >
2021-03-09 21:05:18 -04:00
<Command Name= "RunUnreal" Arguments= "-project=$(TargetProject) -build=Editor -test="$(TestName)" $(GauntletReportArgs) $(GauntletEditorTestArgs)" />
</Node>
<!-- Add each test node to our generated list -->
2021-07-29 17:57:28 -04:00
<Property Name= "PlatformEditorTestNodes" Value= "$(PlatformEditorTestNodes);$(TestNodeName)" />
2021-03-09 21:05:18 -04:00
</ForEach>
<!-- Create Labels -->
2023-01-13 13:36:19 -05:00
<Label Category= "Editors" Name= "$(PreLabelName)Editor DDC $(EditorPlatform)" Requires= "$(ProjectEditorDDC)" />
2021-03-09 21:05:18 -04:00
<!-- If this editor was requested (as opposed to being required due to target platforms) then link in the test nodes and set up labels -->
2021-05-13 20:20:15 -04:00
<Do If= "ContainsItem('$(EditorPlatforms)', '$(EditorPlatform)', '+') and !ContainsItem('$(EditorPlatformsToSkipTests)', '$(EditorPlatform)', '+')" >
2023-01-13 13:36:19 -05:00
<Label Category= "Tests" Name= "$(PreLabelName)BootTest Editor $(EditorPlatform)" Requires= "$(PlatformBootTestNodeName)" />
<Label Category= "Tests" Name= "$(PreLabelName)Test Editor $(EditorPlatform)" Requires= "$(PlatformEditorTestNodes)" />
2021-07-29 17:57:28 -04:00
<Property Name= "GeneratedEditorTestNodes" Value= "$(GeneratedEditorTestNodes);$(PlatformBootTestNodeName)" If= "$(EditorBootTest)" />
2021-11-03 10:26:04 -04:00
<Property Name= "GeneratedEditorTestNodes" Value= "$(GeneratedEditorTestNodes);$(ProjectEditorDDC)" If= "$(FillEditorDDC)" />
2021-07-27 13:39:45 -04:00
<Property Name= "GeneratedEditorTestNodes" Value= "$(GeneratedEditorTestNodes);$(PlatformEditorTestNodes)" />
2021-03-09 21:05:18 -04:00
</Do>
</Agent>
</ForEach>
2022-07-11 09:50:47 -04:00
<!-- Cooked editor Targets -->
<ForEach Name= "EditorPlatform" Values= "$(CookedEditorPlatforms)" Separator= "+" >
<Property Name= "HostAgentType" Value= "$(EditorPlatform)" />
<Property Name= "TestAgentType" Value= "Test$(EditorPlatform)" />
<Property Name= "TestAgentType" Value= "$(TestAgentOverride)" If= "'$(TestAgentOverride)' != ''" />
2022-09-07 09:51:36 -04:00
<Property Name= "EditorPlatformPath" Value= "$(EditorPlatform)" />
<Property Name= "EditorPlatformPath" Value= "Windows" If= "'$(EditorPlatform)' == 'Win64'" />
2023-01-13 13:36:19 -05:00
<Property Name= "PlatformPublishNodeName" Value= "$(PreNodeName)Publish CookedEditor $(EditorPlatform)" />
2022-07-11 09:50:47 -04:00
2023-01-13 13:36:19 -05:00
<Property Name= "CookedEditorCookRequirements" Value= "$(PreNodeName)Compile Tools $(EditorPlatform);$(PreNodeName)Compile Editor $(EditorPlatform);$(PreNodeName)Compile CookedEditor $(EditorPlatform)" />
2022-07-11 09:50:47 -04:00
<Property Name= "CookedEditorCookerArgs" Value= "-project=$(TargetProject) -platform=$(EditorPlatform) -compressed $(ExtraCookArguments)" />
<Agent Name= "CookedEditor Cook and Publish $(EditorPlatform)" Type= "$(HostAgentType)" >
<!-- Cook Editor -->
2023-01-13 13:36:19 -05:00
<Node Name= "$(PreNodeName)Cook CookedEditor $(EditorPlatform)" Requires= "$(CookedEditorCookRequirements)" >
2022-07-11 09:50:47 -04:00
<Command Name= "MakeCookedEditor" Arguments= "-cook $(CookedEditorCookerArgs)" />
</Node>
<!-- Stage CookedEditor -->
<Property Name= "CookedEditorStageArgs" Value= "-skipcook -stage -pak -platform=$(EditorPlatform) -clientconfig=$(CookedEditorConfigurations) -StagingDirectory="$(ProjectOutputDirectory)"" />
<Property Name= "CookedEditorStageRequirements" Value= "$(CookedEditorCookRequirements)" />
2023-01-13 14:21:12 -05:00
<Property Name= "CookedEditorStageRequirements" Value= "$(CookedEditorStageRequirements);$(PreNodeName)Cook CookedEditor $(EditorPlatform)" If= "!$(SkipCook)" />
2022-07-11 09:50:47 -04:00
2023-01-13 14:21:12 -05:00
<Node Name= "$(PreNodeName)Stage CookedEditor $(EditorPlatform)" Requires= "$(CookedEditorStageRequirements)" >
2022-07-11 09:50:47 -04:00
<Command Name= "MakeCookedEditor" Arguments= "-project=$(TargetProject) $(CookedEditorStageArgs)" />
</Node>
<!-- Publish CookedEditor -->
2023-01-13 14:21:12 -05:00
<Node Name= "$(PreNodeName)Publish CookedEditor $(EditorPlatform)" Requires= "$(PreNodeName)Stage CookedEditor $(EditorPlatform)" >
2022-09-07 09:51:36 -04:00
<Log Message= "Copying to $(NetworkOutputDirectory)/$(EditorPlatformPath)CookedEditor" />
2022-07-11 09:50:47 -04:00
<Do If= "!$(SkipPublish)" >
2022-09-07 09:51:36 -04:00
<Copy Files= "..." From= "$(ProjectOutputDirectory)/$(EditorPlatformPath)CookedEditor" To= "$(NetworkOutputDirectory)/$(EditorPlatformPath)CookedEditor" />
2022-07-11 09:50:47 -04:00
</Do>
</Node>
<!-- Aggregate Nodes requirements -->
2023-01-13 13:36:19 -05:00
<Property Name= "GeneratedCookedEditorNodes" Value= "$(PreNodeName)Compile CookedEditor $(EditorPlatform)" If= "!$(SkipBuild)" />
<Property Name= "GeneratedCookedEditorNodes" Value= "$(GeneratedCookedEditorNodes);$(PreNodeName)Cook CookedEditor $(EditorPlatform)" If= "!$(SkipCook)" />
2022-07-11 09:50:47 -04:00
<Property Name= "GeneratedCookedEditorNodes" Value= "$(GeneratedCookedEditorNodes);$(PlatformPublishNodeName)" If= "!$(SkipPublish) And $(PublishBuilds)" />
</Agent>
<!-- Tests -->
<Agent Name= "Test $(ProjectName)CookedEditor $(EditorPlatform)" Type= "$(TestAgentType)" >
2022-09-30 19:25:03 -04:00
<Property Name= "CustomModuleRoleArg" Value= "-CustomModuleRoles=$(CookedEditorTargetName):CookedEditor" />
2022-07-11 09:50:47 -04:00
<!-- Prerequisites for the editor test to run -->
<Property Name= "TestPrerequisites" Value= "$(GeneratedCookedEditorNodes)" />
<Property Name= "TestPrerequisites" Value= "$(TestPrerequisites);$(PlatformPublishNodeName)" If= "!$(PublishBuilds)" />
<!-- Declare a boot test for the editor -->
2023-01-13 13:36:19 -05:00
<Property Name= "PlatformBootTestNodeName" Value= "$(PreNodeName)CookedEditor $(EditorPlatform) Test=BootTest" />
2022-07-11 09:50:47 -04:00
<Do If= "'$(AutomationReportOutputDirectory)' != ''" >
<Property Name= "OutputFragmentPath" Value= "$(EditorPlatform)Editor/UE.CookedEditorBootTest" />
<Property Name= "OutputReportPath" Value= "$(AutomationReportOutputDirectory)/$(OutputFragmentPath)" />
<Property Name= "GauntletReportArgs" Value= "-logdir="$(OutputReportPath)" -artifactname=Gauntlet -ReportExportPath="$(OutputReportPath)"" />
<Property Name= "GauntletReportArgs" Value= "$(GauntletReportArgs) -ReportURL="$(AutomationReportUrl)/$(OutputFragmentPath)/"" If= "'$(AutomationReportUrl)' != ''" />
</Do>
2023-03-13 09:32:52 -04:00
<Property Name= "NodeAnnotations" Value= "" />
<Property Name= "NodeAnnotations" Value= "Workflow=$(AnnotationsTarget)" If= "ContainsItem('$(AnnotationsPlatforms)', '$(EditorPlatform)Editor', ';') and ContainsItem('$(AnnotationsTests)', 'BootTest', ';')" />
<Node Name= "$(PlatformBootTestNodeName)" Requires= "$(TestPrerequisites)" Annotations= "$(NodeAnnotations)" >
2022-09-30 19:25:03 -04:00
<Command Name= "RunUnreal" Arguments= "-project=$(TargetProject) -build="$(NetworkOutputDirectory)/$(EditorPlatformPath)CookedEditor" -test="UE.EditorBootTest" $(GauntletCookedEditorTestArgs) $(CustomModuleRoleArg) $(GauntletReportArgs)" />
2022-07-11 09:50:47 -04:00
</Node>
<!-- Link the boot test in to the prerequisites and generated nodes if its enabled -->
<Do If= "$(CookedEditorBootTest)" >
<Property Name= "TestPrerequisites" Value= "$(TestPrerequisites);$(PlatformBootTestNodeName)" />
</Do>
<!-- Now generate a test node for each editor test in the list -->
<Property Name= "PlatformCookedEditorTestNodes" Value= "" />
<ForEach Name= "TestName" Values= "$(CookedEditorTestList)" Separator= "+" >
2023-03-13 11:35:43 -04:00
<Property Name= "TestNameTitle" Value= "$(TestName)" />
<Expand Name= "SanitizeTestNameTitle" />
2022-07-11 09:50:47 -04:00
<Do If= "'$(AutomationReportOutputDirectory)' != ''" >
2023-03-13 11:35:43 -04:00
<Property Name= "OutputFragmentPath" Value= "$(EditorPlatform)/Editor$(TestNameTitle)" />
2022-07-11 09:50:47 -04:00
<Property Name= "OutputReportPath" Value= "$(AutomationReportOutputDirectory)/$(OutputFragmentPath)" />
<Property Name= "GauntletReportArgs" Value= "-logdir="$(OutputReportPath)" -artifactname=Gauntlet -ReportExportPath="$(OutputReportPath)"" />
<Property Name= "GauntletReportArgs" Value= "$(GauntletReportArgs) -ReportURL="$(AutomationReportUrl)/$(OutputFragmentPath)/"" If= "'$(AutomationReportUrl)' != ''" />
</Do>
2023-03-13 11:35:43 -04:00
<Property Name= "TestNodeName" Value= "$(PreNodeName)CookedEditor $(EditorPlatform) Test=$(TestNameTitle)" />
2023-03-13 09:32:52 -04:00
<Property Name= "NodeAnnotations" Value= "" />
<Property Name= "NodeAnnotations" Value= "Workflow=$(AnnotationsTarget)" If= "ContainsItem('$(AnnotationsPlatforms)', '$(EditorPlatform)Editor', ';') and ContainsItem('$(AnnotationsTests)', '$(TestName)', ';')" />
<Node Name= "$(TestNodeName)" Requires= "$(TestPrerequisites)" Annotations= "$(NodeAnnotations)" >
2022-09-30 19:25:03 -04:00
<Command Name= "RunUnreal" Arguments= "-project=$(TargetProject) -build="$(NetworkOutputDirectory)/$(EditorPlatformPath)CookedEditor" -test="$(TestName)" $(GauntletReportArgs) $(CustomModuleRoleArg) $(GauntletCookedEditorTestArgs)" />
2022-07-11 09:50:47 -04:00
</Node>
<!-- Add each test node to our generated list -->
<Property Name= "PlatformCookedEditorTestNodes" Value= "$(PlatformCookedEditorTestNodes);$(TestNodeName)" />
</ForEach>
<!-- Create Labels -->
<!-- If this cooked editor was requested (as opposed to being required due to target platforms) then link in the test nodes and set up labels -->
<Do If= "ContainsItem('$(CookedEditorPlatforms)', '$(EditorPlatform)', '+') and !ContainsItem('$(CookedEditorPlatformsToSkipTests)', '$(EditorPlatform)', '+')" >
2023-01-13 13:36:19 -05:00
<Label Category= "Tests" Name= "$(PreLabelName)BootTest CookedEditor $(EditorPlatform)" Requires= "$(PlatformBootTestNodeName)" />
<Label Category= "Tests" Name= "$(PreLabelName)Test CookedEditor $(EditorPlatform)" Requires= "$(PlatformCookedEditorTestNodes)" />
2022-07-11 09:50:47 -04:00
<Property Name= "GeneratedCookedEditorTestNodes" Value= "$(GeneratedCookedEditorTestNodes);$(PlatformBootTestNodeName)" If= "$(CookedEditorBootTest)" />
<Property Name= "GeneratedCookedEditorTestNodes" Value= "$(GeneratedCookedEditorTestNodes);$(PlatformCookedEditorTestNodes)" />
</Do>
</Agent>
<!-- Add to Editor Labels -->
2023-01-13 13:36:19 -05:00
<Label Category= "Editors" Name= "$(PreLabelName)CookedEditor $(EditorPlatform)" Requires= "$(GeneratedCookedEditorNodes)" />
2022-07-11 09:50:47 -04:00
</ForEach>
2021-07-27 15:36:56 -04:00
<!-- Now, for each platform we build, cook, stage, package, publish, and test -->
2021-03-09 21:05:18 -04:00
<ForEach Name= "TargetPlatform" Values= "$(TargetPlatforms)" Separator= "+" >
<!-- Declare type of host required to build & cook this platform -->
<Property Name= "HostAgentType" Value= "Win64" />
2021-03-11 23:26:40 -04:00
<Property Name= "HostAgentType" Value= "Mac" If= "'$(TargetPlatform)' == 'Mac' or '$(TargetPlatform)' == 'IOS' or '$(TargetPlatform)' == 'tvOS'" />
2022-10-11 11:25:30 -04:00
<Property Name= "HostAgentType" Value= "Linux" If= "'$(TargetPlatform)' == 'Linux'" />
2022-10-07 19:45:18 -04:00
<!-- On consoles we can use agents with devkit setup, but locally hosted tests need a Test agent -->
<Property Name= "TestAgentType" Value= "$(TargetPlatformTestAgentOverride)" />
<Property Name= "TestAgentType" Value= "Test$(HostAgentType)" If= "'$(TargetPlatform)' == 'Win64' or '$(TargetPlatform)' == 'Mac' or '$(TargetPlatform)' == 'Linux'" />
2021-03-09 21:05:18 -04:00
2022-08-23 17:02:18 -04:00
<Property Name= "IsMobilePlatform" Value= "'$(TargetPlatform)' == 'Android' or '$(TargetPlatform)' == 'IOS'" />
2021-03-11 23:26:40 -04:00
<!-- Use incremental agents for building? -->
2021-12-03 02:42:56 -05:00
<Property Name= "CompileAgentType" Value= "$(HostAgentType)" />
<Property Name= "CompileAgentType" Value= "Incremental$(HostAgentType)" If= "$(UseIncrementalAgents)" />
2021-03-11 23:26:40 -04:00
2021-04-12 09:36:42 -04:00
<!-- Use agent types from override? -->
2021-12-03 02:42:56 -05:00
<Property Name= "CompileAgentType" Value= "$(AgentOverride)" If= "'$(AgentOverride)' != ''" />
<!-- Use the same agent type for packaging as compilation -->
<Property Name= "PackageAgentType" Value= "$(CompileAgentType)" />
<Property Name= "CompileAgentType" Value= "$(ClientCompileAgentOverride)" If= "'$(ClientCompileAgentOverride)' != ''" />
2021-04-12 09:36:42 -04:00
<Property Name= "TestAgentType" Value= "$(TestAgentOverride)" If= "'$(TestAgentOverride)' != ''" />
2021-03-09 21:05:18 -04:00
<!-- Building and cooking will require these nodes from the appropriate host. They should have been built above... -->
2023-01-13 13:36:19 -05:00
<Property Name= "PlatformToolsNodeName" Value= "$(PreNodeName)Compile Tools $(HostAgentType)" />
<Property Name= "PlatformEditorNodeName" Value= "$(PreNodeName)Compile Editor $(HostAgentType)" />
2021-03-09 21:05:18 -04:00
<!-- Define these names up front as we use some of them several times -->
2023-01-13 13:36:19 -05:00
<Property Name= "PlatformAgentName" Value= "$(ProjectName) $(TargetPlatform)" />
<Property Name= "PlatformCompileNodeName" Value= "$(PreNodeName)Compile $(TargetPlatform)" />
2021-12-03 01:31:49 -05:00
<Property Name= "UploadSymbolsNodeName" Value= "" />
2023-01-13 13:36:19 -05:00
<Property Name= "UploadSymbolsNodeName" Value= "$(PreNodeName)Upload Symbols $(TargetPlatform)" If= "'$(SymbolServerPath)' != ''" />
<Property Name= "PlatformCookNodeName" Value= "$(PreNodeName)Cook $(TargetPlatform)" />
<Property Name= "PlatformStageNodeName" Value= "$(PreNodeName)Stage $(TargetPlatform)" />
<Property Name= "PlatformPackageNodeName" Value= "$(PreNodeName)Package $(TargetPlatform)" />
<Property Name= "PlatformHashNodeName" Value= "$(PreNodeName)Hash $(TargetPlatform)" />
<Property Name= "PlatformPublishStagedNodeName" Value= "$(PreNodeName)Publish Staged $(TargetPlatform)" />
<Property Name= "PlatformPublishPackagedNodeName" Value= "$(PreNodeName)Publish Packaged $(TargetPlatform)" />
2021-03-09 21:05:18 -04:00
<!-- Set CookPlatform since it isn't always the same as the target -->
<Property Name= "CookPlatform" Value= "$(TargetPlatform)" />
<Property Name= "CookPlatform" Value= "Windows" If= "'$(TargetPlatform)' == 'Win64'" />
2021-03-28 22:51:06 -04:00
<Property Name= "CookPlatform" Value= "$(CookPlatform)_ETC2" If= "'$(TargetPlatform)' == 'Android'" />
2021-03-09 21:05:18 -04:00
<Property Name= "CookPlatform" Value= "$(CookPlatform)Client" If= "'$(TargetType)' == 'Client'" />
2021-03-28 22:51:06 -04:00
<Property Name= "BCRCookFlavor" Value= "" If= "" />
<Property Name= "BCRCookFlavor" Value= "ETC2" If= "'$(TargetPlatform)' == 'Android'" />
2021-07-27 15:36:56 -04:00
2021-03-28 22:51:06 -04:00
<Property Name= "StagedPlatformFolder" Value= "$(CookPlatform)" />
<!-- <Property Name="StagedPlatformFolder" Value="$(StagedPlatformFolder)Client" If="'$(TargetType)' == 'Client'" /> -->
2021-07-27 15:36:56 -04:00
<!-- Hashing of staged data can only be done on Win64 hosts -->
<Property Name= "DoUnsyncHashing" Value= "$(HostAgentType) == 'Win64'" />
2021-12-03 01:31:49 -05:00
<!-- Default BuildCookRun args needed when staging/packaging/archiving this configuration -->
2022-08-23 17:02:18 -04:00
<Property Name= "BCRArgs" Value= "-project=$(TargetProject) -platform=$(TargetPlatform) -cookflavor="$(BCRCookFlavor)"" />
2021-12-03 01:31:49 -05:00
<Property Name= "BCRArgs" Value= "$(BCRArgs) -client" If= "'$(TargetType)' == 'Client'" />
<Property Name= "BCRArgs" Value= "$(BCRArgs) -server" If= "'$(DedicatedServer)'" />
2021-12-03 13:28:57 -05:00
<!-- Support additional stage and package arguments that are only active on some platforms -->
<Property Name= "StageAndPackageArguments" Value= "$(ExtraStageAndPackageArguments)" />
<Property Name= "StageAndPackageArguments" Value= "$(StageAndPackageArguments) $(TargetPlatformFilteredExtraStageAndPackageArguments)" If= "'$(TargetPlatformFilteredExtraStageAndPackageArgumentsFilter)' != '' and ContainsItem('$(TargetPlatformFilteredExtraStageAndPackageArgumentsFilter)', '$(TargetPlatform)', '+')" />
2022-08-23 17:02:18 -04:00
<Property Name= "PackageOnlyArguments" Value= "$(ExtraPackageOnlyArguments)" />
<Property Name= "PackageOnlyArguments" Value= "$(PackageOnlyArguments) -archive -archivedirectory="$(ProjectOutputDirectory)/$(StagedPlatformFolder)"" If= "$(IsMobilePlatform)" />
2021-07-27 15:36:56 -04:00
2021-03-09 21:05:18 -04:00
<!-- Build the client and if necessary a server -->
2021-12-03 02:42:56 -05:00
<Agent Name= "Compile $(PlatformAgentName)" Type= "$(CompileAgentType)" >
2021-07-27 15:36:56 -04:00
<!-- Compile -->
2023-05-30 15:34:34 -04:00
<Node Name= "$(PlatformCompileNodeName)" Requires= "$(PlatformToolsNodeName)" >
2022-09-09 18:19:11 -04:00
<Switch >
<Case If= "$(IsContentOnlyProject)" >
2023-05-05 14:34:42 -04:00
<Command Name= "BuildGame" Arguments= "$(BCRArgs) -configuration=$(TargetConfigurations) -notools -ubtargs="-BuildVersion=$(BuildVersion) $(GenericCompileArguments) $(ExtraTargetCompileArguments)"" />
2023-05-30 15:34:34 -04:00
<Tag Files= "$(RootDir)/$(ProjectPath)/Binaries/..." Filter= "$(TargetName).target" With= "#$(PlatformCompileNodeName)" />
<TagReceipt Files= "#$(PlatformCompileNodeName)" BuildProducts= "true" With= "#$(PlatformCompileNodeName)" />
2022-09-09 18:19:11 -04:00
</Case>
<Default >
<ForEach Name= "TargetConfiguration" Values= "$(TargetConfigurations)" Separator= "+" >
2023-05-05 14:34:42 -04:00
<Compile Target= "$(TargetName)" Platform= "$(TargetPlatform)" Configuration= "$(TargetConfiguration)" Arguments= "-BuildVersion="$(BuildVersion)" $(GenericCompileArguments) $(ExtraTargetCompileArguments)" />
2022-09-09 18:19:11 -04:00
<Do If= "'$(DedicatedServer)'" >
2023-05-05 14:34:42 -04:00
<Compile Target= "$(TargetName)Server" Platform= "Win64" Configuration= "$(TargetConfiguration)" Arguments= "-BuildVersion="$(BuildVersion)" $(GenericCompileArguments) $(ExtraTargetCompileArguments)" />
2022-09-09 18:19:11 -04:00
</Do>
</ForEach>
</Default>
</Switch>
2021-07-27 15:36:56 -04:00
</Node>
2021-03-09 21:05:18 -04:00
2021-12-03 01:31:49 -05:00
<!-- (Optional) Upload Symbols -->
<Do If= "'$(UploadSymbolsNodeName)' != ''" >
<Node Name= "$(UploadSymbolsNodeName)" Requires= "$(PlatformCompileNodeName)" >
<Log Message= "Uploading symbols to "$(SymbolServerPath)" ..." />
2023-05-05 14:34:42 -04:00
<SymStore Platform= "$(TargetPlatform)" Files= "#$(PlatformCompileNodeName)" StoreDir= "$(SymbolServerPath)/$(TargetPlatform)" Product= "$(TargetName)" BuildVersion= "$(BuildVersion)" />
2021-12-03 01:31:49 -05:00
</Node>
</Do>
</Agent>
<!-- Separate agent for cooking / staging, so the cook can happen in parallel with the client compile -->
2021-12-03 02:42:56 -05:00
<Agent Name= "Package $(PlatformAgentName)" Type= "$(PackageAgentType)" >
2021-12-03 01:31:49 -05:00
2021-07-27 15:36:56 -04:00
<!-- Cook -->
2021-12-03 02:42:56 -05:00
<Node Name= "$(PlatformCookNodeName)" Requires= "$(PlatformEditorNodeName)" Produces= "#$(PlatformCookNodeName) Complete" RunEarly= "true" >
2021-07-27 15:36:56 -04:00
<Property Name= "CookArgs" Value= "" />
2021-03-11 23:26:40 -04:00
<Property Name= "CookArgs" Value= "-MapIniSection=$(MapIniSection) $(CookPlatform)" If= "'$(MapIniSection)' != ''" />
2023-01-31 01:17:07 -05:00
<Cook Project= "$(TargetProject)" Platform= "$(CookPlatform)" TagOutput= "false" Arguments= "$(CookArgs) $(ExtraCookArguments)" />
2021-07-27 15:36:56 -04:00
</Node>
<!-- Stage -->
2023-05-30 15:34:34 -04:00
<Node Name= "$(PlatformStageNodeName)" Requires= "$(PlatformCompileNodeName);#$(PlatformCookNodeName) Complete" >
2022-08-23 17:02:18 -04:00
<Switch >
<Case If= "$(IsMobilePlatform)" >
<ForEach Name= "PackageConfiguration" Values= "$(PackageConfigurations)" Separator= "+" >
<Command Name= "BuildCookRun" Arguments= "$(BCRArgs) -configuration=$(PackageConfiguration) $(StageAndPackageArguments) -skipbuild -skipcook -stage -pak" />
</ForEach>
</Case>
<Default >
<Command Name= "BuildCookRun" Arguments= "$(BCRArgs) -configuration=$(PackageConfigurations) $(StageAndPackageArguments) -skipbuild -skipcook -stage -pak" />
</Default>
</Switch>
2021-07-27 15:36:56 -04:00
</Node>
<!-- Hash -->
<Node Name= "$(PlatformHashNodeName)" Requires= "$(PlatformStageNodeName)" >
<Do If= "$(DoUnsyncHashing)" >
2021-07-28 16:20:59 -04:00
<Spawn Exe= "$(RootDir)/Engine/Restricted/NotForLicensees/Binaries/Win64/unsync.exe" Arguments= "hash "$(ProjectOutputDirectory)/$(StagedPlatformFolder)" -v --buffered-files" />
2021-07-27 15:36:56 -04:00
</Do>
</Node>
2023-06-06 17:40:06 -04:00
<!-- (Optional) Publish to Cloud -->
<Property Name= "PlatformPublishStageDependencyName" Value= "$(PlatformHashNodeName)" />
2023-06-12 14:20:41 -04:00
<Do If= "$(PublishBuilds) and $(PublishCloudSnapshot) and '$(UE-CloudPublishHost)' != '' and '$(UE-CloudPublishNamespace)' != ''" >
2023-06-06 17:40:06 -04:00
<Property Name= "PlatformCloudPublishNodeName" Value= "$(PreNodeName)Cloud Publish $(TargetPlatform)" />
<Node Name= "$(PlatformCloudPublishNodeName)" Requires= "$(PlatformHashNodeName)" >
<ZenExportSnapshot Project= "$(TargetProject)" Platform= "$(CookPlatform)" DestinationStorageType= "Cloud" DestinationCloudHost= "$(UE-CloudPublishHost)" DestinationCloudNamespace= "$(UE-CloudPublishNamespace)" DestinationCloudIdentifier= "$(EscapedBranch)/$(BuildNamePath)" SnapshotDescriptorFile= "$(NetworkOutputDirectory)/$(StagedPlatformFolder)/SnapshotDescriptor.json" />
</Node>
<Property Name= "PlatformPublishStageDependencyName" Value= "$(PlatformCloudPublishNodeName)" />
2023-06-12 14:20:41 -04:00
</Do>
2021-07-27 15:36:56 -04:00
<!-- Publish (Staged) -->
2023-06-06 17:40:06 -04:00
<Node Name= "$(PlatformPublishStagedNodeName)" Requires= "$(PlatformPublishStageDependencyName)" >
2021-07-27 15:36:56 -04:00
<Copy Files= "..." From= "$(ProjectOutputDirectory)/$(StagedPlatformFolder)" To= "$(NetworkOutputDirectory)/$(StagedPlatformFolder)/Staged" />
2021-10-25 20:05:28 -04:00
<Copy Files= "..." From= "$(ShaderSymbolsDirectory)/*$(TargetPlatform)*" To= "$(NetworkOutputDirectory)/$(StagedPlatformFolder)/ShaderSymbols" />
2021-07-27 15:36:56 -04:00
</Node>
<!-- Package -->
<Node Name= "$(PlatformPackageNodeName)" Requires= "$(PlatformPublishStagedNodeName)" >
2022-08-23 17:02:18 -04:00
<ForEach Name= "PackageConfiguration" Values= "$(PackageConfigurations)" Separator= "+" >
<Command Name= "BuildCookRun" Arguments= "$(BCRArgs) -configuration=$(PackageConfiguration) $(StageAndPackageArguments) -skipbuild -skipcook -skipstage -skippak -package $(PackageOnlyArguments)" />
</ForEach>
2021-07-27 15:36:56 -04:00
</Node>
<!-- Publish (Packages) -->
<Node Name= "$(PlatformPublishPackagedNodeName)" Requires= "$(PlatformPackageNodeName)" >
2022-08-23 17:02:18 -04:00
<ForEach Name= "PackageConfiguration" Values= "$(PackageConfigurations)" Separator= "+" >
<Command Name= "BuildCookRun" Arguments= "$(BCRArgs) -configuration=$(PackageConfiguration) $(StageAndPackageArguments) -skipbuild -skipcook -skipstage -skippak -skippackage -archive -archivedirectory="$(NetworkOutputDirectory)/$(StagedPlatformFolder)/Packages"" />
</ForEach>
2021-07-27 15:36:56 -04:00
</Node>
</Agent>
2021-06-14 16:33:51 -04:00
2021-07-27 15:36:56 -04:00
<!-- Test Time! -->
<Property Name= "AllPlatformBootTestNodes" Value= "" />
<Property Name= "AllPlatformTestNodes" Value= "" />
2021-06-07 13:42:07 -04:00
<Agent Name= "Test $(PlatformAgentName)" Type= "$(TestAgentType)" >
2021-03-12 15:39:07 -04:00
<!-- Run through all configs -->
2021-03-11 23:26:40 -04:00
<ForEach Name= "TestConfiguration" Values= "$(TestConfigurations)" Separator= "+" >
2021-06-07 13:42:07 -04:00
<!-- Prerequisites for the test to run -->
2021-07-27 15:36:56 -04:00
<Property Name= "TestPrerequisites" Value= "$(PlatformPackageNodeName)" />
2021-07-29 20:22:51 -04:00
2021-03-13 00:08:03 -04:00
<!-- Create the - build argument for Gauntlet based on whether builds are local or on the network -->
2021-06-07 13:42:07 -04:00
<Property Name= "GauntletBuildArg" Value= "-build="$(ProjectOutputDirectory)"" />
2021-07-29 20:22:51 -04:00
<Do If= "'$(NetworkOutputDirectory)' != ''" >
<Property Name= "TestDirectory" Value= "$(NetworkOutputDirectory)" />
<Do If= "Exists('$(TestDirectory)/$(StagedPlatformFolder)/Packages/$(TestConfiguration)')" >
<Property Name= "TestDirectory" Value= "$(TestDirectory)/$(StagedPlatformFolder)/Packages/$(TestConfiguration)" />
</Do>
<Property Name= "GauntletBuildArg" Value= "-build="$(TestDirectory)"" />
</Do>
2021-10-13 12:32:22 -04:00
<Property Name= "GauntletTestArgs" Value= "$(GauntletTargetTestArgs)" />
<Property Name= "GauntletTestArgs" Value= "$(GauntletTargetTestAltArgs)" If= "ContainsItem('$(AlternateDevicePoolPlatforms)', '$(TargetPlatform)', ';')" />
2023-03-13 09:32:52 -04:00
<!-- Declare a boot test for the target -->
<Property Name= "NodeAnnotations" Value= "" />
<Property Name= "NodeAnnotations" Value= "Workflow=$(AnnotationsTarget)" If= "ContainsItem('$(AnnotationsPlatforms)', '$(TargetPlatform)', ';') and ContainsItem('$(AnnotationsTests)', 'BootTest', ';')" />
2023-01-13 13:36:19 -05:00
<Property Name= "BootTestName" Value= "$(PreNodeName)$(TargetPlatform) $(TestConfiguration) BootTest" />
2023-03-13 09:32:52 -04:00
<Node Name= "$(BootTestName)" After= "$(PlatformPublishPackagedNodeName)" Requires= "$(TestPrerequisites)" Annotations= "$(NodeAnnotations)" >
2021-03-12 15:39:07 -04:00
<Do If= "'$(AutomationReportOutputDirectory)' != ''" >
<Property Name= "OutputFragmentPath" Value= "$(TargetPlatform)/$(TestConfiguration)/UE.BootTest" />
<Property Name= "OutputReportPath" Value= "$(AutomationReportOutputDirectory)/$(OutputFragmentPath)" />
<Property Name= "GauntletReportArgs" Value= "-logdir="$(OutputReportPath)" -artifactname=Gauntlet -ReportExportPath="$(OutputReportPath)"" />
<Property Name= "GauntletReportArgs" Value= "$(GauntletReportArgs) -ReportURL="$(AutomationReportUrl)/$(OutputFragmentPath)/"" If= "'$(AutomationReportUrl)' != ''" />
</Do>
<!-- Run the boot test -->
2021-10-13 12:32:22 -04:00
<Command Name= "RunUnreal" Arguments= "-project=$(TargetProject) -test="UE.BootTest" -platform=$(TargetPlatform) -configuration=$(TestConfiguration) $(GauntletBuildArg) $(GauntletTestArgs) $(GauntletReportArgs)" />
2021-03-09 21:05:18 -04:00
</Node>
2021-03-11 23:26:40 -04:00
<!-- Link the boot test in to the prerequisites and generated nodes if its enabled -->
2021-06-07 13:42:07 -04:00
<Property Name= "TestPrerequisites" Value= "$(TestPrerequisites);$(PlatformEditorNodeName)" />
2021-05-13 20:20:15 -04:00
<Do If= "$(TargetBootTest) and !ContainsItem('$(TargetPlatformsToSkipBootTests)', '$(TargetPlatform)', '+')" >
2021-03-11 23:26:40 -04:00
<Property Name= "TestPrerequisites" Value= "$(TestPrerequisites);$(BootTestName)" />
<Property Name= "AllPlatformBootTestNodes" Value= "$(AllPlatformBootTestNodes);$(BootTestName)" />
</Do>
<!-- Go through the list of tests -->
<ForEach Name= "TestName" Values= "$(TargetTestList)" Separator= "+" >
2023-03-13 11:35:43 -04:00
<Property Name= "TestNameTitle" Value= "$(TestName)" />
<Expand Name= "SanitizeTestNameTitle" />
2021-03-11 23:26:40 -04:00
<!-- Run and report on the test -->
<Do If= "'$(AutomationReportOutputDirectory)' != ''" >
2023-03-13 11:35:43 -04:00
<Property Name= "OutputFragmentPath" Value= "$(TargetPlatform)/$(TestConfiguration)/$(TestNameTitle)" />
2021-03-11 23:26:40 -04:00
<Property Name= "OutputReportPath" Value= "$(AutomationReportOutputDirectory)/$(OutputFragmentPath)" />
<Property Name= "GauntletReportArgs" Value= "-logdir="$(OutputReportPath)" -artifactname=Gauntlet -ReportExportPath="$(OutputReportPath)"" />
<Property Name= "GauntletReportArgs" Value= "$(GauntletReportArgs) -ReportURL="$(AutomationReportUrl)/$(OutputFragmentPath)/"" If= "'$(AutomationReportUrl)' != ''" />
</Do>
2023-03-13 11:35:43 -04:00
<Property Name= "TestNodeName" Value= "$(PreNodeName)$(TargetPlatform) $(TestConfiguration) $(TestNameTitle)" />
2023-03-13 09:32:52 -04:00
<Property Name= "NodeAnnotations" Value= "" />
<Property Name= "NodeAnnotations" Value= "Workflow=$(AnnotationsTarget)" If= "ContainsItem('$(AnnotationsPlatforms)', '$(TargetPlatform)', ';') and ContainsItem('$(AnnotationsTests)', '$(TestName)', ';')" />
2021-07-27 15:36:56 -04:00
<!-- Run the test. No 'Requires' as we run on the same machine locally and use the publish folder otherwise -->
2023-03-13 09:32:52 -04:00
<Node Name= "$(TestNodeName)" Requires= "$(TestPrerequisites)" Annotations= "$(NodeAnnotations)" >
2021-10-13 12:32:22 -04:00
<Command Name= "RunUnreal" Arguments= "-project=$(TargetProject) -test="$(TestName)" -platform=$(TargetPlatform) -configuration=$(TestConfiguration) $(GauntletBuildArg) $(GauntletTestArgs) $(GauntletReportArgs)" />
2021-03-11 23:26:40 -04:00
</Node>
<!-- Add it to our list -->
2021-05-13 20:20:15 -04:00
<Do If= "!ContainsItem('$(TargetPlatformsToSkipTests)', '$(TargetPlatform)', '+')" >
2021-03-28 22:51:06 -04:00
<Property Name= "AllPlatformTestNodes" Value= "$(AllPlatformTestNodes);$(TestNodeName)" />
</Do>
2021-03-11 23:26:40 -04:00
</ForEach>
</ForEach>
2021-03-09 21:05:18 -04:00
</Agent>
<!-- Declare labels for CIS -->
2023-01-13 13:36:19 -05:00
<Label Category= "Clients" Name= "$(PreLabelName)$(TargetPlatform)" Requires= "$(PlatformCompileNodeName);$(UploadSymbolsNodeName)" />
<Label Category= "Clients" Name= "$(PreLabelName)Content $(TargetPlatform)" Requires= "$(PlatformCookNodeName);$(PlatformStageNodeName);$(PlatformPackageNodeName)" />
<Label Category= "Clients" Name= "$(PreLabelName)Publish $(TargetPlatform)" Requires= "$(PlatformPublishPackagedNodeName);$(PlatformPublishPackagedNodeName);$(PlatformPublishStagedNodeName);$(PlatformHashNodeName)" />
<Label Category= "Tests" Name= "$(PreLabelName)BootTest $(TargetPlatform)" Requires= "$(AllPlatformBootTestNodes)" />
<Label Category= "Tests" Name= "$(PreLabelName)Test $(TargetPlatform)" Requires= "$(AllPlatformTestNodes)" />
2021-03-09 21:05:18 -04:00
2021-07-27 15:36:56 -04:00
<!-- Tie all steps into our platform tasks unless excluded -->
2021-03-09 21:05:18 -04:00
<Property Name= "PlatformTasks" Value= "" />
2021-12-03 01:31:49 -05:00
<Property Name= "PlatformTasks" Value= "$(PlatformCompileNodeName);$(UploadSymbolsNodeName)" If= "!$(SkipBuild)" />
2021-07-27 15:36:56 -04:00
<Property Name= "PlatformTasks" Value= "$(PlatformTasks);$(PlatformCookNodeName)" If= "!$(SkipCook) and !$(SkipPublish)" />
<Property Name= "PlatformTasks" Value= "$(PlatformTasks);$(PlatformPackageNodeName);$(PlatformPublishPackagedNodeName)" If= "!$(SkipPublish) And $(PublishBuilds)" />
<Property Name= "PlatformTasks" Value= "$(PlatformTasks);$(PlatformHashNodeName)" If= "$(PublishHashedStagingData)" />
2021-05-13 20:20:15 -04:00
<Property Name= "PlatformTasks" Value= "$(PlatformTasks);$(AllPlatformBootTestNodes);$(AllPlatformTestNodes)" />
2021-03-09 21:05:18 -04:00
<Property Name= "GeneratedTargetNodes" Value= "$(GeneratedTargetNodes);$(PlatformTasks)" />
</ForEach>
<!-- Create an aggregate with all the generated nodes -->
2022-07-11 09:50:47 -04:00
<Aggregate Name= "BuildAndTest $(ProjectName)" Requires= "$(GeneratedToolNodes);$(GeneratedCookedEditorNodes);$(GeneratedEditorTestNodes);$(GeneratedCookedEditorTestNodes);$(GeneratedTargetNodes);$(GeneratedTargetTestNodes)" />
2021-03-09 21:05:18 -04:00
</BuildGraph>