Note: There however are occasions where the old logic can give better shared pchs because it doesn't check whether there is a circular dependency. The new logic does check for circular dependencies so it can sometimes return a safer but less optimal shared PCH. If we find the old logic gives a better shared pch then we go ahead and use it. This will be removed after some of the circular dependencies are resolved.
#rb joe.kirchoff
#preflight 6477e3b87f02573726be946c
[CL 25720154 by bryan sefcik in ue5-main branch]
* Use object type rather than var
* Remove double newlines
* Use pattern matching
#rnx
#preflight 647780095d23eca37d28a387
[CL 25706751 by joe kirchoff in ue5-main branch]
[FYI] Joe.Kirchoff
Original CL Desc
-----------------------------------------------------------------
UnrealBuildTool: More automated code cleanup
#rnx
[CL 25695155 by joe kirchoff in ue5-main branch]
[FYI] jodon.karlik
Original CL Desc
-----------------------------------------------------------------
UBT: Recursively gather the PublicDependencies and link the entire chain so the writer of a module does not need to understand the linking requirements of every Plugin they use.
#jira UE-166371
#preflight 646fbee150786bb5ba9e2ed2
[CL 25646787 by marc audy in ue5-main branch]
#fyi bryan.sefcik
Original CL Desc
-----------------------------------------------------------------
Fixed an issue where the public dependencies weren't being added to the include path list.
#rb joe.kirchoff
#preflight 645d0d91592448f08b9ce111
[CL 25432128 by bryan sefcik in ue5-main branch]
- Update frameworks with a Framework mode to differentiate between linking with it and copying to .app (in case of a static lib framework, or load-only dylib
- Updated CEF3 to work as a normal framework (if we have a universal framework binary, it would be simpler, because LoadInMain() would work without any paths)
#rb roman.dzieciol
#preflight 643484117536ac6b78ae7ce3
[CL 24985043 by Josh Adams in ue5-main branch]
* Add SupportedPlatformGroup attribute, which will resolve to a SupportedPlatform attribute that contains all the platforms in that group
* Allow SupportedConfigurations attribute on ModuleRules
* Filter out -AllModules plugin modules that are unsupported
* Print warning with reference chain when a module is referenced but unsupported
#jira UE-177807
#preflight 641a3684ee0aed1347594abc
#rb Francis.Hurteau
[CL 24756436 by joe kirchoff in ue5-main branch]
- Added IntermediateDirectoryNoArch to UEBuildModule (we can use this in the future to put generated definitions headers, which can help reduce rebuilds going between multi- and single-arch)
#rb Joe.kirchoff
#jira UE-178211,UE-178589
#preflight 63fd3cb72b1a2765f9a46322
[CL 24441385 by josh adams in ue5-main branch]
Changed how single files are built. We don't want to invalidate makefile everytime we build single files since it destroys turnaround times. With this change a single file compile can take 2s (+ the actual compile time).
The new behavior injects a special action per module when creating the makefile. These actions can be used to on-the-fly create a proper compile action that follows the rules of the module that the specific file belongs to.. In a normal build these actions are ignored since the logic deciding which actions to build is backtraced from which binaries we want to create.
When a specific file compile is triggered, the logic deciding which files to build search up all these special actions and create a lookup based on which folders the special actions handle. It then try to find the special action that handles the specific file. The matching special action then creates a compile action that can handle that specific file and then queue up the action for execution. If no special action is found it falls back to try to use actions that have this specific file as input (ispc files for example)
Details:
* Removed lots of custom code for "specific files" handling
* Changed so pch (both private and shared) always use definition file. Added #pragma once and change so pch wrapper file include definition file. This made the adaptive path and specific file easy to implement (just disable pch in compile environment and it will just work)
* Added SingleFileAction for both VCToolChain and ClangToolChain. It now works to compile specific headers and cpp files. (It creates wrapper files on the fly to be able to compile all header files (compiling headers directly blow up if there are circular includes)
* Fixed so GenerateClangDatabase mode works with new changes
* Moved the logic that makes sure all (directly) depending cpp files are recompiled when .h are included in the singlefile option
#preflight 63dcc46f78716a01e8069649
#rb joe.kirchoff
[CL 24094027 by henrik karlsson in ue5-main branch]