The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/openzfs/config/ax_count_cpus.m4

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 # ===========================================================================
    2 #      https://www.gnu.org/software/autoconf-archive/ax_count_cpus.html
    3 # ===========================================================================
    4 #
    5 # SYNOPSIS
    6 #
    7 #   AX_COUNT_CPUS([ACTION-IF-DETECTED],[ACTION-IF-NOT-DETECTED])
    8 #
    9 # DESCRIPTION
   10 #
   11 #   Attempt to count the number of logical processor cores (including
   12 #   virtual and HT cores) currently available to use on the machine and
   13 #   place detected value in CPU_COUNT variable.
   14 #
   15 #   On successful detection, ACTION-IF-DETECTED is executed if present. If
   16 #   the detection fails, then ACTION-IF-NOT-DETECTED is triggered. The
   17 #   default ACTION-IF-NOT-DETECTED is to set CPU_COUNT to 1.
   18 #
   19 # LICENSE
   20 #
   21 #   Copyright (c) 2014,2016 Karlson2k (Evgeny Grin) <k2k@narod.ru>
   22 #   Copyright (c) 2012 Brian Aker <brian@tangent.org>
   23 #   Copyright (c) 2008 Michael Paul Bailey <jinxidoru@byu.net>
   24 #   Copyright (c) 2008 Christophe Tournayre <turn3r@users.sourceforge.net>
   25 #
   26 #   Copying and distribution of this file, with or without modification, are
   27 #   permitted in any medium without royalty provided the copyright notice
   28 #   and this notice are preserved. This file is offered as-is, without any
   29 #   warranty.
   30 
   31 #serial 22
   32 
   33   AC_DEFUN([AX_COUNT_CPUS],[dnl
   34       AC_REQUIRE([AC_CANONICAL_HOST])dnl
   35       AC_REQUIRE([AC_PROG_EGREP])dnl
   36       AC_MSG_CHECKING([the number of available CPUs])
   37       CPU_COUNT="0"
   38 
   39       # Try generic methods
   40 
   41       # 'getconf' is POSIX utility, but '_NPROCESSORS_ONLN' and
   42       # 'NPROCESSORS_ONLN' are platform-specific
   43       command -v getconf >/dev/null 2>&1 && \
   44         CPU_COUNT=`getconf _NPROCESSORS_ONLN 2>/dev/null || getconf NPROCESSORS_ONLN 2>/dev/null` || CPU_COUNT="0"
   45       AS_IF([[test "$CPU_COUNT" -gt "0" 2>/dev/null || ! command -v nproc >/dev/null 2>&1]],[[: # empty]],[dnl
   46         # 'nproc' is part of GNU Coreutils and is widely available
   47         CPU_COUNT=`OMP_NUM_THREADS='' nproc 2>/dev/null` || CPU_COUNT=`nproc 2>/dev/null` || CPU_COUNT="0"
   48       ])dnl
   49 
   50       AS_IF([[test "$CPU_COUNT" -gt "0" 2>/dev/null]],[[: # empty]],[dnl
   51         # Try platform-specific preferred methods
   52         AS_CASE([[$host_os]],dnl
   53           [[*linux*]],[[CPU_COUNT=`lscpu -p 2>/dev/null | $EGREP -e '^@<:@0-9@:>@+,' -c` || CPU_COUNT="0"]],dnl
   54           [[*darwin*]],[[CPU_COUNT=`sysctl -n hw.logicalcpu 2>/dev/null` || CPU_COUNT="0"]],dnl
   55           [[freebsd*]],[[command -v sysctl >/dev/null 2>&1 && CPU_COUNT=`sysctl -n kern.smp.cpus 2>/dev/null` || CPU_COUNT="0"]],dnl
   56           [[netbsd*]], [[command -v sysctl >/dev/null 2>&1 && CPU_COUNT=`sysctl -n hw.ncpuonline 2>/dev/null` || CPU_COUNT="0"]],dnl
   57           [[solaris*]],[[command -v psrinfo >/dev/null 2>&1 && CPU_COUNT=`psrinfo 2>/dev/null | $EGREP -e '^@<:@0-9@:>@.*on-line' -c 2>/dev/null` || CPU_COUNT="0"]],dnl
   58           [[mingw*]],[[CPU_COUNT=`ls -qpU1 /proc/registry/HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/System/CentralProcessor/ 2>/dev/null | $EGREP -e '^@<:@0-9@:>@+/' -c` || CPU_COUNT="0"]],dnl
   59           [[msys*]],[[CPU_COUNT=`ls -qpU1 /proc/registry/HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/System/CentralProcessor/ 2>/dev/null | $EGREP -e '^@<:@0-9@:>@+/' -c` || CPU_COUNT="0"]],dnl
   60           [[cygwin*]],[[CPU_COUNT=`ls -qpU1 /proc/registry/HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/System/CentralProcessor/ 2>/dev/null | $EGREP -e '^@<:@0-9@:>@+/' -c` || CPU_COUNT="0"]]dnl
   61         )dnl
   62       ])dnl
   63 
   64       AS_IF([[test "$CPU_COUNT" -gt "0" 2>/dev/null || ! command -v sysctl >/dev/null 2>&1]],[[: # empty]],[dnl
   65         # Try less preferred generic method
   66         # 'hw.ncpu' exist on many platforms, but not on GNU/Linux
   67         CPU_COUNT=`sysctl -n hw.ncpu 2>/dev/null` || CPU_COUNT="0"
   68       ])dnl
   69 
   70       AS_IF([[test "$CPU_COUNT" -gt "0" 2>/dev/null]],[[: # empty]],[dnl
   71       # Try platform-specific fallback methods
   72       # They can be less accurate and slower then preferred methods
   73         AS_CASE([[$host_os]],dnl
   74           [[*linux*]],[[CPU_COUNT=`$EGREP -e '^processor' -c /proc/cpuinfo 2>/dev/null` || CPU_COUNT="0"]],dnl
   75           [[*darwin*]],[[CPU_COUNT=`system_profiler SPHardwareDataType 2>/dev/null | $EGREP -i -e 'number of cores:'|cut -d : -f 2 -s|tr -d ' '` || CPU_COUNT="0"]],dnl
   76           [[freebsd*]],[[CPU_COUNT=`dmesg 2>/dev/null| $EGREP -e '^cpu@<:@0-9@:>@+: '|sort -u|$EGREP -e '^' -c` || CPU_COUNT="0"]],dnl
   77           [[netbsd*]], [[CPU_COUNT=`command -v cpuctl >/dev/null 2>&1 && cpuctl list 2>/dev/null| $EGREP -e '^@<:@0-9@:>@+ .* online ' -c` || \
   78                            CPU_COUNT=`dmesg 2>/dev/null| $EGREP -e '^cpu@<:@0-9@:>@+ at'|sort -u|$EGREP -e '^' -c` || CPU_COUNT="0"]],dnl
   79           [[solaris*]],[[command -v kstat >/dev/null 2>&1 && CPU_COUNT=`kstat -m cpu_info -s state -p 2>/dev/null | $EGREP -c -e 'on-line'` || \
   80                            CPU_COUNT=`kstat -m cpu_info 2>/dev/null | $EGREP -c -e 'module: cpu_info'` || CPU_COUNT="0"]],dnl
   81           [[mingw*]],[AS_IF([[CPU_COUNT=`reg query 'HKLM\\Hardware\\Description\\System\\CentralProcessor' 2>/dev/null | $EGREP -e '\\\\@<:@0-9@:>@+$' -c`]],dnl
   82                         [[: # empty]],[[test "$NUMBER_OF_PROCESSORS" -gt "0" 2>/dev/null && CPU_COUNT="$NUMBER_OF_PROCESSORS"]])],dnl
   83           [[msys*]],[[test "$NUMBER_OF_PROCESSORS" -gt "0" 2>/dev/null && CPU_COUNT="$NUMBER_OF_PROCESSORS"]],dnl
   84           [[cygwin*]],[[test "$NUMBER_OF_PROCESSORS" -gt "0" 2>/dev/null && CPU_COUNT="$NUMBER_OF_PROCESSORS"]]dnl
   85         )dnl
   86       ])dnl
   87 
   88       AS_IF([[test "x$CPU_COUNT" != "x0" && test "$CPU_COUNT" -gt 0 2>/dev/null]],[dnl
   89           AC_MSG_RESULT([[$CPU_COUNT]])
   90           m4_ifvaln([$1],[$1],)dnl
   91         ],[dnl
   92           m4_ifval([$2],[dnl
   93             AS_UNSET([[CPU_COUNT]])
   94             AC_MSG_RESULT([[unable to detect]])
   95             $2
   96           ], [dnl
   97             CPU_COUNT="1"
   98             AC_MSG_RESULT([[unable to detect (assuming 1)]])
   99           ])dnl
  100         ])dnl
  101       ])dnl

Cache object: 7cc758fffa0dbcba81fdde39088e21e3


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.