summaryrefslogtreecommitdiffstats
path: root/src/util.cc
diff options
context:
space:
mode:
authorEvan Martin <martine@danga.com>2012-07-28 20:32:23 (GMT)
committerEvan Martin <martine@danga.com>2012-07-28 20:32:23 (GMT)
commitdcaa573cc2e6f30d346262b3c42d4497a539d90d (patch)
tree5c324652fcbd25b97e5f993693517f2172062668 /src/util.cc
parent0f56b0e5ebe20eccefe064875d15acb3b9378e2a (diff)
downloadNinja-dcaa573cc2e6f30d346262b3c42d4497a539d90d.zip
Ninja-dcaa573cc2e6f30d346262b3c42d4497a539d90d.tar.gz
Ninja-dcaa573cc2e6f30d346262b3c42d4497a539d90d.tar.bz2
move processor-count code to util.cc
Diffstat (limited to 'src/util.cc')
-rw-r--r--src/util.cc30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/util.cc b/src/util.cc
index 10c9dc6..4ce610b 100644
--- a/src/util.cc
+++ b/src/util.cc
@@ -38,6 +38,12 @@
#include <direct.h> // _mkdir
#endif
+#if defined(__APPLE__) || defined(__FreeBSD__)
+#include <sys/sysctl.h>
+#elif defined(linux)
+#include <sys/sysinfo.h>
+#endif
+
#include "edit_distance.h"
#include "metrics.h"
@@ -283,6 +289,30 @@ string StripAnsiEscapeCodes(const string& in) {
return stripped;
}
+#if defined(linux)
+int GetProcessorCount() {
+ return get_nprocs();
+}
+#elif defined(__APPLE__) || defined(__FreeBSD__)
+int GetProcessorCount() {
+ int processors;
+ size_t processors_size = sizeof(processors);
+ int name[] = {CTL_HW, HW_NCPU};
+ if (sysctl(name, sizeof(name) / sizeof(int),
+ &processors, &processors_size,
+ NULL, 0) < 0) {
+ return 0;
+ }
+ return processors;
+}
+#elif defined(_WIN32)
+int GetProcessorCount() {
+ SYSTEM_INFO info;
+ GetSystemInfo(&info);
+ return info.dwNumberOfProcessors;
+}
+#endif
+
#ifdef _WIN32
double GetLoadAverage() {
// TODO(nicolas.despres@gmail.com): Find a way to implement it on Windows.