# - Determines the target architecture of the compilation # # This function checks the architecture that will be built by the compiler # and sets a variable to the architecture # # determine_target_architecture() # # - Example # # include(DetermineTargetArchitecture) # determine_target_architecture(PROJECT_NAME_ARCHITECTURE) if(__determine_target_architecture) return() endif() set(__determine_target_architecture INCLUDED) function(determine_target_architecture FLAG) if (MSVC) if("${MSVC_C_ARCHITECTURE_ID}" STREQUAL "X86") set(ARCH "i686") elseif("${MSVC_C_ARCHITECTURE_ID}" STREQUAL "x64") set(ARCH "x86_64") elseif("${MSVC_C_ARCHITECTURE_ID}" STREQUAL "ARM") set(ARCH "arm") else() message(FATAL_ERROR "Failed to determine the MSVC target architecture: ${MSVC_C_ARCHITECTURE_ID}") endif() else() execute_process( COMMAND ${CMAKE_C_COMPILER} -dumpmachine RESULT_VARIABLE RESULT OUTPUT_VARIABLE ARCH ERROR_QUIET ) if (RESULT) message(FATAL_ERROR "Failed to determine target architecture triplet: ${RESULT}") endif() string(REGEX MATCH "([^-]+).*" ARCH_MATCH ${ARCH}) if (NOT CMAKE_MATCH_1 OR NOT ARCH_MATCH) message(FATAL_ERROR "Failed to match the target architecture triplet: ${ARCH}") endif() set(ARCH ${CMAKE_MATCH_1}) endif() message(STATUS "Target architecture - ${ARCH}") set(FLAG ${ARCH} PARENT_SCOPE) endfunction()