diff options
author | Evan Martin <martine@danga.com> | 2012-07-28 20:32:23 (GMT) |
---|---|---|
committer | Evan Martin <martine@danga.com> | 2012-07-28 20:32:23 (GMT) |
commit | dcaa573cc2e6f30d346262b3c42d4497a539d90d (patch) | |
tree | 5c324652fcbd25b97e5f993693517f2172062668 /src/util.cc | |
parent | 0f56b0e5ebe20eccefe064875d15acb3b9378e2a (diff) | |
download | Ninja-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.cc | 30 |
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. |