From d7795559a7b80d3ec0a1eb86d29deaca6074f4ed Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 21 Jul 2014 10:21:02 -0700 Subject: 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 --- qmake/library/qmakeevaluator.cpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'qmake') diff --git a/qmake/library/qmakeevaluator.cpp b/qmake/library/qmakeevaluator.cpp index 4eb624aa87..e6d666f1b7 100644 --- a/qmake/library/qmakeevaluator.cpp +++ b/qmake/library/qmakeevaluator.cpp @@ -58,6 +58,9 @@ #ifdef Q_OS_UNIX #include #include +# ifdef Q_OS_BSD4 +# include +# endif #else #include #endif @@ -70,6 +73,39 @@ QT_BEGIN_NAMESPACE #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) : root(_root), stash(_stash), hostBuild(_hostBuild) @@ -955,6 +991,7 @@ void QMakeEvaluator::loadDefaults() vars[ProKey("QMAKE_QMAKE")] << ProString(m_option->qmake_abslocation); if (!m_option->qmake_args.isEmpty()) vars[ProKey("QMAKE_ARGS")] = ProStringList(m_option->qmake_args); + vars[ProKey("QMAKE_HOST.cpu_count")] = ProString(QString::number(idealThreadCount())); #if defined(Q_OS_WIN32) vars[ProKey("QMAKE_HOST.os")] << ProString("Windows"); -- cgit v1.2.3