Let qmake find the number of processors online

Instead of trying to load in ltcg.prf and cache the value.

Change-Id: If485ff68fc6ff9d9cf7009cd72d5e702d0199c7f
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
This commit is contained in:
Thiago Macieira 2014-07-21 10:21:02 -07:00
parent 62b752b3a2
commit d7795559a7
2 changed files with 39 additions and 8 deletions

View File

@ -15,16 +15,10 @@ CONFIG(release, debug|release) {
QMAKE_CFLAGS_LTCG += -fno-fat-lto-objects QMAKE_CFLAGS_LTCG += -fno-fat-lto-objects
QMAKE_CXXFLAGS_LTCG += -fno-fat-lto-objects QMAKE_CXXFLAGS_LTCG += -fno-fat-lto-objects
} }
linux { greaterThan(QMAKE_HOST.cpu_count, 1) {
# Get the number of online processors, like _SC_NPROCESSORS_ONLN
isEmpty(QMAKE_NPROCESSORS_ONLN) {
QMAKE_NPROCESSORS_ONLN = $$system("grep -c '^processor' /proc/cpuinfo 2>/dev/null || echo 1")
cache(QMAKE_NPROCESSORS_ONLN, set stash)
}
# Override LTO number of jobs # Override LTO number of jobs
QMAKE_LFLAGS_LTCG -= -flto QMAKE_LFLAGS_LTCG -= -flto
QMAKE_LFLAGS_LTCG += -flto=$$QMAKE_NPROCESSORS_ONLN QMAKE_LFLAGS_LTCG += -flto=$$QMAKE_HOST.cpu_count
} }
} else: static { } else: static {
QMAKE_CFLAGS_LTCG = QMAKE_CFLAGS_LTCG =

View File

@ -58,6 +58,9 @@
#ifdef Q_OS_UNIX #ifdef Q_OS_UNIX
#include <unistd.h> #include <unistd.h>
#include <sys/utsname.h> #include <sys/utsname.h>
# ifdef Q_OS_BSD4
# include <sys/sysctl.h>
# endif
#else #else
#include <windows.h> #include <windows.h>
#endif #endif
@ -70,6 +73,39 @@ QT_BEGIN_NAMESPACE
#define fL1S(s) QString::fromLatin1(s) #define fL1S(s) QString::fromLatin1(s)
// we can't use QThread in qmake
// this function is a merger of QThread::idealThreadCount from qthread_win.cpp and qthread_unix.cpp
static int idealThreadCount()
{
#ifdef PROEVALUATOR_THREAD_SAFE
return QThread::idealThreadCount();
#elif defined(Q_OS_WIN)
SYSTEM_INFO sysinfo;
GetSystemInfo(&sysinfo);
return sysinfo.dwNumberOfProcessors;
#else
// there are a couple more definitions in the Unix QThread::idealThreadCount, but
// we don't need them all here
int cores = 1;
# if defined(Q_OS_BSD4)
// FreeBSD, OpenBSD, NetBSD, BSD/OS, Mac OS X
size_t len = sizeof(cores);
int mib[2];
mib[0] = CTL_HW;
mib[1] = HW_NCPU;
if (sysctl(mib, 2, &cores, &len, NULL, 0) != 0) {
perror("sysctl");
}
# elif defined(_SC_NPROCESSORS_ONLN)
// the rest: Linux, Solaris, AIX, Tru64
cores = (int)sysconf(_SC_NPROCESSORS_ONLN);
if (cores == -1)
return 1;
# endif
return cores;
#endif
}
QMakeBaseKey::QMakeBaseKey(const QString &_root, const QString &_stash, bool _hostBuild) QMakeBaseKey::QMakeBaseKey(const QString &_root, const QString &_stash, bool _hostBuild)
: root(_root), stash(_stash), hostBuild(_hostBuild) : root(_root), stash(_stash), hostBuild(_hostBuild)
@ -955,6 +991,7 @@ void QMakeEvaluator::loadDefaults()
vars[ProKey("QMAKE_QMAKE")] << ProString(m_option->qmake_abslocation); vars[ProKey("QMAKE_QMAKE")] << ProString(m_option->qmake_abslocation);
if (!m_option->qmake_args.isEmpty()) if (!m_option->qmake_args.isEmpty())
vars[ProKey("QMAKE_ARGS")] = ProStringList(m_option->qmake_args); vars[ProKey("QMAKE_ARGS")] = ProStringList(m_option->qmake_args);
vars[ProKey("QMAKE_HOST.cpu_count")] = ProString(QString::number(idealThreadCount()));
#if defined(Q_OS_WIN32) #if defined(Q_OS_WIN32)
vars[ProKey("QMAKE_HOST.os")] << ProString("Windows"); vars[ProKey("QMAKE_HOST.os")] << ProString("Windows");