コード例 #1
0
ファイル: RocketBuild.Automation.cs プロジェクト: mymei/UE4
        public override void DoBuild(GUBP bp)
        {
            CommandUtils.CreateDirectory(SavedDir);

            BuildProducts = new List<string>();

            List<string> ManifestFiles = new List<string>();
            if(!bp.ParseParam("NoDDC"))
            {
                // Find all the projects we're interested in
                List<BranchInfo.BranchUProject> Projects = new List<BranchInfo.BranchUProject>();
                foreach(string ProjectName in ProjectNames)
                {
                    BranchInfo.BranchUProject Project = bp.Branch.FindGameChecked(ProjectName);
                    if(!Project.Properties.bIsCodeBasedProject)
                    {
                        Projects.Add(Project);
                    }
                }

                // Filter out the files we need to build DDC. Removing confidential folders can affect DDC keys, so we want to be sure that we're making DDC with a build that can use it.
                FileFilter Filter = new FileFilter(FileFilterType.Exclude);
                Filter.AddRuleForFiles(AllDependencyBuildProducts, CommandUtils.CmdEnv.LocalRoot, FileFilterType.Include);
                Filter.ReadRulesFromFile(CommandUtils.CombinePaths(CommandUtils.CmdEnv.LocalRoot, "Engine", "Build", "InstalledEngineFilters.ini"), "CopyEditor", HostPlatform.ToString());
                Filter.Exclude("/Engine/Build/...");
                Filter.Exclude("/Engine/Extras/...");
                Filter.Exclude("/Engine/DerivedDataCache/...");
                Filter.Exclude("/Samples/...");
                Filter.Exclude("/Templates/...");
                Filter.Exclude(".../Source/...");
                Filter.Exclude(".../Intermediate/...");
                Filter.ExcludeConfidentialPlatforms();
                Filter.ExcludeConfidentialFolders();
                Filter.Include("/Engine/Build/NotForLicensees/EpicInternal.txt");
                Filter.Include("/Engine/Binaries/.../*DDCUtils*"); // Make sure we can use the shared DDC!

                // Copy everything to a temporary directory
                string TempDir = CommandUtils.CombinePaths(CommandUtils.CmdEnv.LocalRoot, "LocalBuilds", "RocketDDC", CommandUtils.GetGenericPlatformName(HostPlatform));
                CommandUtils.DeleteDirectoryContents(TempDir);
                CommandUtils.ThreadedCopyFiles(CommandUtils.CmdEnv.LocalRoot, TempDir, Filter, true);

                // Get paths to everything within the temporary directory
                string EditorExe = CommandUtils.GetEditorCommandletExe(TempDir, HostPlatform);
                string RelativePakPath = "Engine/DerivedDataCache/Compressed.ddp";
                string OutputPakFile = CommandUtils.CombinePaths(TempDir, RelativePakPath);
                string OutputCsvFile = Path.ChangeExtension(OutputPakFile, ".csv");

                // Generate DDC for all the non-code projects. We don't necessarily have editor DLLs for the code projects, but they should be the same as their blueprint counterparts.
                List<string> ProjectPakFiles = new List<string>();
                foreach(BranchInfo.BranchUProject Project in Projects)
                {
                    CommandUtils.Log("Generating DDC data for {0} on {1}", Project.GameName, TargetPlatforms);
                    CommandUtils.DDCCommandlet(Project.FilePath, EditorExe, null, TargetPlatforms, "-fill -DDC=CreateInstalledEnginePak -ProjectOnly");

                    string ProjectPakFile = CommandUtils.CombinePaths(Path.GetDirectoryName(OutputPakFile), String.Format("Compressed-{0}.ddp", Project.GameName));
                    CommandUtils.DeleteFile(ProjectPakFile);
                    CommandUtils.RenameFile(OutputPakFile, ProjectPakFile);

                    string ProjectCsvFile = Path.ChangeExtension(ProjectPakFile, ".csv");
                    CommandUtils.DeleteFile(ProjectCsvFile);
                    CommandUtils.RenameFile(OutputCsvFile, ProjectCsvFile);

                    ProjectPakFiles.Add(Path.GetFileName(ProjectPakFile));
                }

                // Generate DDC for the editor, and merge all the other PAK files in
                CommandUtils.Log("Generating DDC data for engine content on {0}", TargetPlatforms);
                CommandUtils.DDCCommandlet(null, EditorExe, null, TargetPlatforms, "-fill -DDC=CreateInstalledEnginePak " + CommandUtils.MakePathSafeToUseWithCommandLine("-MergePaks=" + String.Join("+", ProjectPakFiles)));

                // Copy the DDP file to the output path
                string SavedPakFile = CommandUtils.CombinePaths(SavedDir, RelativePakPath);
                CommandUtils.CopyFile(OutputPakFile, SavedPakFile);
                BuildProducts.Add(SavedPakFile);

                // Add the pak file to the list of files to copy
                ManifestFiles.Add(RelativePakPath);
            }
            CommandUtils.WriteAllLines(SavedManifestPath, ManifestFiles.ToArray());
            BuildProducts.Add(SavedManifestPath);

            SaveRecordOfSuccessAndAddToBuildProducts();
        }
コード例 #2
0
ファイル: RocketBuild.Automation.cs プロジェクト: mymei/UE4
        public override void DoBuild(GUBP bp)
        {
            // Create a filter for all the promoted binaries
            FileFilter PromotableFilter = new FileFilter();
            PromotableFilter.AddRuleForFiles(AllDependencyBuildProducts, CommandUtils.CmdEnv.LocalRoot, FileFilterType.Include);
            PromotableFilter.ReadRulesFromFile(CommandUtils.CombinePaths(CommandUtils.CmdEnv.LocalRoot, ConfigRelativePath), "promotable");
            PromotableFilter.ExcludeConfidentialFolders();

            // Copy everything that matches the filter to the promotion folder
            string PromotableFolder = CommandUtils.CombinePaths(CommandUtils.CmdEnv.LocalRoot, "Engine", "Saved", "GitPromotable");
            CommandUtils.DeleteDirectoryContents(PromotableFolder);
            string[] PromotableFiles = CommandUtils.ThreadedCopyFiles(CommandUtils.CmdEnv.LocalRoot, PromotableFolder, PromotableFilter, bIgnoreSymlinks: true);
            BuildProducts = new List<string>(PromotableFiles);
        }
コード例 #3
0
ファイル: RocketBuild.Automation.cs プロジェクト: mymei/UE4
        public override void DoBuild(GUBP bp)
        {
            BuildProducts = new List<string>();
            FileFilter Filter = new FileFilter();

            // Include all the editor products
            AddRuleForBuildProducts(Filter, bp, GUBP.ToolsForCompileNode.StaticGetFullName(HostPlatform), FileFilterType.Include);
            AddRuleForBuildProducts(Filter, bp, GUBP.RootEditorNode.StaticGetFullName(HostPlatform), FileFilterType.Include);
            AddRuleForBuildProducts(Filter, bp, GUBP.ToolsNode.StaticGetFullName(HostPlatform), FileFilterType.Include);

            // Include win64 tools on Mac, to get the win64 build of UBT, UAT and IPP
            if (HostPlatform == UnrealTargetPlatform.Mac && bp.HostPlatforms.Contains(UnrealTargetPlatform.Win64))
            {
                AddRuleForBuildProducts(Filter, bp, GUBP.ToolsNode.StaticGetFullName(UnrealTargetPlatform.Win64), FileFilterType.Include);
                AddRuleForBuildProducts(Filter, bp, GUBP.ToolsForCompileNode.StaticGetFullName(UnrealTargetPlatform.Win64), FileFilterType.Include);
            }

            // Include the editor headers
            UnzipAndAddRuleForHeaders(GUBP.RootEditorNode.StaticGetArchivedHeadersPath(HostPlatform), Filter, FileFilterType.Include);

            // Include the build dependencies for every code platform
            foreach(UnrealTargetPlatform TargetPlatform in TargetPlatforms)
            {
                if(RocketBuild.IsCodeTargetPlatform(HostPlatform, TargetPlatform))
                {
                    UnrealTargetPlatform SourceHostPlatform = RocketBuild.GetSourceHostPlatform(bp, HostPlatform, TargetPlatform);
                    string FileListPath = GUBP.GamePlatformMonolithicsNode.StaticGetBuildDependenciesPath(SourceHostPlatform, bp.Branch.BaseEngineProject, TargetPlatform);
                    Filter.AddRuleForFiles(UnrealBuildTool.Utils.ReadClass<UnrealBuildTool.ExternalFileList>(FileListPath).FileNames, CommandUtils.CmdEnv.LocalRoot, FileFilterType.Include);
                    UnzipAndAddRuleForHeaders(GUBP.GamePlatformMonolithicsNode.StaticGetArchivedHeadersPath(SourceHostPlatform, bp.Branch.BaseEngineProject, TargetPlatform), Filter, FileFilterType.Include);
                }
            }

            // Add the monolithic binaries
            foreach(UnrealTargetPlatform TargetPlatform in TargetPlatforms)
            {
                UnrealTargetPlatform SourceHostPlatform = RocketBuild.GetSourceHostPlatform(bp, HostPlatform, TargetPlatform);
                bool bIsCodeTargetPlatform = RocketBuild.IsCodeTargetPlatform(SourceHostPlatform, TargetPlatform);
                AddRuleForBuildProducts(Filter, bp, GUBP.GamePlatformMonolithicsNode.StaticGetFullName(SourceHostPlatform, bp.Branch.BaseEngineProject, TargetPlatform, Precompiled: bIsCodeTargetPlatform), FileFilterType.Include);
            }

            // Include the feature packs
            foreach(string CurrentFeaturePack in CurrentFeaturePacks)
            {
                BranchInfo.BranchUProject Project = bp.Branch.FindGameChecked(CurrentFeaturePack);
                Filter.AddRuleForFile(GUBP.MakeFeaturePacksNode.GetOutputFile(Project), CommandUtils.CmdEnv.LocalRoot, FileFilterType.Include);
            }

            // Include all the templates
            foreach (string Template in CurrentTemplates)
            {
                BranchInfo.BranchUProject Project = bp.Branch.FindGameChecked(Template);
                Filter.Include("/" + Utils.StripBaseDirectory(Path.GetDirectoryName(Project.FilePath), CommandUtils.CmdEnv.LocalRoot).Replace('\\', '/') + "/...");
            }

            // Include all the standard rules
            string RulesFileName = CommandUtils.CombinePaths(CommandUtils.CmdEnv.LocalRoot, "Engine", "Build", "InstalledEngineFilters.ini");
            Filter.ReadRulesFromFile(RulesFileName, "CopyEditor", HostPlatform.ToString());
            Filter.ReadRulesFromFile(RulesFileName, "CopyTargetPlatforms", HostPlatform.ToString());

            // Custom rules for each target platform
            foreach(UnrealTargetPlatform TargetPlaform in TargetPlatforms)
            {
                string SectionName = String.Format("CopyTargetPlatform.{0}", TargetPlaform.ToString());
                Filter.ReadRulesFromFile(RulesFileName, SectionName, HostPlatform.ToString());
            }

            // Add the final exclusions for legal reasons.
            Filter.ExcludeConfidentialPlatforms();
            Filter.ExcludeConfidentialFolders();

            // Run the filter on the stripped symbols, and remove those files from the copy filter
            List<string> AllStrippedFiles = new List<string>();
            foreach(KeyValuePair<string, string> StrippedNodeManifestPath in StrippedNodeManifestPaths)
            {
                List<string> StrippedFiles = new List<string>();

                StripRocketNode StripNode = (StripRocketNode)bp.FindNode(StrippedNodeManifestPath.Key);
                foreach(string BuildProduct in StripNode.BuildProducts)
                {
                    if(Utils.IsFileUnderDirectory(BuildProduct, StripNode.StrippedDir))
                    {
                        string RelativePath = CommandUtils.StripBaseDirectory(Path.GetFullPath(BuildProduct), StripNode.StrippedDir);
                        if(Filter.Matches(RelativePath))
                        {
                            StrippedFiles.Add(RelativePath);
                            AllStrippedFiles.Add(RelativePath);
                            Filter.Exclude("/" + RelativePath);
                        }
                    }
                }

                WriteManifest(StrippedNodeManifestPath.Value, StrippedFiles);
                BuildProducts.Add(StrippedNodeManifestPath.Value);
            }

            // Write the filtered list of depot files to disk, removing any symlinks
            List<string> DepotFiles = Filter.ApplyToDirectory(CommandUtils.CmdEnv.LocalRoot, true).ToList();
            WriteManifest(DepotManifestPath, DepotFiles);
            BuildProducts.Add(DepotManifestPath);

            // Sort the list of output files
            SortedDictionary<string, bool> SortedFiles = new SortedDictionary<string,bool>(StringComparer.InvariantCultureIgnoreCase);
            foreach(string DepotFile in DepotFiles)
            {
                SortedFiles.Add(DepotFile, false);
            }
            foreach(string StrippedFile in AllStrippedFiles)
            {
                SortedFiles.Add(StrippedFile, true);
            }

            // Write the list to the log
            CommandUtils.Log("Files to be included in Rocket build:");
            foreach(KeyValuePair<string, bool> SortedFile in SortedFiles)
            {
                CommandUtils.Log("  {0}{1}", SortedFile.Key, SortedFile.Value? " (stripped)" : "");
            }
        }
コード例 #4
0
ファイル: RocketBuild.Automation.cs プロジェクト: mymei/UE4
        public override void DoBuild(GUBP bp)
        {
            BuildProducts = new List<string>();

            string InputDir = Path.GetFullPath(CommandUtils.CmdEnv.LocalRoot);
            string RulesFileName = CommandUtils.CombinePaths(CommandUtils.CmdEnv.LocalRoot, "Engine", "Build", "InstalledEngineFilters.ini");

            // Read the filter for files on this platform
            FileFilter StripFilter = new FileFilter();
            StripFilter.ReadRulesFromFile(RulesFileName, "StripSymbols." + TargetPlatform.ToString(), HostPlatform.ToString());

            // Apply the filter to the build products
            List<string> SourcePaths = new List<string>();
            List<string> TargetPaths = new List<string>();
            foreach(string NodeToStrip in NodesToStrip)
            {
                GUBP.GUBPNode Node = bp.FindNode(NodeToStrip);
                foreach(string DependencyBuildProduct in Node.BuildProducts)
                {
                    string RelativePath = CommandUtils.StripBaseDirectory(Path.GetFullPath(DependencyBuildProduct), InputDir);
                    if(StripFilter.Matches(RelativePath))
                    {
                        SourcePaths.Add(CommandUtils.CombinePaths(InputDir, RelativePath));
                        TargetPaths.Add(CommandUtils.CombinePaths(StrippedDir, RelativePath));
                    }
                }
            }

            // Strip the files and add them to the build products
            StripSymbols(TargetPlatform, SourcePaths.ToArray(), TargetPaths.ToArray());
            BuildProducts.AddRange(TargetPaths);

            SaveRecordOfSuccessAndAddToBuildProducts();
        }