* A makefile is now constructed for each target, and the outdated actions are combined into a single graph before execution.
* Makefiles are used in all build modes, regardless of whether they are saved to disk, and represent the vector by which a target's build actions are passed to the executor.
* The -JsonExport= argument has been removed, and a separate JsonExport mode has been added (invoke with eg. "-Mode=JsonExport UE4Editor Win64 Development")
* Multiple action history files are kept open at one time, and a hierarchy is used for each target.
#rb none
[CL 4667512 by Ben Marsh in Dev-Build branch]
* A standalone Win32 application called cl-filter is used to parse output from running the Visual Studio compiler with the /showIncludes option, and generate a dependency list similar to Clang.
* Actions which produce an external dependency list declare it explicitly. If the dependency list is missing, or any of the contents are out of date, the action is rebuilt.
* The contents of dependency lists are cached by the CppDependencyCache class for future iterations.
#rb none
[CL 4665060 by Ben Marsh in Dev-Build branch]
* Hot reload now shares the regular UBT makefile, significantly improving performance for first-time compile. The history of previous hot-reloads is stored in an intermediate file (see GetHotReloadStateFile()), allowing the action graph to be patched to the last hot reload state before executing the build rather than creating a separate makefile. (A nice side effect of this is that it allows tracking hot reload attempts, and assigning incremental suffixes rather than random numbers for each run).
* The list of modules eligable for hot reload is now explicitly saved to the makefile. During a hot reload from IDE invocation, we always try to build all out of date modules and only apply suffixes to those that support it. This prevents the confusing behavior where an editor open in the background will not attempt to build certain files.
* Logic for building dependent modules is now significantly more reliable. Only modules with changes are rebuilt, and all dependent modules of those modules are correctly rebuilt too. The -CanSkipLink option is no longer necessary, and has been removed.
* All code for dealing with hot-reload only happens when the action graph is executed. The construction of a target no longer has any knowledge of whether hot reload is enabled or not.
#fyi Steve.Robb
#rb none
[CL 4621192 by Ben Marsh in Dev-Build branch]