BlueRoseNote/03-UnrealEngine/流程管理与部署/BuildGraph与UnrealBinaryBuilde.md
2023-06-29 11:55:02 +08:00

9.1 KiB
Raw Permalink Blame History

title, date, tags, rating
title date tags rating
BuildGraph与UnrealBinaryBuilde 2022-08-06 20:41:15 BuildGraph

BuildGraph

  • 共享共同的构建步骤,以节约构建时间
  • 能使用Graph对编译量进行优化
  • 易于并行化构建
  • 存储构建脚本在每个分支中,而不需要编写额外的后端程序
  • 不同的产品可以定制不同的额外步骤

基于以上的需求EPIC的开发了BuildGraph类似于Make/Ant/MSBuild,但一开始就是基于并行分布式处理设计的。各种操作定义在AutomationTool中可以通过派生CustomTask类来扩展构建任务。 文档:https://docs.unrealengine.com/4.27/en-US/ProductionPipelines/BuildTools/AutomationTool/BuildGraph/

本人推荐看查利鹏的文章《BuildGraph构建支持多平台打包的二进制引擎》https://imzlp.com/posts/11956/里面除了介绍了基础用法之外还介绍了加快构建的方法如何砍掉不必要的构建过程以及构建安卓与IOS端的方法

官方视频也有对它进行介绍1017分开始 《Tools and Infrastructure for Large Teams | Unreal Dev Days 2019 | Unreal Engine》 https://youtu.be/d6lyAI4Ftkw

视频中还介绍了:

  • EPIC的自动合并工具RoboMerge源码位于Engine\Extras\RoboMerge。
  • 同步工作区工具BuildAgent源码位于Engine\Source\Programs\BuildAgent。
  • AutoSDK源码位于Engine\Extras\AutoSDK。
  • UnrealGameSync源码位于Engine\Source\Programs\UnrealGameSync。

PS.BuildAgent与UnrealGameSync基于perforce。

分布式流程逻辑:

插件构建命令

Engine\Build\BatchFiles\RunUAT.bat BuildPlugin -Plugin=[Path to .uplugin file, must be outside engine directory] -Package=[Output directory] -Rocket -VS2019

D:\UnrealEngine\UnrealEngine\Engine\Build\BatchFiles\RunUAT.bat BuildPlugin -Plugin=C:\Users\BlueRose\Desktop\YueHuaProject\Plugins\MultiDraw\MultiDraw.uplugin -Package=C:\Users\BlueRose\Desktop\Ouput\plugins -Rocket -VS2019 -TargetPlatforms=Win64

引擎构建命令

D:\UnrealEngine\UnrealEngine\Engine\Build\BatchFiles\RunUAT.bat BuildGraph -target="Make Installed Build Win64" -script=Engine/Build/InstalledEngineBuild.xml -set:WithDDC=true -set:SignExecutables=false -set:EmbedSrcSrvInfo=false -set:GameConfigurations=Development;Shipping -set:WithFullDebugInfo=false -set:HostPlatformEditorOnly=false -set:AnalyticsTypeOverride= -set:HostPlatformDDCOnly=true -set:WithWin64=true -set:WithMac=false -set:WithAndroid=false -set:WithIOS=false -set:WithTVOS=false -set:WithLinux=false -set:WithLumin=false -set:WithLinuxArm64=false -set:CompileDatasmithPlugins=false -set:WithServer=false -set:WithClient=false -set:WithHoloLens=false

AutomationTool其他命令

具体可以参考:https://github.com/botman99/ue4-unreal-automation-tool

AnalyzeThirdPartyLibs     CleanDevices                     RebasePublicIncludePaths     TestKillAll
BenchmarkBuild            CleanFormalBuilds                RebuildHLOD                  TestLog
BenchmarkOptions          CleanTempStorage                 RebuildLightMaps             TestMacZip
BlameKeyword              CodeSurgery                      RecordPerformance            TestMcpConfigs
Build                     CopySharedCookedBuild            ReplaceAssetsUsingManifest   TestMessage
BuildCMakeLib             CopyUAT                          ResavePackages               TestOSSCommands
BuildCommonTools          CryptoKeys                       ResavePluginDescriptors      TestP4_ClientOps
BuildCookRun              DebugSleep                       ResaveProjectDescriptors     TestP4_CreateChangelist
BuildDerivedDataCache     DumpBranch                       RunEditorTests               TestP4_Info
BuildEditor               ExportIPAFromArchive             RunP4Reconcile               TestP4_LabelDescription
BuildForUGS               ExportMcpTemplates               RunUnreal                    TestP4_StrandCheckout
BuildGame                 ExtractPaks                      StashTarget                  TestRecursion
BuildGraph                FinalizeInstalledBuild           SubmitUtilizationReportToEC  TestRecursionAuto
BuildHlslcc               FixPerforceCase                  SyncBinariesFromUGS          TestStopProcess
BuildPhysX                FixupRedirects                   SyncDDC                      TestSuccess
BuildPlugin               GenerateAutomationProject        SyncDepotPath                TestTestFarm
BuildServer               GenerateDSYM                     SyncProject                  TestThreadedCopyFiles
BuildTarget               GitPullRequest                   SyncSource                   TestUATBuildProducts
BuildThirdPartyLibs       IPhonePackager                   TempStorageTests             UBT
CheckBalancedMacros       ListMobileDevices                TestArguments                UE4BuildUtilDummyBuildCommand
CheckCsprojDotNetVersion  ListThirdPartySoftware           TestBlame                    UnstashTarget
CheckForHacks             Localise                         TestChangeFileType           UpdateLocalVersion
CheckPerforceCase         Localize                         TestChanges                  UploadDDCToAWS
CheckRestrictedFolders    LookForOverlappingBuildProducts  TestCleanFormalBuilds        WriteIniValueToPlist
CheckTargetExists         MegaXGE                          TestCombinePaths             ZipProjectUp
CheckXcodeVersion         OpenEditor                       TestFail                     ZipUtils
CleanAutomationReports    P4WriteConfig                    TestFileUtility
CleanDDC                  ParseMsvcTimingInfo              TestGauntlet

UnrealBinaryBuilder

使用BuildGraph需要使用命令行对开发者还是不够友好所以可以使用UnrealBinaryBuilderhttps://github.com/ryanjon2040/Unreal-Binary-Builder 这个项目使用c#编写代码相对比较简单可以参考用于公司内部的CI/CD工具以及分布式构建系统编写如何与BuildGraph交互与通信。查看源码后发现已经对应UE5进行了适配所以可以放心使用。

一开始进入的是界面。如果是刚下载的源代码可以点击Start来下载二进制文件、生成引擎解决方案文件以及构建AutomationTool。

之后点击Compile选项卡来设置构建选项。左边的Platform选择要构建的平台其中Mac、Ios、Android可以参考查利鹏的文章。其中构建需要能够打开的引擎需要勾选的include DDC与Host DDC Only不然运行引擎会提示丢失各种Shader与Shader文件夹。左下角的输入栏可以指定编译的版本默认是Development与Shipping。点击Copy Commandline To Clipboard会将生成的命令行复制到剪贴板之后可以粘贴到文字编辑工具中查看来确定所有的编译参数是否正确也可以之后在cmd中直接运行这个命令来执行编译。最后点击Build UnrealEngine来进行构建。

实际的编译时间比你手动编译的要长是因为默认的BuildGraph构建文件Engine/Build/InstalledEngineBuild.xml中会有编译所有模块的指令。这里可以根据需求来创建新的BuildGraph文件去掉 -allmodules与-nolink来解决。

<Node Name="Compile UE4Game Win64" Requires="Compile UnrealHeaderTool Win64" Produces="#UE4Game Win64;#UE4Game Win64 Unstripped;#UE4Game Win64 Stripped;#UE4Game Win64 Unsigned;#UE4Game Win64 Signed">
	<ForEach Name="Target" Values="UE4Game;$(OptionalClientTarget);$(OptionalServerTarget)">
		<ForEach Name="Configuration" Values="$(GameConfigurations)">
			<Compile Target="$(Target)" Platform="Win64" Configuration="$(Configuration)" Tag="#UE4Game Win64" Arguments="-precompile -allmodules -nolink $(VSCompilerArg) $(TargetDebugInfoArg)"/>
			<Compile Target="$(Target)" Platform="Win64" Configuration="$(Configuration)" Tag="#UE4Game Win64" Arguments="-precompile $(VSCompilerArg) $(TargetDebugInfoArg)" Clean="false"/>
		</ForEach>
	</ForEach>
</Node>

在Zip Build选项卡中你可以设置是否在编译完成后使用zip将引擎打包推荐勾选FeaturePacks、Samples、Templates不然新建项目与Level中的选项将会失效。如果用户需要debug那就需要勾选PDB与DEBUG。

“missing PDBCopy”问题解决

构建的时候会遇到一个“missing PDBCopy”的问题。需要下载Win10 SDK安装Debugging Tools for Windows。下载地址 https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk

只需要勾选Debugging Tools for Windows并安装即可解决问题。

构建无源码版本

编译是需要所有的头文件的。所以使用默认设置并在打包Zip时勾选Source,最后再解压把所有*.cpp文件删除。