diff --git a/deps/SFMT/CMakeLists.txt b/deps/SFMT/CMakeLists.txt index a37d48e95..618f2499a 100644 --- a/deps/SFMT/CMakeLists.txt +++ b/deps/SFMT/CMakeLists.txt @@ -40,39 +40,39 @@ target_include_directories(sfmt target_compile_definitions(sfmt PUBLIC -DSFMT_MEXP=19937) # enable SIMD instructions if available -include(CheckCCompilerFlag) -if (CMAKE_SYSTEM_PROCESSOR MATCHES "(powerpc|ppc)64|(powerpc|ppc)64le") - check_c_compiler_flag("-maltivec" HAVE_ALTIVEC) - if (HAVE_ALTIVEC) - target_compile_options(sfmt PRIVATE -mabi=altivec -maltivec) - target_compile_definitions(sfmt PUBLIC -DHAVE_ALTIVEC) - else () - message(WARNING "Altivec not available - performance will be poor!") - endif () -elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "arm|ARM") - check_c_compiler_flag(-mfpu=neon HAVE_NEON) - if (HAVE_NEON) - target_compile_options(sfmt PRIVATE -mfpu=neon -ftree-vectorize) - target_compile_definitions(sfmt PUBLIC -DHAVE_NEON) - else () - message(WARNING "Neon not available - performance will be poor!") - endif () -elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64") - check_c_compiler_flag(-march=armv8-a+simd HAVE_NEON) - if (HAVE_NEON) - target_compile_options(sfmt PRIVATE -ftree-vectorize) - target_compile_definitions(sfmt PUBLIC -DHAVE_NEON) - else () - message(WARNING "Neon not available - performance will be poor!") - endif () -elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "i686|amd64|x86_64|AMD64") - #SSE2 is always available - set(HAVE_SSE2 1) +include(CheckCXXCompilerFlag) - if (NOT CMAKE_C_COMPILER_ID MATCHES "MSVC") +# MSVC does not have any flags to check +if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + if (ACORE_SYSTEM_PROCESSOR MATCHES "^arm") + set(HAVE_NEON 1) + else () + set(HAVE_SSE2 1) + endif () +else () + if (ACORE_SYSTEM_PROCESSOR STREQUAL "arm") + check_cxx_compiler_flag(-mfpu=neon HAVE_NEON) + if (HAVE_NEON) + target_compile_options(sfmt PRIVATE -mfpu=neon -ftree-vectorize) + endif() + elseif (ACORE_SYSTEM_PROCESSOR STREQUAL "arm64") + check_cxx_compiler_flag(-march=armv8-a+simd HAVE_NEON) + if (HAVE_NEON) + target_compile_options(sfmt PRIVATE -ftree-vectorize) + endif () + elseif (ACORE_SYSTEM_PROCESSOR MATCHES "x86|amd64") + #SSE2 is always available + set(HAVE_SSE2 1) target_compile_options(sfmt PRIVATE -msse2) endif () - target_compile_definitions(sfmt PUBLIC -DHAVE_SSE2) +endif () + +if (HAVE_NEON) + target_compile_definitions(sfmt PUBLIC HAVE_NEON) +endif () + +if (HAVE_SSE2) + target_compile_definitions(sfmt PUBLIC HAVE_SSE2) endif () set_target_properties(sfmt PROPERTIES LINKER_LANGUAGE CXX) diff --git a/deps/argon2/CMakeLists.txt b/deps/argon2/CMakeLists.txt index 5ad9de57b..ff6d60193 100644 --- a/deps/argon2/CMakeLists.txt +++ b/deps/argon2/CMakeLists.txt @@ -12,12 +12,12 @@ file(GLOB_RECURSE sources *.c) -if(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64") - list(REMOVE_ITEM sources - ${CMAKE_CURRENT_SOURCE_DIR}/argon2/opt.c) -else() +if(ACORE_SYSTEM_PROCESSOR MATCHES "x86|amd64") list(REMOVE_ITEM sources ${CMAKE_CURRENT_SOURCE_DIR}/argon2/ref.c) +else() + list(REMOVE_ITEM sources + ${CMAKE_CURRENT_SOURCE_DIR}/argon2/opt.c) endif() add_library(argon2 STATIC diff --git a/deps/jemalloc/CMakeLists.txt b/deps/jemalloc/CMakeLists.txt index 0c5914f28..373d2dd02 100644 --- a/deps/jemalloc/CMakeLists.txt +++ b/deps/jemalloc/CMakeLists.txt @@ -30,7 +30,7 @@ if(CMAKE_SYSTEM_NAME MATCHES "Linux" AND NOT NOJEM) set(JEM_MADFREE_DEF "#undef") endif() - if(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64") + if(ACORE_SYSTEM_PROCESSOR MATCHES "arm") set(JEM_CPU_SPINWAIT "") set(JEM_HAVE_CPU_SPINWAIT 0) else() diff --git a/src/cmake/compiler/gcc/settings.cmake b/src/cmake/compiler/gcc/settings.cmake index 8723a6043..ce26ac135 100644 --- a/src/cmake/compiler/gcc/settings.cmake +++ b/src/cmake/compiler/gcc/settings.cmake @@ -31,11 +31,14 @@ if(PLATFORM EQUAL 32) -mfpmath=sse) endif() -target_compile_definitions(acore-compile-option-interface - INTERFACE - -DHAVE_SSE2 - -D__SSE2__) -message(STATUS "GCC: SFMT enabled, SSE2 flags forced") +if(ACORE_SYSTEM_PROCESSOR MATCHES "x86|amd64") + target_compile_definitions(acore-compile-option-interface + INTERFACE + -DHAVE_SSE2 + -D__SSE2__) + + message(STATUS "GCC: SFMT enabled, SSE2 flags forced") +endif() if( WITH_WARNINGS ) target_compile_options(acore-warning-interface diff --git a/src/cmake/macros/CheckPlatform.cmake b/src/cmake/macros/CheckPlatform.cmake index 93e6e86ee..43957a749 100644 --- a/src/cmake/macros/CheckPlatform.cmake +++ b/src/cmake/macros/CheckPlatform.cmake @@ -21,6 +21,30 @@ endif() include("${CMAKE_SOURCE_DIR}/src/cmake/platform/settings.cmake") +if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64|x86_64|AMD64") + set(ACORE_SYSTEM_PROCESSOR "amd64") +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm|ARM|aarch|AARCH)64$") + set(ACORE_SYSTEM_PROCESSOR "arm64") +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm|ARM|aarch|AARCH)$") + set(ACORE_SYSTEM_PROCESSOR "arm") +else() + set(ACORE_SYSTEM_PROCESSOR "x86") +endif() + +# detect MSVC special case of using cmake -A switch (which doesn't set any cross compiling variables) + +if(CMAKE_GENERATOR_PLATFORM STREQUAL "Win32") + set(ACORE_SYSTEM_PROCESSOR "x86") +elseif(CMAKE_GENERATOR_PLATFORM STREQUAL "x64") + set(ACORE_SYSTEM_PROCESSOR "amd64") +elseif(CMAKE_GENERATOR_PLATFORM STREQUAL "ARM") + set(ACORE_SYSTEM_PROCESSOR "arm") +elseif(CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64") + set(ACORE_SYSTEM_PROCESSOR "arm64") +endif() + +message(STATUS "Detected ${ACORE_SYSTEM_PROCESSOR} processor architecture") + if(WIN32) include("${CMAKE_SOURCE_DIR}/src/cmake/platform/win/settings.cmake") elseif(UNIX) diff --git a/src/cmake/macros/FindOpenSSL.cmake b/src/cmake/macros/FindOpenSSL.cmake index 857925c7a..f69f3999b 100644 --- a/src/cmake/macros/FindOpenSSL.cmake +++ b/src/cmake/macros/FindOpenSSL.cmake @@ -227,7 +227,7 @@ elseif (MSVC) set(_OPENSSL_MSI_INSTALL_GUIDS "") if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8") - if(CMAKE_SYSTEM_PROCESSOR MATCHES "ARM64") + if(ACORE_SYSTEM_PROCESSOR STREQUAL "arm64") set(_arch "Win64-ARM") set(_OPENSSL_MSI_INSTALL_GUIDS "99C28AFA-6419-40B1-B88D-32B810BB4234") else() @@ -319,7 +319,7 @@ if(WIN32 AND NOT CYGWIN) # Since OpenSSL 1.1, lib names are like libcrypto32MTd.lib and libssl32MTd.lib if( "${CMAKE_SIZEOF_VOID_P}" STREQUAL "8" ) set(_OPENSSL_MSVC_ARCH_SUFFIX "64") - if(CMAKE_SYSTEM_PROCESSOR MATCHES "ARM64") + if(ACORE_SYSTEM_PROCESSOR STREQUAL "arm64") set(_OPENSSL_MSVC_ARCH_DIRECTORY "arm64") else() set(_OPENSSL_MSVC_ARCH_DIRECTORY "x64")