#rb Per.Larsson
#jira UE-218584
#rnx
- This is only intended for development and testing IoStoreOnDemand as it allows us to apply it to a project without changing the project files on disk. This should not be used to enable the feature on a project in production.
### Enabling the code module
- When forcing on IoStoreOnDemand, BuildCookRun will pass '-CompileIoStoreOnDemand' to UnrealBuildTool which will set 'bCompileIoStoreOnDemand' to true in the target rules. This in turn will add the 'IoStoreOnDemand' module to the Engine module but only for runtime targets.
- None of this should be used when enabling the feature for a project permanentl, instead just add 'IoStoreOnDemand' module to your project's *.build.cs
### Staging SSL certificates
- IoStoreOnDemand needs access to the engine/project#s SSL certificates at runtime so we need to stage them, which is done by forcing 'bStageSSLCertificates' to be true during BuildCookRun.
- To do this properly for a project set ini:Engine:[/Script/Engine.NetworkSettings]:n.VerifyPeer=true
### Generate Chunks
- In order for IoStoreOnDemand to work we need to generate chunks (more than one container file) which can be done by forcing ProjectParams.Manifests to true.
- To do this properly for a project set ini:Game:[/Script/UnrealEd.ProjectPackagingSettings]:bGenerateChunks=true
### Pak Rules
- Once chunked builds are enabled IoStoreOnDemand will require at least one PakRule that sets 'bOnDemand' to true. So first we check to see if any rules like this for the existing project and if not we force add one via CreateIoStoreOnDemandPakRules. This rule will include all *.ubulk and *.uptnl files except ones found under a \map\ directory. This is because some level bulkdata files can get too large for IoStoreOnDemand to support so excluding anything under a map directory is a quick and easy way to try and work around that. The end result is that other than map data, pretty much all bulkdata will end up on demand, which is a good stress test for the system but not a great representation on how the system should be used.
- If you are trying to set up rules properly you'd need to consider what data you actually want to stream over the network and what data you want to remain on disk, which would greatly depend on your project set up. One popular choice is to only stream optional (.uptnl) bulkdata and leave the required bulkdata to be found on disk.
### Enabling Persistent Local Storage
- IoStoreOnDemand requires persistent local storage to be set aside for it's caching which may or may not require special set up for a project depending on the target platform. If we detect that the current project has not been set up for persistent local storage we will attempt to enable it for the project during staging.
- To set this up properly you will need to consult the documentation for your target platform and follow the instructions.
[CL 34702097 by paul chipchase in ue5-main branch]
* Optionally output a CSV of changed/new packages.
* Add an additional directory input if containers get separated off during a build process
* Catch optional segment containers and patch up the container id per the id fix in a separate CL.
bunch of different preflights due to CIS issues.
#rb fabian.giesen
#jira UE-172130
[CL 31576665 by dan thompson in ue5-main branch]
- Note Cook is true when -skipcook is set on command line so the condition itself is valid it just was missing -skipcook in the exception message
[REVIEW] [at]Alejandro.Aguilar [at]Rob.Cannaday
#rb alejandro.aguilar
[CL 30806276 by chris varnsverry in ue5-main branch]
- The target receipt already listed the proper exe to run, taking unique/shared into account, so this change delayed-looks-up the path from the receipt on first use (like when running the editor to cook)
#rb david.harvey
[CL 30658383 by josh adams in ue5-main branch]
The file open log is a facility that automatically keeps a log of all files the process has opened and their order. This is rather expensive as it (a) also tracks failed attempts to open files and (b) it maintains a large table in memory, storing which files have already been opened (so every file is only logged once). This table can easily grow into the tens of megabytes; even on an empty project I see this taking 60MB by itself. Making this optional allows us to skip this step for UEFN cloud cooks: in these cases we're throwing that log file away anyway.
#rb rob.perren
[CL 30344591 by sebastian schoner in ue5-main branch]
Fix cooker to store all metadata in the RemappedPlugins.
Fix cooker for even normal DLCs to store all metadata in the DLC's directory rather than the project's directory.
#jira UE-192828
#rn Bugfix, Core
#rb Zousar.Shaker
[CL 27205588 by Matt Peters in ue5-main branch]
Adding buildgraph option to EnablePlugins for cooking and building. Enabling a plugin in the buildgraph will enable it for cook and compilation but will not enable it in the application that must be done via other means
Updating BuildCookRun commands so they pass the EnablePlugins command through the build system
[FYI] Taylor.Robert
[CL 25881480 by eric knapik in ue5-main branch]
- do not need to specify a default server target when doing -cook
- UFE allows launching default Game and Client targets now that a default can be specified in BuildSettings (note that it won't verify that a default has been configured - UAT handles this)
#jira UE-181924
#rb Josh.Adams
#preflight 6446823027014596f36a5411
[CL 25163212 by David Harvey in ue5-main branch]
Game client now accepts only -filehostip for connection to a CTOF server, -cookonthefly is no longer necessary and is ignored.
Game client will now receive ProjectName (ProjectId), Platform (OplogId), Zen server host name and port from COTF server if running with zenstore.
Fixed issues with generating the ProjectId from a path where drive letters where lower case.
#rb zousar.shaker pj.kack
#preflight
[CL 24889513 by dan engelbrecht in ue5-main branch]
* Updated LauncherTool to traverse the class interfaces looking for attributes. Using GetCustomAttributes is not good enough because it will not find the HelpAttributes because the base attribute class(DescriptionAttribute) does not explicitly mark itself that the attribute is inherited.
#rb gary.yuan
#preflight 64028b895515f4f57b0a62c0
[CL 24511953 by bryan sefcik in ue5-main branch]