What's wrong with compiling on 4.16?

Hello,

A very long compilation at 4.16 with IWYU enabled, 4.15 with IWYU enabled everything was fine (!)

Does not work HotReload, the any changes a couple of minutes(!) of compilation (at 4.15 … 10-20 seconds)

Can I disable SharedPCH ??? Where did BuildConfiguration.xml in 4.16 go?
Advise something, it is impossible to work. Thanks!

Here for comparison, two complete recompilation of the project from 4.15 and 4.16

4.16

Performing 28 actions (2 in parallel)
2> [2/28] Resource PCLaunch.rc
2> [3/28] Resource ModuleVersionResource.rc.inl
2> SharedPCH.Engine.cpp…< ?? This was not at 4.15, VERY SLOWLY, can I disable it?

2> Total build time: 391,02 seconds (Local executor: 369,61 seconds)
========== Rebuild All: 2 succeeded, 0 failed, 0 skipped ==========

4.15

Performing 27 actions (2 in parallel)
2> DifferentMix.cpp
2> LoginWidgets.cpp

2> Total build time: 125,88 seconds (Local executor: 112,50 seconds)
========== Rebuild All: 2 succeeded, 0 failed, 0 skipped ==========

The PCH is only built once when you upgrade the project to 4.16, next builds should be faster than 4.15 ones.

Small same changes, what’s wrong?

4.15

1>------ Build started: Project: Client, Configuration: Development_Editor x64 ------
1> Performing 3 actions (2 in parallel)
1> ClientGameMode.cpp
1> [2/3] Link UE4Editor-Client.dll
1> [3/3] Link UE4Editor-Client.lib

1> Deploying ClientEditor Win64 Development…
1> Total build time: 37,04 seconds (Local executor: 35,79 seconds)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

4.16

1>------ Build started: Project: Client, Configuration: Development_Editor x64 ------
1> Performing 3 actions (2 in parallel)
1> ClientGameMode.cpp
1> [2/3] Link UE4Editor-Client.dll
1> [3/3] Link UE4Editor-Client.lib

1> Deploying ClientEditor Win64 Development…
1> Total build time: 497,47 seconds (Local executor: 495,95 seconds)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

With blank project (4.16), adding log message, comment/uncomment

void AClientGameMode::BeginPlay()
{
//GLog->Log(“hh”);
}

1> Performing 3 actions (2 in parallel)
1> ClientGameMode.cpp
1> [2/3] Link UE4Editor-Client-3433.dll
1> [3/3] Link UE4Editor-Client-2691.lib

1> Total build time: **135,86 seconds **(Local executor: 0,00 seconds)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

Well there’s definitely something wrong. Maybe try reinstalling? It takes 4 seconds to compile a change for me.

I changed PCHUsageMode to NoSharedPCHs or Default in Build.cs and everything was as 4.15.
But in 4.15 UseExplicitOrSharedPCHs works.

// this do not work for me
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PCHUsage = PCHUsageMode.UseSharedPCHs;

// work the same way
PCHUsage = PCHUsageMode.NoSharedPCHs;
PCHUsage = PCHUsageMode.Default;

1> Performing 3 actions (2 in parallel)
1> ClientGameMode.cpp
1> [2/3] Link UE4Editor-Client-7868.dll
1> [3/3] Link UE4Editor-Client-7695.lib

1> Total build time:** 20,27 seconds** (Local executor: 0,00 seconds)

========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

I’m trying to use IWYU in my game project, but it’s about twice slower that before. Using 4.15.3.
Using settings:
[FONT=Courier New]PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
bEnforceIWYU = true;

It compiles successfully.

What I’m doing wrong?

I cannot compile C++ projects in 4.16 at all. It just does not work. It has something to do with some modules that need disabling or something I don’t know where that is in the system…

I was having very long compile times at home until I moved the engine over to my SSD. I noticed on my spin drive, the compile times would be wildly different. Sometimes a few seconds, sometimes upwards of 400 seconds. When I moved to the solid state, everything is consistently shorter than 30 seconds, when compiling the game.

Yep, I was going to say @Syntopia, did you maybe install 4.16 onto a slower drive? I have older engine versions installed on an external drive, and compile times are basically unworkable in that situation with regular precompiled headers. If you check task manager or equivalent, you’ll see I think that your cores are mostly idling because the compilation is heavily I/O bound due to the huge PCH files.

One trick I found was to just use a symlink to allow the engine to be installed on a secondary drive but host the folder containing engine PCH files on an SSD. That way the performance problem is averted but you still save 99% of the disk space on the SSD.

[MENTION=493242]Kyle Langley[/MENTION], do you happen to know why the engine shared PCHs get rebuilt by projects, even though there is only one copy of them in the engine intermediate folders? They just get overwritten when building different projects, so it seems like they should just be built once with the engine and not rebuilt by projects at all.

I do not know why. I am learning a lot of how the Unreal Build Tools work along side everybody else here. I will update this if I find out.