kinect/codes/Azure-Kinect-Sensor-SDK/cmake/DetermineTargetArch.cmake

54 lines
2.1 KiB
CMake
Raw Permalink Normal View History

2024-03-06 18:05:53 +00:00
function(determine_target_arch OUTPUT_VARIABLE)
if("${CMAKE_C_COMPILER_ID}" STREQUAL "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")
elseif("${MSVC_C_ARCHITECTURE_ID}" STREQUAL "ARM64")
set(ARCH "arm64")
else()
message(FATAL_ERROR "Unrecognized architecture ${MSVC_C_ARCHITECTURE_ID} from ${CMAKE_C_COMPILER}")
endif()
elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
if("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
set(CMD_ARGS "-target" "${CMAKE_C_COMPILER_TARGET}" "-dumpmachine")
else()
set(CMD_ARGS "-dumpmachine")
endif()
execute_process(
COMMAND
${CMAKE_C_COMPILER} ${CMD_ARGS}
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})
if("${ARCH}" STREQUAL "x86_64")
# Do nothing
elseif("${ARCH}" STREQUAL "aarch64")
set(ARCH "arm64")
elseif("${ARCH}" STREQUAL "i686")
# Do nothing
elseif("${ARCH}" STREQUAL "i386")
# Do nothing
else()
message(FATAL_ERROR "Unrecognized architecture ${ARCH} from ${CMAKE_C_COMPILER}")
endif()
else()
message(FATAL_ERROR "Unrecognized Compiler ${CMAKE_C_COMPILER_ID}")
endif()
message(STATUS "Target architecture - ${ARCH}")
set(${OUTPUT_VARIABLE} ${ARCH} PARENT_SCOPE)
endfunction()