[Development] Precompiled headers enabled for most modules (if you enabled precompiled headers)

Thiago Macieira thiago.macieira at intel.com
Tue Jul 15 17:15:55 CEST 2014

On Tuesday 15 July 2014 15:32:10 Milian Wolff wrote:
> It seems to be related to the number of jobs running, a "make -j1" seems to 
> work most of the time, yet a "make -j40" on a compile cluster fails most of
> the time.

1) one of the compilation processes started before the PCH-creation finished
 a) because qmake generated the wrong rules;
 b) because you have a bug in make
2) the rules are right, but the PCH creation is failing due to bug in the 

Please check all three possibilities. The easiest is to check the rules. Let 
me take the example of QtCore and qglobal.o:

.obj/qglobal.o: /home/thiago/src/qt/qt5/qtbase/src/corelib/global/qglobal.cpp 
../../include/QtCore/qstring.h \
        $(CXX) -c -include .pch/Qt5Core $(CXXFLAGS) $(INCPATH) -o 
.obj/qglobal.o /home/thiago/src/qt/qt5/qtbase/src/corelib/global/qglobal.cpp

So there *is* a rule that makes qglobal.o depend on the PCH output for me. It 
doesn't look like a qmake bug to me.

To check if the bug is in make, you have to watch your system. When it enters 
a new build, does it halt for a second or two trying to precompile the 
headers, and *then* launch the other 40 processes? If so, it's not a make bug.

If the above two prove correct, by process elimination we arrive at a bug in 
the toolchain. You maintioned that this happens when you're using Icecream, 
only sometimes, and when using a high -j. I have two theories for this:

 1) creation got submitted to another machine and the transfer of the file back 
 2) creation succeeded, but icecc did not submit the PCH file to the remote 
machine to compile.

In fact, #2 and remote building is usually at odds. Teambuilder had never fixed 
that. The scripts had rules to remove the PCH including so remote building 
would work.
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center

More information about the Development mailing list