cmake_host_system_information

Query host system specific information.

cmake_host_system_information(RESULT <variable> QUERY <key> ...)

Queries system information of the host system on which cmake runs. One or more <key> can be provided to select the information to be queried. The list of queried values is stored in <variable>.

<key> can be one of the following values:

NUMBER_OF_LOGICAL_CORES

Number of logical cores

NUMBER_OF_PHYSICAL_CORES

Number of physical cores

HOSTNAME

Hostname

FQDN

Fully qualified domain name

TOTAL_VIRTUAL_MEMORY

Total virtual memory in MiB 1

AVAILABLE_VIRTUAL_MEMORY

Available virtual memory in MiB 1

TOTAL_PHYSICAL_MEMORY

Total physical memory in MiB 1

AVAILABLE_PHYSICAL_MEMORY

Available physical memory in MiB 1

IS_64BIT

New in version 3.10.

One if processor is 64Bit

HAS_FPU

New in version 3.10.

One if processor has floating point unit

HAS_MMX

New in version 3.10.

One if processor supports MMX instructions

HAS_MMX_PLUS

New in version 3.10.

One if processor supports Ext. MMX instructions

HAS_SSE

New in version 3.10.

One if processor supports SSE instructions

HAS_SSE2

New in version 3.10.

One if processor supports SSE2 instructions

HAS_SSE_FP

New in version 3.10.

One if processor supports SSE FP instructions

HAS_SSE_MMX

New in version 3.10.

One if processor supports SSE MMX instructions

HAS_AMD_3DNOW

New in version 3.10.

One if processor supports 3DNow instructions

HAS_AMD_3DNOW_PLUS

New in version 3.10.

One if processor supports 3DNow+ instructions

HAS_IA64

New in version 3.10.

One if IA64 processor emulating x86

HAS_SERIAL_NUMBER

New in version 3.10.

One if processor has serial number

PROCESSOR_SERIAL_NUMBER

New in version 3.10.

Processor serial number

PROCESSOR_NAME

New in version 3.10.

Human readable processor name

PROCESSOR_DESCRIPTION

New in version 3.10.

Human readable full processor description

OS_NAME

New in version 3.10.

See CMAKE_HOST_SYSTEM_NAME

OS_RELEASE

New in version 3.10.

The OS sub-type e.g. on Windows Professional

OS_VERSION

New in version 3.10.

The OS build ID

OS_PLATFORM

New in version 3.10.

See CMAKE_HOST_SYSTEM_PROCESSOR

DISTRIB_INFO

New in version 3.22.

Read /etc/os-release file and define the given <variable> into a list of read variables

DISTRIB_<name>

New in version 3.22.

Get the <name> variable (see man 5 os-release) if it exists in the /etc/os-release file

Example:

cmake_host_system_information(RESULT PRETTY_NAME QUERY DISTRIB_PRETTY_NAME)
message(STATUS "${PRETTY_NAME}")

cmake_host_system_information(RESULT DISTRO QUERY DISTRIB_INFO)

foreach(VAR IN LISTS DISTRO)
  message(STATUS "${VAR}=`${${VAR}}`")
endforeach()

Output:

-- Ubuntu 20.04.2 LTS
-- DISTRO_BUG_REPORT_URL=`https://bugs.launchpad.net/ubuntu/`
-- DISTRO_HOME_URL=`https://www.ubuntu.com/`
-- DISTRO_ID=`ubuntu`
-- DISTRO_ID_LIKE=`debian`
-- DISTRO_NAME=`Ubuntu`
-- DISTRO_PRETTY_NAME=`Ubuntu 20.04.2 LTS`
-- DISTRO_PRIVACY_POLICY_URL=`https://www.ubuntu.com/legal/terms-and-policies/privacy-policy`
-- DISTRO_SUPPORT_URL=`https://help.ubuntu.com/`
-- DISTRO_UBUNTU_CODENAME=`focal`
-- DISTRO_VERSION=`20.04.2 LTS (Focal Fossa)`
-- DISTRO_VERSION_CODENAME=`focal`
-- DISTRO_VERSION_ID=`20.04`

If /etc/os-release file is not found, the command tries to gather OS identification via fallback scripts. The fallback script can use various distribution-specific files to collect OS identification data and map it into man 5 os-release variables.

Fallback Interface Variables

CMAKE_GET_OS_RELEASE_FALLBACK_SCRIPTS

In addition to the scripts shipped with CMake, a user may append full paths to his script(s) to the this list. The script filename has the following format: NNN-<name>.cmake, where NNN is three digits used to apply collected scripts in a specific order.

CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_<varname>

Variables collected by the user provided fallback script ought to be assigned to CMake variables using this naming convention. Example, the ID variable from the manual becomes CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID.

CMAKE_GET_OS_RELEASE_FALLBACK_RESULT

The fallback script ought to store names of all assigned CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_<varname> variables in this list.

Example:

# Try to detect some old distribution
# See also
# - http://linuxmafia.com/faq/Admin/release-files.html
#
if(NOT EXISTS "${CMAKE_SYSROOT}/etc/foobar-release")
  return()
endif()
# Get the first string only
file(
    STRINGS "${CMAKE_SYSROOT}/etc/foobar-release" CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT
    LIMIT_COUNT 1
  )
#
# Example:
#
#   Foobar distribution release 1.2.3 (server)
#
if(CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT MATCHES "Foobar distribution release ([0-9\.]+) .*")
  set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_NAME Foobar)
  set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_PRETTY_NAME "${CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT}")
  set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID foobar)
  set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION ${CMAKE_MATCH_1})
  set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION_ID ${CMAKE_MATCH_1})
  list(
      APPEND CMAKE_GET_OS_RELEASE_FALLBACK_RESULT
      CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_NAME
      CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_PRETTY_NAME
      CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID
      CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION
      CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION_ID
    )
endif()
unset(CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT)

Footnotes

1(1,2,3,4)

One MiB (mebibyte) is equal to 1024x1024 bytes.