diff options
Diffstat (limited to 'Modules/ProcessorCount.cmake')
-rw-r--r-- | Modules/ProcessorCount.cmake | 63 |
1 files changed, 44 insertions, 19 deletions
diff --git a/Modules/ProcessorCount.cmake b/Modules/ProcessorCount.cmake index 0d1dfda..0fe0b32 100644 --- a/Modules/ProcessorCount.cmake +++ b/Modules/ProcessorCount.cmake @@ -1,30 +1,41 @@ -# - ProcessorCount(var) +#.rst: +# ProcessorCount +# -------------- +# +# ProcessorCount(var) +# # Determine the number of processors/cores and save value in ${var} # -# Sets the variable named ${var} to the number of physical cores available on -# the machine if the information can be determined. Otherwise it is set to 0. -# Currently this functionality is implemented for AIX, cygwin, FreeBSD, HPUX, -# IRIX, Linux, Mac OS X, QNX, Sun and Windows. +# Sets the variable named ${var} to the number of physical cores +# available on the machine if the information can be determined. +# Otherwise it is set to 0. Currently this functionality is implemented +# for AIX, cygwin, FreeBSD, HPUX, IRIX, Linux, Mac OS X, QNX, Sun and +# Windows. # # This function is guaranteed to return a positive integer (>=1) if it -# succeeds. It returns 0 if there's a problem determining the processor count. +# succeeds. It returns 0 if there's a problem determining the processor +# count. # # Example use, in a ctest -S dashboard script: # -# include(ProcessorCount) -# ProcessorCount(N) -# if(NOT N EQUAL 0) -# set(CTEST_BUILD_FLAGS -j${N}) -# set(ctest_test_args ${ctest_test_args} PARALLEL_LEVEL ${N}) -# endif() +# :: +# +# include(ProcessorCount) +# ProcessorCount(N) +# if(NOT N EQUAL 0) +# set(CTEST_BUILD_FLAGS -j${N}) +# set(ctest_test_args ${ctest_test_args} PARALLEL_LEVEL ${N}) +# endif() # -# This function is intended to offer an approximation of the value of the -# number of compute cores available on the current machine, such that you -# may use that value for parallel building and parallel testing. It is meant -# to help utilize as much of the machine as seems reasonable. Of course, -# knowledge of what else might be running on the machine simultaneously -# should be used when deciding whether to request a machine's full capacity -# all for yourself. +# +# +# This function is intended to offer an approximation of the value of +# the number of compute cores available on the current machine, such +# that you may use that value for parallel building and parallel +# testing. It is meant to help utilize as much of the machine as seems +# reasonable. Of course, knowledge of what else might be running on the +# machine simultaneously should be used when deciding whether to request +# a machine's full capacity all for yourself. # A more reliable way might be to compile a small C program that uses the CPUID # instruction, but that again requires compiler support or compiling assembler @@ -171,6 +182,20 @@ function(ProcessorCount var) endif() endif() + if(NOT count) + # Haiku + find_program(ProcessorCount_cmd_sysinfo sysinfo) + if(ProcessorCount_cmd_sysinfo) + execute_process(COMMAND ${ProcessorCount_cmd_sysinfo} + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE + OUTPUT_VARIABLE sysinfo_X_output) + string(REGEX MATCHALL "\nCPU #[0-9]+:" procs "\n${sysinfo_X_output}") + list(LENGTH procs count) + #message("ProcessorCount: trying sysinfo '${ProcessorCount_cmd_sysinfo}'") + endif() + endif() + # Since cygwin builds of CMake do not define WIN32 anymore, but they still # run on Windows, and will still have this env var defined: # |