diff --git a/cmake/compiler.cmake b/cmake/compiler.cmake index aa61ecfa..eb7829f5 100644 --- a/cmake/compiler.cmake +++ b/cmake/compiler.cmake @@ -182,42 +182,63 @@ if(NOT DEFINED CMAKE_TARGET_BITNESS) endif() endif() -if(CMAKE_COMPILER_IS_ELBRUSC OR CMAKE_COMPILER_IS_ELBRUSCXX OR CMAKE_SYSTEM_PROCESSOR MATCHES "e2k.*|E2K.*|elbrus.*|ELBRUS.*") - set(E2K TRUE) - set(CMAKE_SYSTEM_ARCH "Elbrus") -elseif((MSVC64 OR MINGW64) AND CMAKE_TARGET_BITNESS EQUAL 64) - set(X86_64 TRUE) - set(CMAKE_SYSTEM_ARCH "x86_64") -elseif(MINGW OR (MSVC AND NOT CMAKE_CROSSCOMPILING)) - set(X86_32 TRUE) - set(CMAKE_SYSTEM_ARCH "x86") -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*" AND CMAKE_TARGET_BITNESS EQUAL 64) - set(X86_64 TRUE) - set(CMAKE_SYSTEM_ARCH "x86_64") -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*") - set(X86_32 TRUE) - set(CMAKE_SYSTEM_ARCH "x86") -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*|ARM64.*)" AND CMAKE_TARGET_BITNESS EQUAL 64) - set(AARCH64 TRUE) - set(CMAKE_SYSTEM_ARCH "ARM64") -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm.*|ARM.*)") - set(ARM32 TRUE) - set(CMAKE_SYSTEM_ARCH "ARM") -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64le.*" AND CMAKE_TARGET_BITNESS EQUAL 64) - set(PPC64LE TRUE) - set(CMAKE_SYSTEM_ARCH "PPC64LE") -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64.*" AND CMAKE_TARGET_BITNESS EQUAL 64) - set(PPC64 TRUE) - set(CMAKE_SYSTEM_ARCH "PPC64") -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc).*") - set(PPC32 TRUE) - set(CMAKE_SYSTEM_ARCH "PPC") -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(mips|MIPS)64.*" AND CMAKE_TARGET_BITNESS EQUAL 64) - set(MIPS64 TRUE) - set(CMAKE_SYSTEM_ARCH "MIPS64") -elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(mips|MIPS).*") - set(MIPS32 TRUE) - set(CMAKE_SYSTEM_ARCH "MIPS") +if(NOT CMAKE_SYSTEM_ARCH) + if(CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER_ARCHITECTURE_ID) + set(CMAKE_SYSTEM_ARCH "${CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER_ARCHITECTURE_ID}") + elseif(CMAKE_ANDROID_ARCH_ABI) + set(CMAKE_SYSTEM_ARCH "${CMAKE_ANDROID_ARCH_ABI}") + elseif(CMAKE_COMPILER_IS_ELBRUSC OR CMAKE_COMPILER_IS_ELBRUSCXX + OR CMAKE_${CMAKE_PRIMARY_LANG}_COMPILER_ID STREQUAL "LCC" + OR CMAKE_SYSTEM_PROCESSOR MATCHES "e2k.*|E2K.*|elbrus.*|ELBRUS.*") + set(E2K TRUE) + set(CMAKE_SYSTEM_ARCH "Elbrus") + elseif(MSVC64 OR MINGW64 OR MINGW OR (MSVC AND NOT CMAKE_CROSSCOMPILING)) + if(CMAKE_TARGET_BITNESS EQUAL 64) + set(X86_64 TRUE) + set(CMAKE_SYSTEM_ARCH "x86_64") + else() + set(X86_32 TRUE) + set(CMAKE_SYSTEM_ARCH "x86") + endif() + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|[xXiI]86_64.*|AMD64.*|[iI][3-6]86.*|[xXiI]86.*") + if(CMAKE_TARGET_BITNESS EQUAL 64) + set(X86_64 TRUE) + set(CMAKE_SYSTEM_ARCH "x86_64") + else() + set(X86_32 TRUE) + set(CMAKE_SYSTEM_ARCH "x86") + endif() + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch.*|AARCH.*|arm.*|ARM.*)") + if(CMAKE_TARGET_BITNESS EQUAL 64) + set(AARCH64 TRUE) + set(CMAKE_SYSTEM_ARCH "ARM64") + else() + set(ARM32 TRUE) + set(CMAKE_SYSTEM_ARCH "ARM") + endif() + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc).*") + if(CMAKE_TARGET_BITNESS EQUAL 64) + set(PPC64 TRUE) + set(CMAKE_SYSTEM_ARCH "PPC64") + else() + set(PPC32 TRUE) + set(CMAKE_SYSTEM_ARCH "PPC") + endif() + elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(mips|MIPS).*") + if(CMAKE_TARGET_BITNESS EQUAL 64) + set(MIPS64 TRUE) + set(CMAKE_SYSTEM_ARCH "MIPS64") + else() + set(MIPS32 TRUE) + set(CMAKE_SYSTEM_ARCH "MIPS") + endif() + endif() +endif() +if(CMAKE_C_COMPILER_LOADED AND NOT CMAKE_C_COMPILER_ARCHITECTURE_ID) + set(CMAKE_C_COMPILER_ARCHITECTURE_ID "${CMAKE_SYSTEM_ARCH}") +endif() +if(CMAKE_CXX_COMPILER_LOADED AND NOT CMAKE_CXX_COMPILER_ARCHITECTURE_ID) + set(CMAKE_CXX_COMPILER_ARCHITECTURE_ID "${CMAKE_SYSTEM_ARCH}") endif() if(MSVC)