| ##===- DetectArchitecture.cmake -------------------------------------------===## |
| # |
| # Performs a try_compile to determine the architecture of the target. |
| # |
| ##===----------------------------------------------------------------------===## |
| |
| function(detect_architecture variable) |
| try_compile(HAVE_${variable} |
| ${CMAKE_BINARY_DIR} |
| ${CMAKE_SOURCE_DIR}/cmake/modules/DetectArchitecture.c |
| OUTPUT_VARIABLE OUTPUT |
| COPY_FILE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/DetectArchitecture.bin) |
| |
| if(HAVE_${variable}) |
| file(STRINGS ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/DetectArchitecture.bin |
| DETECT_ARCH_STRING LIMIT_COUNT 1 REGEX "ARCHITECTURE IS") |
| if(DETECT_ARCH_STRING) |
| string(REGEX MATCH "[^ ]*$" DETECT_ARCH_MATCH ${DETECT_ARCH_STRING}) |
| if(DETECT_ARCH_MATCH) |
| message(STATUS "Check target system architecture: ${DETECT_ARCH_MATCH}") |
| set(${variable} ${DETECT_ARCH_MATCH} PARENT_SCOPE) |
| else() |
| message(SEND_ERROR "Could not detect target system architecture!") |
| endif() |
| else() |
| message(SEND_ERROR "Could not detect target system architecture!") |
| endif() |
| else() |
| message(STATUS "Determine the system architecture - failed") |
| file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log |
| "Determining the system architecture failed with the following output:\n${OUTPUT}") |
| set(${variable} PARENT_SCOPE) |
| endif() |
| |
| endfunction(detect_architecture) |
| |
| # |
| # Performs a try_run to determine the cpu architecture of target |
| # |
| |
| function(detect_x86_cpu_architecture variable) |
| try_run(HAVE_RUN_${variable} HAVE_COMPILE_${variable} |
| ${CMAKE_BINARY_DIR} |
| ${CMAKE_SOURCE_DIR}/cmake/modules/DetectX86CPUArchitecture.c |
| COMPILE_OUTPUT_VARIABLE COMP_OUTPUT |
| RUN_OUTPUT_VARIABLE RUN_OUTPUT) |
| |
| if(HAVE_COMPILE_${variable} AND NOT (HAVE_RUN_${variable} STREQUAL FAILED_TO_RUN)) |
| if(RUN_OUTPUT) |
| message(STATUS "Check target system architecture: ${RUN_OUTPUT}") |
| set(${variable} ${RUN_OUTPUT} PARENT_SCOPE) |
| else() |
| message(SEND_ERROR "Could not detect target system cpu architecture!") |
| endif() |
| else() |
| message(STATUS "Determine the system cpu architecture - failed") |
| file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log |
| "Determining the system cpu architecture failed with the following output:\n${COMP_OUTPUT}\n${RUN_OUTPUT}") |
| set(${variable} PARENT_SCOPE) |
| endif() |
| |
| endfunction(detect_x86_cpu_architecture) |