include(CheckCSourceCompiles) include(CMakePushCheckState) function(_internal_check_cpu_architecture macro_check NAME VARIABLE) cmake_push_check_state(RESET) string(TOUPPER "${NAME}" UPPER_NAME) set(CACHE_VARIABLE "CHECK_CPU_ARCHITECTURE_${UPPER_NAME}") set(test_src " int main(int argc, char *argv[]) { #if ${macro_check} return 0; #else choke #endif } ") check_c_source_compiles("${test_src}" "${CACHE_VARIABLE}") cmake_pop_check_state() if(${CACHE_VARIABLE}) set(${VARIABLE} "TRUE" PARENT_SCOPE) else() set(${VARIABLE} "FALSE" PARENT_SCOPE) endif() endfunction() function(check_cpu_architecture ARCH VARIABLE) if(ARCH STREQUAL "x86") _internal_check_cpu_architecture("defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) ||defined( __i386) || defined(_M_IX86)" x86 ${VARIABLE}) elseif(ARCH STREQUAL "x64") _internal_check_cpu_architecture("defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64)" x64 ${VARIABLE}) elseif(ARCH STREQUAL "arm32") _internal_check_cpu_architecture("defined(__arm__) || defined(_M_ARM)" arm32 ${VARIABLE}) elseif(ARCH STREQUAL "arm64") _internal_check_cpu_architecture("defined(__aarch64__) || defined(_M_ARM64)" arm64 ${VARIABLE}) else() message(WARNING "Unknown CPU architectures (${ARCH}).") set(${VARIABLE} FALSE) endif() set("${VARIABLE}" "${${VARIABLE}}" PARENT_SCOPE) endfunction()