|
@@ -0,0 +1,47 @@
|
|
|
+# - 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(<OUTPUT_VAR>)
|
|
|
+#
|
|
|
+# - 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()
|