# Shared detection of compiler, operating system, and architecture. # # This module centralizes environment detection so that other CMake modules can use the same variables instead of # repeating checks on CMAKE_* and built-in platform variables. # Only run once per configure step. include_guard(GLOBAL) # -------------------------------------------------------------------- # Compiler detection (C++) # -------------------------------------------------------------------- set(is_clang FALSE) set(is_gcc FALSE) set(is_msvc FALSE) set(is_xcode FALSE) if(CMAKE_CXX_COMPILER_ID MATCHES ".*Clang") # Clang or AppleClang set(is_clang TRUE) elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set(is_gcc TRUE) elseif(MSVC) set(is_msvc TRUE) else() message(FATAL_ERROR "Unsupported C++ compiler: ${CMAKE_CXX_COMPILER_ID}") endif() # Xcode generator detection if(CMAKE_GENERATOR STREQUAL "Xcode") set(is_xcode TRUE) endif() # -------------------------------------------------------------------- # Operating system detection # -------------------------------------------------------------------- set(is_linux FALSE) set(is_windows FALSE) set(is_macos FALSE) if(CMAKE_SYSTEM_NAME STREQUAL "Linux") set(is_linux TRUE) elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") set(is_windows TRUE) elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") set(is_macos TRUE) endif() # -------------------------------------------------------------------- # Architecture # -------------------------------------------------------------------- set(is_amd64 FALSE) set(is_arm64 FALSE) if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64") set(is_amd64 TRUE) elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64|ARM64") set(is_arm64 TRUE) else() message(FATAL_ERROR "Unknown architecture: ${CMAKE_SYSTEM_PROCESSOR}") endif()