diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index 50e0c91f9..b23747b72 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -1,3 +1,10 @@ +# MINGW: +# On ProxSpace 3.4: +# cmake -G"MSYS Makefiles" .. +# On Proxspace 3.3 or less, you need to install cmake: +# pacman -S mingw-w64-x86_64-cmake +# /mingw64/bin/cmake -G"MSYS Makefiles" .. + cmake_minimum_required(VERSION 3.10) project(proxmark3) @@ -32,29 +39,6 @@ endforeach() SET (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake") -INCLUDE(FindSSE) -if(NOT SSE2_FOUND) - MESSAGE(STATUS "Could not find hardware support for SSE2 on this machine.") -endif(NOT SSE2_FOUND) -if(NOT SSE3_FOUND) - MESSAGE(STATUS "Could not find hardware support for SSE3 on this machine.") -endif(NOT SSE3_FOUND) -if(NOT SSSE3_FOUND) - MESSAGE(STATUS "Could not find hardware support for SSSE3 on this machine.") -endif(NOT SSSE3_FOUND) -if(NOT SSE4_1_FOUND) - MESSAGE(STATUS "Could not find hardware support for SSE4.1 on this machine.") -endif(NOT SSE4_1_FOUND) -if(NOT AVX_FOUND) - MESSAGE(STATUS "Could not find hardware support for AVX on this machine.") -endif(NOT AVX_FOUND) -if(NOT AVX2_FOUND) - MESSAGE(STATUS "Could not find hardware support for AVX2 on this machine.") -endif(NOT AVX2_FOUND) -if(NOT AVX512_FOUND) - MESSAGE(STATUS "Could not find hardware support for AVX512 on this machine.") -endif(NOT AVX512_FOUND) - add_subdirectory(deps) set (TARGET_SOURCES @@ -207,10 +191,6 @@ if (APPLE) set(ADDITIONAL_LNK "-framework Foundation" "-framework AppKit") endif (APPLE) -if (MINGW) - set(CMAKE_CXX_FLAGS "-mno-ms-bitfields -fexec-charset=cp850 ${CMAKE_CXX_FLAGS}") -endif (MINGW) - if (Qt5_FOUND) message("Qt5 library found, building gui :)") set(CMAKE_AUTOMOC ON) @@ -238,6 +218,17 @@ add_executable( target_compile_options(proxmark3 PUBLIC -Wall -Werror -O3) +if (MINGW) + # Mingw uses by default Microsoft printf, we want the GNU printf (e.g. for %z) + # and setting _ISOC99_SOURCE sets internally __USE_MINGW_ANSI_STDIO=1 + # FTR __USE_MINGW_ANSI_STDIO seems deprecated in Mingw32 + # but not Mingw64 https://fr.osdn.net/projects/mingw/lists/archive/users/2019-January/000199.html + target_compile_definitions(proxmark3 PRIVATE _ISOC99_SOURCE) + + set(CMAKE_C_FLAGS "-mno-ms-bitfields -fexec-charset=cp850 ${CMAKE_C_FLAGS}") + set(CMAKE_CXX_FLAGS "-mno-ms-bitfields -fexec-charset=cp850 ${CMAKE_CXX_FLAGS}") +endif (MINGW) + target_include_directories(proxmark3 PRIVATE ../common ../common_fpga diff --git a/client/cmake/FindSSE.cmake b/client/cmake/FindSSE.cmake deleted file mode 100644 index 14021e1c1..000000000 --- a/client/cmake/FindSSE.cmake +++ /dev/null @@ -1,168 +0,0 @@ -# Check if SSE/AVX instructions are available on the machine where -# the project is compiled. - -IF(CMAKE_SYSTEM_NAME MATCHES "Linux") - EXEC_PROGRAM(cat ARGS "/proc/cpuinfo" OUTPUT_VARIABLE CPUINFO) - - STRING(REGEX REPLACE "^.*(sse2).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "sse2" "${SSE_THERE}" SSE2_TRUE) - IF (SSE2_TRUE) - set(SSE2_FOUND true CACHE BOOL "SSE2 available on host") - ELSE (SSE2_TRUE) - set(SSE2_FOUND false CACHE BOOL "SSE2 available on host") - ENDIF (SSE2_TRUE) - - # /proc/cpuinfo apparently omits sse3 :( - STRING(REGEX REPLACE "^.*[^s](sse3).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "sse3" "${SSE_THERE}" SSE3_TRUE) - IF (NOT SSE3_TRUE) - STRING(REGEX REPLACE "^.*(T2300).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "T2300" "${SSE_THERE}" SSE3_TRUE) - ENDIF (NOT SSE3_TRUE) - - STRING(REGEX REPLACE "^.*(ssse3).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "ssse3" "${SSE_THERE}" SSSE3_TRUE) - IF (SSE3_TRUE OR SSSE3_TRUE) - set(SSE3_FOUND true CACHE BOOL "SSE3 available on host") - ELSE (SSE3_TRUE OR SSSE3_TRUE) - set(SSE3_FOUND false CACHE BOOL "SSE3 available on host") - ENDIF (SSE3_TRUE OR SSSE3_TRUE) - IF (SSSE3_TRUE) - set(SSSE3_FOUND true CACHE BOOL "SSSE3 available on host") - ELSE (SSSE3_TRUE) - set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host") - ENDIF (SSSE3_TRUE) - - STRING(REGEX REPLACE "^.*(sse4_1).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "sse4_1" "${SSE_THERE}" SSE41_TRUE) - IF (SSE41_TRUE) - set(SSE4_1_FOUND true CACHE BOOL "SSE4.1 available on host") - ELSE (SSE41_TRUE) - set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host") - ENDIF (SSE41_TRUE) - - STRING(REGEX REPLACE "^.*(avx).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "avx" "${SSE_THERE}" AVX_TRUE) - IF (AVX_TRUE) - set(AVX_FOUND true CACHE BOOL "AVX available on host") - ELSE (AVX_TRUE) - set(AVX_FOUND false CACHE BOOL "AVX available on host") - ENDIF (AVX_TRUE) - - STRING(REGEX REPLACE "^.*(avx2).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "avx2" "${SSE_THERE}" AVX2_TRUE) - IF (AVX2_TRUE) - set(AVX2_FOUND true CACHE BOOL "AVX2 available on host") - ELSE (AVX2_TRUE) - set(AVX2_FOUND false CACHE BOOL "AVX2 available on host") - ENDIF (AVX2_TRUE) - - STRING(REGEX REPLACE "^.*(avx512).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "avx512" "${SSE_THERE}" AVX2_TRUE) - IF (AVX512_TRUE) - set(AVX512_FOUND true CACHE BOOL "AVX512 available on host") - ELSE (AVX2_TRUE) - set(AVX512_FOUND false CACHE BOOL "AVX512 available on host") - ENDIF (AVX512_TRUE) - -ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Darwin") - EXEC_PROGRAM("/usr/sbin/sysctl -n machdep.cpu.features" OUTPUT_VARIABLE - CPUINFO) - - STRING(REGEX REPLACE "^.*[^S](SSE2).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "SSE2" "${SSE_THERE}" SSE2_TRUE) - IF (SSE2_TRUE) - set(SSE2_FOUND true CACHE BOOL "SSE2 available on host") - ELSE (SSE2_TRUE) - set(SSE2_FOUND false CACHE BOOL "SSE2 available on host") - ENDIF (SSE2_TRUE) - - STRING(REGEX REPLACE "^.*[^S](SSE3).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "SSE3" "${SSE_THERE}" SSE3_TRUE) - IF (SSE3_TRUE) - set(SSE3_FOUND true CACHE BOOL "SSE3 available on host") - ELSE (SSE3_TRUE) - set(SSE3_FOUND false CACHE BOOL "SSE3 available on host") - ENDIF (SSE3_TRUE) - - STRING(REGEX REPLACE "^.*(SSSE3).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "SSSE3" "${SSE_THERE}" SSSE3_TRUE) - IF (SSSE3_TRUE) - set(SSSE3_FOUND true CACHE BOOL "SSSE3 available on host") - ELSE (SSSE3_TRUE) - set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host") - ENDIF (SSSE3_TRUE) - - STRING(REGEX REPLACE "^.*(SSE4.1).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "SSE4.1" "${SSE_THERE}" SSE41_TRUE) - IF (SSE41_TRUE) - set(SSE4_1_FOUND true CACHE BOOL "SSE4.1 available on host") - ELSE (SSE41_TRUE) - set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host") - ENDIF (SSE41_TRUE) - - STRING(REGEX REPLACE "^.*(AVX).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "AVX" "${SSE_THERE}" AVX_TRUE) - IF (AVX_TRUE) - set(AVX_FOUND true CACHE BOOL "AVX available on host") - ELSE (AVX_TRUE) - set(AVX_FOUND false CACHE BOOL "AVX available on host") - ENDIF (AVX_TRUE) - - STRING(REGEX REPLACE "^.*(AVX2).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "AVX2" "${SSE_THERE}" AVX2_TRUE) - IF (AVX2_TRUE) - set(AVX2_FOUND true CACHE BOOL "AVX2 available on host") - ELSE (AVX2_TRUE) - set(AVX2_FOUND false CACHE BOOL "AVX2 available on host") - ENDIF (AVX2_TRUE) - - STRING(REGEX REPLACE "^.*(AVX512).*$" "\\1" SSE_THERE ${CPUINFO}) - STRING(COMPARE EQUAL "AVX512" "${SSE_THERE}" AVX2_TRUE) - IF (AVX2_TRUE) - set(AVX2_FOUND true CACHE BOOL "AVX512 available on host") - ELSE (AVX2_TRUE) - set(AVX2_FOUND false CACHE BOOL "AVX512 available on host") - ENDIF (AVX2_TRUE) - -ELSEIF(CMAKE_SYSTEM_NAME MATCHES "Windows") - # TODO - set(SSE2_FOUND true CACHE BOOL "SSE2 available on host") - set(SSE3_FOUND false CACHE BOOL "SSE3 available on host") - set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host") - set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host") - set(AVX_FOUND false CACHE BOOL "AVX available on host") - set(AVX2_FOUND false CACHE BOOL "AVX2 available on host") - set(AVX512_FOUND false CACHE BOOL "AVX512 available on host") -ELSE(CMAKE_SYSTEM_NAME MATCHES "Linux") - set(SSE2_FOUND true CACHE BOOL "SSE2 available on host") - set(SSE3_FOUND false CACHE BOOL "SSE3 available on host") - set(SSSE3_FOUND false CACHE BOOL "SSSE3 available on host") - set(SSE4_1_FOUND false CACHE BOOL "SSE4.1 available on host") - set(AVX_FOUND false CACHE BOOL "AVX available on host") - set(AVX2_FOUND false CACHE BOOL "AVX2 available on host") - set(AVX512_FOUND false CACHE BOOL "AVX512 available on host") -ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux") - -if(NOT SSE2_FOUND) - MESSAGE(STATUS "Could not find hardware support for SSE2 on this machine.") -endif(NOT SSE2_FOUND) -if(NOT SSE3_FOUND) - MESSAGE(STATUS "Could not find hardware support for SSE3 on this machine.") -endif(NOT SSE3_FOUND) -if(NOT SSSE3_FOUND) - MESSAGE(STATUS "Could not find hardware support for SSSE3 on this machine.") -endif(NOT SSSE3_FOUND) -if(NOT SSE4_1_FOUND) - MESSAGE(STATUS "Could not find hardware support for SSE4.1 on this machine.") -endif(NOT SSE4_1_FOUND) -if(NOT AVX_FOUND) - MESSAGE(STATUS "Could not find hardware support for AVX on this machine.") -endif(NOT AVX_FOUND) -if(NOT AVX2_FOUND) - MESSAGE(STATUS "Could not find hardware support for AVX2 on this machine.") -endif(NOT AVX2_FOUND) -if(NOT AVX512_FOUND) - MESSAGE(STATUS "Could not find hardware support for AVX512 on this machine.") -endif(NOT AVX512_FOUND) -mark_as_advanced(SSE2_FOUND SSE3_FOUND SSSE3_FOUND SSE4_1_FOUND, AVX_FOUND, AVX2_FOUND) diff --git a/client/deps/hardnested.cmake b/client/deps/hardnested.cmake index 6559f4faa..b9ca14dab 100644 --- a/client/deps/hardnested.cmake +++ b/client/deps/hardnested.cmake @@ -1,22 +1,25 @@ set_property(SOURCE PROPERTY C_STANDARD 99) -## CPU-specific code -## These are mostly for x86-based architectures, which is not useful for many Android devices. add_library(hardnested_nosimd OBJECT hardnested/hardnested_bf_core.c hardnested/hardnested_bitarray_core.c) +target_compile_options(hardnested_nosimd PRIVATE -Wall -Werror -O3) + target_include_directories(hardnested_nosimd PRIVATE ../../common ../../include) -target_compile_options(hardnested_nosimd PRIVATE -Wall -Werror -O3) -set(X86_CPUS x86 x86_64 i686) +## CPU-specific code +## These are mostly for x86-based architectures, which is not useful for many Android devices. +## Mingw platforms: AMD64 +set(X86_CPUS x86 x86_64 i686 AMD64) message(STATUS "CMAKE_SYSTEM_PROCESSOR := ${CMAKE_SYSTEM_PROCESSOR}") if ("${CMAKE_SYSTEM_PROCESSOR}" IN_LIST X86_CPUS) message(STATUS "Building optimised x86/x86_64 binaries") + target_compile_options(hardnested_nosimd BEFORE PRIVATE -mno-mmx -mno-sse2 -mno-avx -mno-avx2 -mno-avx512f)