public UATTestNode(GUBP bp, UnrealTargetPlatform InHostPlatform, BranchInfo.BranchUProject InGameProj, string InTestName, string InUATCommandLine, string InAgentSharingGroup, bool InDependsOnEditor = true, List<UnrealTargetPlatform> InDependsOnCooked = null, float InECPriority = 0.0f) : base(InHostPlatform) { AgentSharingGroup = InAgentSharingGroup; ECPriority = InECPriority; GameProj = InGameProj; TestName = InTestName; UATCommandLine = InUATCommandLine; bool bWillCook = InUATCommandLine.IndexOf("-cook") >= 0; DependsOnEditor = InDependsOnEditor || bWillCook; if (InDependsOnCooked != null) { DependsOnCooked = InDependsOnCooked; } else { DependsOnCooked = new List<UnrealTargetPlatform>(); } if (DependsOnEditor) { AddDependency(EditorAndToolsNode.StaticGetFullName(HostPlatform)); if (GameProj.GameName != bp.Branch.BaseEngineProject.GameName) { if (GameProj.Properties.Targets.ContainsKey(TargetRules.TargetType.Editor)) { AddDependency(EditorGameNode.StaticGetFullName(HostPlatform, GameProj)); } } } foreach (var Plat in DependsOnCooked) { AddDependency(GamePlatformCookedAndCompiledNode.StaticGetFullName(HostPlatform, GameProj, Plat)); } AddPseudodependency(WaitForTestShared.StaticGetFullName()); // If the same test fails for the base engine, don't bother trying if (InGameProj.GameName != bp.Branch.BaseEngineProject.GameName) { if (bp.HasNode(UATTestNode.StaticGetFullName(HostPlatform, bp.Branch.BaseEngineProject, TestName))) { AddPseudodependency(UATTestNode.StaticGetFullName(HostPlatform, bp.Branch.BaseEngineProject, InTestName)); } else { bool bFoundACook = false; foreach (var Plat in DependsOnCooked) { var PlatTestName = "CookedGameTest_" + Plat.ToString(); if (bp.HasNode(UATTestNode.StaticGetFullName(HostPlatform, bp.Branch.BaseEngineProject, PlatTestName))) { AddPseudodependency(UATTestNode.StaticGetFullName(HostPlatform, bp.Branch.BaseEngineProject, PlatTestName)); bFoundACook = true; } } if (!bFoundACook && bp.HasNode(UATTestNode.StaticGetFullName(HostPlatform, bp.Branch.BaseEngineProject, "EditorTest"))) { AddPseudodependency(UATTestNode.StaticGetFullName(HostPlatform, bp.Branch.BaseEngineProject, "EditorTest")); } } } if (InGameProj.GameName == bp.Branch.BaseEngineProject.GameName) { ECPriority = ECPriority + 1.0f; } if (UATCommandLine.IndexOf("-RunAutomationTests", StringComparison.InvariantCultureIgnoreCase) >= 0) { ECPriority = ECPriority - 4.0f; if (UATCommandLine.IndexOf("-EditorTest", StringComparison.InvariantCultureIgnoreCase) >= 0) { ECPriority = ECPriority - 4.0f; } } else if (UATCommandLine.IndexOf("-EditorTest", StringComparison.InvariantCultureIgnoreCase) >= 0) { ECPriority = ECPriority + 2.0f; } }
public SingleInternalToolsNode(GUBP bp, UnrealTargetPlatform InHostPlatform, SingleTargetProperties InProgramTarget) : base(InHostPlatform) { // Don't add rooteditor dependency if it isn't in the graph var bRootEditorNodeDoesExit = bp.HasNode(RootEditorNode.StaticGetFullName(HostPlatform)); SetupSingleInternalToolsNode(InProgramTarget, !bRootEditorNodeDoesExit); }
public GamePlatformMonolithicsNode(GUBP bp, UnrealTargetPlatform InHostPlatform, BranchInfo.BranchUProject InGameProj, UnrealTargetPlatform InTargetPlatform, bool InWithXp = false, bool InPrecompiled = false) : base(InHostPlatform) { GameProj = InGameProj; TargetPlatform = InTargetPlatform; WithXp = InWithXp; Precompiled = InPrecompiled; if (TargetPlatform == UnrealTargetPlatform.PS4 || TargetPlatform == UnrealTargetPlatform.XboxOne) { // Required for PS4MapFileUtil/XboxOnePDBFileUtil AddDependency(ToolsNode.StaticGetFullName(InHostPlatform)); } if (InGameProj.GameName != bp.Branch.BaseEngineProject.GameName && GameProj.Properties.Targets.ContainsKey(TargetRules.TargetType.Editor)) { if (!bp.BranchOptions.ExcludePlatformsForEditor.Contains(InHostPlatform)) { AddPseudodependency(EditorGameNode.StaticGetFullName(InHostPlatform, GameProj)); } if (bp.HasNode(GamePlatformMonolithicsNode.StaticGetFullName(HostPlatform, bp.Branch.BaseEngineProject, TargetPlatform))) { AddPseudodependency(GamePlatformMonolithicsNode.StaticGetFullName(HostPlatform, bp.Branch.BaseEngineProject, TargetPlatform)); } } else { if (TargetPlatform != InHostPlatform && bp.HasNode(GamePlatformMonolithicsNode.StaticGetFullName(InHostPlatform, bp.Branch.BaseEngineProject, InHostPlatform, Precompiled: Precompiled))) { AddPseudodependency(GamePlatformMonolithicsNode.StaticGetFullName(InHostPlatform, bp.Branch.BaseEngineProject, InHostPlatform, Precompiled: Precompiled)); } } if (InGameProj.Options(InHostPlatform).bTestWithShared) /// compiling templates is only for testing purposes, and we will group them to avoid saturating the farm { AddPseudodependency(WaitForTestShared.StaticGetFullName()); AgentSharingGroup = "TemplateMonolithics" + StaticGetHostPlatformSuffix(InHostPlatform); } }
public DDCNode(GUBP bp, UnrealTargetPlatform InHostPlatform, BranchInfo.BranchUProject InGameProj, UnrealTargetPlatform InTargetPlatform, string InCookPlatform) : base(InHostPlatform) { GameProj = InGameProj; TargetPlatform = InTargetPlatform; CookPlatform = InCookPlatform; bIsMassive = false; AddDependency(RootEditorNode.StaticGetFullName(HostPlatform)); if (bp.bOrthogonalizeEditorPlatforms) { if (TargetPlatform != HostPlatform && TargetPlatform != GUBP.GetAltHostPlatform(HostPlatform)) { AddDependency(EditorPlatformNode.StaticGetFullName(HostPlatform, TargetPlatform)); } } bool bIsShared = false; // is this the "base game" or a non code project? if (InGameProj.GameName != bp.Branch.BaseEngineProject.GameName && GameProj.Properties.Targets.ContainsKey(TargetRules.TargetType.Editor)) { var Options = InGameProj.Options(HostPlatform); bIsMassive = Options.bIsMassive; AddDependency(EditorGameNode.StaticGetFullName(HostPlatform, GameProj)); // add an arc to prevent DDCNode from running until promotable is labeled if (Options.bIsPromotable) { if (Options.bSeparateGamePromotion) { // AddPseudodependency(GameLabelPromotableNode.StaticGetFullName(GameProj, false)); } else { bIsShared = true; } } else if (Options.bTestWithShared) { bIsShared = true; } //AddPseudodependency(GamePlatformMonolithicsNode.StaticGetFullName(HostPlatform, GameProj, TargetPlatform)); } else { bIsShared = true; //AddPseudodependency(GamePlatformMonolithicsNode.StaticGetFullName(HostPlatform, bp.Branch.BaseEngineProject, TargetPlatform)); } if (bIsShared) { // add an arc to prevent cooks from running until promotable is labeled //AddPseudodependency(WaitForTestShared.StaticGetFullName()); //AgentSharingGroup = "SharedCooks" + StaticGetHostPlatformSuffix(HostPlatform); // If the cook fails for the base engine, don't bother trying if (InGameProj.GameName != bp.Branch.BaseEngineProject.GameName && bp.HasNode(DDCNode.StaticGetFullName(HostPlatform, bp.Branch.BaseEngineProject, CookPlatform))) { //AddPseudodependency(DDCNode.StaticGetFullName(HostPlatform, bp.Branch.BaseEngineProject, CookPlatform)); } // If the base cook platform fails, don't bother trying other ones string BaseCookedPlatform = Platform.Platforms[HostPlatform].GetCookPlatform(false, false, ""); if (InGameProj.GameName == bp.Branch.BaseEngineProject.GameName && CookPlatform != BaseCookedPlatform && bp.HasNode(DDCNode.StaticGetFullName(HostPlatform, bp.Branch.BaseEngineProject, BaseCookedPlatform))) { //AddPseudodependency(DDCNode.StaticGetFullName(HostPlatform, bp.Branch.BaseEngineProject, BaseCookedPlatform)); } } }
public override void AddNodes(GUBP bp, GUBP.GUBPBranchConfig BranchConfig, UnrealTargetPlatform HostPlatform, List<UnrealTargetPlatform> ActivePlatforms) { if (!BranchConfig.BranchOptions.bNoInstalledEngine) { // Add the aggregate for making a rocket build if(!BranchConfig.HasNode(WaitToMakeRocketBuild.StaticGetFullName())) { BranchConfig.AddNode(new WaitToMakeRocketBuild(BranchConfig)); } // Find all the target platforms for this host platform. List<UnrealTargetPlatform> TargetPlatforms = GetTargetPlatforms(bp, HostPlatform); // Remove any platforms that aren't available on this machine TargetPlatforms.RemoveAll(x => !ActivePlatforms.Contains(x)); // Get the temp directory for stripped files for this host string StrippedDir = Path.GetFullPath(CommandUtils.CombinePaths(CommandUtils.CmdEnv.LocalRoot, "Engine", "Saved", "Rocket", HostPlatform.ToString())); // Get the temp directory for signed files for this host string SignedDir = Path.GetFullPath(CommandUtils.CombinePaths(CommandUtils.CmdEnv.LocalRoot, "Engine", "Saved", "Rocket", "Signed", HostPlatform.ToString())); // Strip the host platform if (StripRocketNode.IsRequiredForPlatform(HostPlatform)) { BranchConfig.AddNode(new StripRocketToolsNode(BranchConfig, HostPlatform, StrippedDir)); BranchConfig.AddNode(new StripRocketEditorNode(BranchConfig, HostPlatform, StrippedDir)); } BranchConfig.AddNode(new SignRocketToolsNode(BranchConfig, HostPlatform, SignedDir)); BranchConfig.AddNode(new SignRocketEditorNode(BranchConfig, HostPlatform, SignedDir)); // Strip all the target platforms that are built on this host foreach (UnrealTargetPlatform TargetPlatform in TargetPlatforms) { if (GetSourceHostPlatform(BranchConfig.HostPlatforms, HostPlatform, TargetPlatform) == HostPlatform && StripRocketNode.IsRequiredForPlatform(TargetPlatform)) { BranchConfig.AddNode(new StripRocketMonolithicsNode(BranchConfig, HostPlatform, TargetPlatform, StrippedDir)); } if (GetSourceHostPlatform(BranchConfig.HostPlatforms, HostPlatform, TargetPlatform) == HostPlatform && SignRocketNode.IsRequiredForPlatform(TargetPlatform)) { BranchConfig.AddNode(new SignRocketMonolithicsNode(BranchConfig, HostPlatform, TargetPlatform, SignedDir)); } } // Build the DDC BranchConfig.AddNode(new BuildDerivedDataCacheNode(BranchConfig, HostPlatform, GetCookPlatforms(HostPlatform, TargetPlatforms), CurrentFeaturePacks)); // Generate a list of files that needs to be copied for each target platform BranchConfig.AddNode(new FilterRocketNode(BranchConfig, HostPlatform, TargetPlatforms, CurrentFeaturePacks, CurrentTemplates)); // Copy the install to the output directory string LocalOutputDir = CommandUtils.CombinePaths(CommandUtils.CmdEnv.LocalRoot, "LocalBuilds", "Rocket", CommandUtils.GetGenericPlatformName(HostPlatform)); BranchConfig.AddNode(new GatherRocketNode(BranchConfig, HostPlatform, TargetPlatforms, LocalOutputDir)); // Add a node for GitHub promotions if(HostPlatform == UnrealTargetPlatform.Win64) { string GitConfigRelativePath = "Engine/Build/Git/UnrealBot.ini"; if(CommandUtils.FileExists(CommandUtils.CombinePaths(CommandUtils.CmdEnv.LocalRoot, GitConfigRelativePath))) { BranchConfig.AddNode(new BuildGitPromotable(HostPlatform, BranchConfig.HostPlatforms, GitConfigRelativePath)); } } // Get the output directory for the build zips string PublishedEngineDir; if (ShouldDoSeriousThingsLikeP4CheckinAndPostToMCP(BranchConfig)) { PublishedEngineDir = CommandUtils.CombinePaths(CommandUtils.RootBuildStorageDirectory(), "Rocket", "Automated", GetBuildLabel(), CommandUtils.GetGenericPlatformName(HostPlatform)); } else { PublishedEngineDir = CommandUtils.CombinePaths(CommandUtils.CmdEnv.LocalRoot, "LocalBuilds", "RocketPublish", CommandUtils.GetGenericPlatformName(HostPlatform)); } // Publish the install to the network BranchConfig.AddNode(new PublishRocketNode(HostPlatform, LocalOutputDir, PublishedEngineDir)); BranchConfig.AddNode(new PublishRocketSymbolsNode(BranchConfig, HostPlatform, TargetPlatforms, PublishedEngineDir + "Symbols")); } }
public GamePlatformMonolithicsNode(GUBP bp, UnrealTargetPlatform InHostPlatform, BranchInfo.BranchUProject InGameProj, UnrealTargetPlatform InTargetPlatform, bool InWithXp = false) : base(InHostPlatform) { GameProj = InGameProj; TargetPlatform = InTargetPlatform; WithXp = InWithXp; if (TargetPlatform == UnrealTargetPlatform.PS4) { var PS4MapFileUtil = bp.Branch.FindProgram("PS4MapFileUtil"); if(PS4MapFileUtil.Rules == null) { throw new AutomationException("PS4MapFileUtil is not is this branch, but is required to build PS4 monolithics"); } AddDependency(SingleToolsNode.StaticGetFullName(HostPlatform, PS4MapFileUtil)); } if (TargetPlatform == UnrealTargetPlatform.XboxOne) { var XboxOnePDBFileUtil = bp.Branch.FindProgram("XboxOnePDBFileUtil"); if (XboxOnePDBFileUtil.Rules == null) { throw new AutomationException("XboxOnePDBFileUtil is not is this branch, but is required to build Xbox One monolithics"); } AddDependency(SingleToolsNode.StaticGetFullName(HostPlatform, XboxOnePDBFileUtil)); } if (InGameProj.GameName != bp.Branch.BaseEngineProject.GameName && GameProj.Properties.Targets.ContainsKey(TargetRules.TargetType.Editor)) { if (!bp.BranchOptions.ExcludePlatformsForEditor.Contains(InHostPlatform)) { AddPseudodependency(EditorGameNode.StaticGetFullName(InHostPlatform, GameProj)); } if (bp.HasNode(GamePlatformMonolithicsNode.StaticGetFullName(HostPlatform, bp.Branch.BaseEngineProject, TargetPlatform))) { AddPseudodependency(GamePlatformMonolithicsNode.StaticGetFullName(HostPlatform, bp.Branch.BaseEngineProject, TargetPlatform)); } } else { if (TargetPlatform != InHostPlatform && bp.HasNode(GamePlatformMonolithicsNode.StaticGetFullName(InHostPlatform, bp.Branch.BaseEngineProject, InHostPlatform)) && !GUBP.bBuildRocket) // more errors and more performance by just starting, for example, IOS without waiting for mac { AddPseudodependency(GamePlatformMonolithicsNode.StaticGetFullName(InHostPlatform, bp.Branch.BaseEngineProject, InHostPlatform)); } if (GUBP.bBuildRocket && InGameProj.GameName == bp.Branch.BaseEngineProject.GameName) { AgentSharingGroup = "UE4_" + InTargetPlatform + "_Mono" + StaticGetHostPlatformSuffix(InHostPlatform); // lets just start this right away AddPseudodependency(RootEditorHeadersNode.StaticGetFullName(HostPlatform)); // maybe we should start these sooner, but that rather tangles the agent groups } } if (InGameProj.Options(InHostPlatform).bTestWithShared) /// compiling templates is only for testing purposes, and we will group them to avoid saturating the farm { AddPseudodependency(WaitForTestShared.StaticGetFullName()); AgentSharingGroup = "TemplateMonolithics" + StaticGetHostPlatformSuffix(InHostPlatform); } if (GUBP.bBuildRocket) { var Target = bp.Branch.BaseEngineProject.Properties.Targets[TargetRules.TargetType.Game]; var Configs = Target.Rules.GUBP_GetConfigs_MonolithicOnly(HostPlatform, TargetPlatform); foreach (var Config in Configs) { if (HostPlatform == UnrealTargetPlatform.Win64) { if (TargetPlatform == UnrealTargetPlatform.Win32 && Config != UnrealTargetConfiguration.Shipping) { continue; } if (TargetPlatform == UnrealTargetPlatform.Win64 && Config != UnrealTargetConfiguration.Development) { continue; } if (TargetPlatform == UnrealTargetPlatform.Android && Config != UnrealTargetConfiguration.Shipping && Config != UnrealTargetConfiguration.Development) { continue; } if (TargetPlatform == UnrealTargetPlatform.HTML5 && Config != UnrealTargetConfiguration.Shipping && Config != UnrealTargetConfiguration.Development) { continue; } if (TargetPlatform == UnrealTargetPlatform.Linux && Config != UnrealTargetConfiguration.Shipping && Config != UnrealTargetConfiguration.Development) { continue; } } else if (Config != UnrealTargetConfiguration.Shipping && Config != UnrealTargetConfiguration.Development) { continue; } Log("Building {0} for Host={1} Target={2} Config={3} for rocket. Node={4}", Target.TargetName, HostPlatform, TargetPlatform, Config, GetFullName()); } } }