diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt new file mode 100644 index 000000000..1d5b4baf5 --- /dev/null +++ b/client/CMakeLists.txt @@ -0,0 +1,424 @@ +cmake_minimum_required(VERSION 3.16) +project(proxmark3) + +set(CMAKE_CXX_STANDARD 14) + +find_package(Qt5 COMPONENTS Widgets Gui) + +SET (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake") + +INCLUDE(FindSSE) +#[[ +IF(SSE3_FOUND) + IF(SSSE3_FOUND) + SET(CXX_DFLAGS -msse3 -mssse3) + ENDIF(SSSE3_FOUND) +ENDIF(SSE3_FOUND) + +IF(SSE4_2_FOUND) + SET(CXX_DFLAGS -msse4.2 -mpopcnt) +ENDIF(SSE4_2_FOUND) +ADD_DEFINITIONS(${CXX_DFLAGS}) +]] +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) + +include_directories( + .. + SYSTEM + deps + ../common + ../include + deps/jansson + deps/tinycbor + deps/liblua + client/deps/mbedtls/include + deps/amiitool + deps/cliparser + deps/reveng + ../common/zlib + src + src/uart +) + +#file(GLOB_RECURSE TARGET_HEADERS ${CMAKE_CURRENT_LIST_DIR}/src/*.h) +#file(GLOB_RECURSE TARGET_SOURCES ${CMAKE_CURRENT_LIST_DIR}/src/*.cpp) + +set (TARGET_SOURCES + src/proxmark3.c + src/proxmark3.h + ../common/commonutil.c + ../common/commonutil.h + ../common/util_posix.c + ../common/util_posix.h + ../common/parity.c + ../common/parity.h + ../common/bucketsort.c + ../common/bucketsort.h + ../common/crapto1/crapto1.c + ../common/crapto1/crapto1.h + ../common/crapto1/crypto1.c + ../common/crc.c + ../common/crc.h + ../common/crc16.c + ../common/crc16.h + ../common/crc32.c + ../common/crc32.h + ../common/crc64.c + ../common/crc64.h + ../common/lfdemod.c + ../common/lfdemod.h + ../common/legic_prng.c + ../common/legic_prng.h + ../common/iso15693tools.c + ../common/iso15693tools.h + ../common/cardhelper.c + ../common/cardhelper.h + ../common/generator.c + ../common/generator.h + deps/cliparser/argtable3.c + deps/cliparser/argtable3.h + deps/cliparser/cliparser.c + deps/cliparser/cliparser.h + deps/cliparser/getopt.h + deps/hardnested/hardnested_bruteforce.c + deps/hardnested/hardnested_bruteforce.h + src/crypto/asn1dump.c + src/crypto/asn1dump.h + src/crypto/asn1utils.c + src/crypto/asn1utils.h + src/crypto/libpcrypto.c + src/crypto/libpcrypto.h + src/emv/test/cda_test.c + src/emv/test/cda_test.h + src/emv/test/crypto_test.c + src/emv/test/crypto_test.h + src/emv/test/cryptotest.c + src/emv/test/cryptotest.h + src/emv/test/dda_test.c + src/emv/test/dda_test.h + src/emv/test/sda_test.c + src/emv/test/sda_test.h + src/emv/apduinfo.c + src/emv/apduinfo.h + src/emv/cmdemv.c + src/emv/cmdemv.h + src/emv/crypto.c + src/emv/crypto.h + src/emv/crypto_backend.h + src/emv/crypto_polarssl.c + src/emv/dol.c + src/emv/dol.h + src/emv/dump.c + src/emv/dump.h + src/emv/emv_pk.c + src/emv/emv_pk.h + src/emv/emv_pki.c + src/emv/emv_pki.h + src/emv/emv_pki_priv.c + src/emv/emv_pki_priv.h + src/emv/emv_roca.c + src/emv/emv_roca.h + src/emv/emv_tags.c + src/emv/emv_tags.h + src/emv/emvcore.c + src/emv/emvcore.h + src/emv/emvjson.c + src/emv/emvjson.h + src/emv/tlv.c + src/emv/tlv.h + src/fido/additional_ca.c + src/fido/additional_ca.h + src/fido/cbortools.c + src/fido/cbortools.h + src/fido/cose.c + src/fido/cose.h + src/fido/fidocore.c + src/fido/fidocore.h + src/loclass/cipher.c + src/loclass/cipher.h + src/loclass/cipherutils.c + src/loclass/cipherutils.h + src/loclass/elite_crack.c + src/loclass/elite_crack.h + src/loclass/hash1_brute.c + src/loclass/hash1_brute.h + src/loclass/ikeys.c + src/loclass/ikeys.h + src/mifare/mad.c + src/mifare/mad.h + src/mifare/mfkey.c + src/mifare/mfkey.h + src/mifare/mifare4.c + src/mifare/mifare4.h + src/mifare/mifaredefault.c + src/mifare/mifaredefault.h + src/mifare/mifarehost.c + src/mifare/mifarehost.h + src/mifare/ndef.c + src/mifare/ndef.h + src/mifare/desfire_crypto.c + src/mifare/desfire_crypto.h + src/uart/uart.h + src/uart/uart_posix.c + src/uart/uart_win32.c + src/ui/overlays.ui + src/aidsearch.c + src/aidsearch.h + src/cmdanalyse.c + src/cmdanalyse.h + src/cmdcrc.c + src/cmdcrc.h + src/cmddata.c + src/cmddata.h + src/cmdflashmem.c + src/cmdflashmem.h + src/cmdflashmemspiffs.c + src/cmdflashmemspiffs.h + src/cmdhf.c + src/cmdhf.h + src/cmdhf14a.c + src/cmdhf14a.h + src/cmdhf14b.c + src/cmdhf14b.h + src/cmdhf15.c + src/cmdhf15.h + src/cmdhfcryptorf.c + src/cmdhfcryptorf.h + src/cmdhfepa.c + src/cmdhfepa.h + src/cmdhffelica.c + src/cmdhffelica.h + src/cmdhffido.c + src/cmdhffido.h + src/cmdhficlass.c + src/cmdhficlass.h + src/cmdhflegic.c + src/cmdhflegic.h + src/cmdhflist.c + src/cmdhflist.h + src/cmdhflto.c + src/cmdhflto.h + src/cmdhfmf.c + src/cmdhfmf.h + src/cmdhfmfdes.c + src/cmdhfmfdes.h + src/cmdhfmfhard.c + src/cmdhfmfhard.h + src/cmdhfmfp.c + src/cmdhfmfp.h + src/cmdhfmfu.c + src/cmdhfmfu.h + src/cmdhfthinfilm.c + src/cmdhfthinfilm.h + src/cmdhftopaz.c + src/cmdhftopaz.h + src/cmdhw.c + src/cmdhw.h + src/cmdlf.c + src/cmdlf.h + src/cmdlfawid.c + src/cmdlfawid.h + src/cmdlfcotag.c + src/cmdlfcotag.h + src/cmdlfem4x.c + src/cmdlfem4x.h + src/cmdlffdx.c + src/cmdlffdx.h + src/cmdlfgallagher.c + src/cmdlfgallagher.h + src/cmdlfguard.c + src/cmdlfguard.h + src/cmdlfhid.c + src/cmdlfhid.h + src/cmdlfhitag.c + src/cmdlfhitag.h + src/cmdlfindala.c + src/cmdlfindala.h + src/cmdlfio.c + src/cmdlfio.h + src/cmdlfjablotron.c + src/cmdlfjablotron.h + src/cmdlfkeri.c + src/cmdlfkeri.h + src/cmdlfmotorola.c + src/cmdlfmotorola.h + src/cmdlfnedap.c + src/cmdlfnedap.h + src/cmdlfnexwatch.c + src/cmdlfnexwatch.h + src/cmdlfnoralsy.c + src/cmdlfnoralsy.h + src/cmdlfpac.c + src/cmdlfpac.h + src/cmdlfparadox.c + src/cmdlfparadox.h + src/cmdlfpcf7931.c + src/cmdlfpcf7931.h + src/cmdlfpresco.c + src/cmdlfpresco.h + src/cmdlfpyramid.c + src/cmdlfpyramid.h + src/cmdlfsecurakey.c + src/cmdlfsecurakey.h + src/cmdlft55xx.c + src/cmdlft55xx.h + src/cmdlfti.c + src/cmdlfti.h + src/cmdlfverichip.c + src/cmdlfverichip.h + src/cmdlfviking.c + src/cmdlfviking.h + src/cmdlfvisa2000.c + src/cmdlfvisa2000.h + src/cmdmain.c + src/cmdmain.h + src/cmdparser.c + src/cmdparser.h + src/cmdscript.c + src/cmdscript.h + src/cmdsmartcard.c + src/cmdsmartcard.h + src/cmdtrace.c + src/cmdtrace.h + src/cmdusart.c + src/cmdusart.h + src/cmdwiegand.c + src/cmdwiegand.h + src/comms.c + src/comms.h + src/elf.h + src/emojis.h + src/emojis_alt.h + src/fileutils.c + src/fileutils.h + src/flash.c + src/flash.h + src/graph.c + src/graph.h + src/guidummy.cpp + src/preferences.c + src/preferences.h + src/pm3_binlib.c + src/pm3_binlib.h + src/pm3_bit_limits.h + src/pm3_bitlib.c + src/pm3_bitlib.h + src/polarssl_config.h + src/prng.c + src/prng.h + src/proxendian.h + src/scandir.c + src/scandir.h + src/scripting.c + src/scripting.h + src/tea.c + src/tea.h + src/ui.c + src/ui.h + src/util.c + src/util.h + src/whereami.c + src/whereami.h + src/wiegand_formats.c + src/wiegand_formats.h + src/wiegand_formatutils.c + src/wiegand_formatutils.h + ) + +set(ADDITIONAL_SRC "") +set(ADDITIONAL_LNK "") + +set(X86_CPUS x86 x86_64 i686) + +message(STATUS "CMAKE_SYSTEM_PROCESSOR := ${CMAKE_SYSTEM_PROCESSOR}") + +if (APPLE) + message("Apple device detected.") + set(ADDITIONAL_SRC src/util_darwin.h src/util_darwin.m ${ADDITIONAL_SRC}) + set(ADDITIONAL_LNK "-framework Foundation" "-framework AppKit") + set_target_properties(proxmark3 PROPERTIES LINK_FLAGS "-Wl,-F/Library/Frameworks") +endif (APPLE) + +if (MINGW) + set(CMAKE_CXX_FLAGS "-mno-ms-bitfields -fexec-charset=cp850 ${CMAKE_CXX_FLAGS}") +endif (MINGW) + +set(CMAKE_CXX_FLAGS "-Wall -Werror -O3") + +add_executable( + proxmark3 + ${TARGET_SOURCES} +) + +if(NOT Qt5_LIB) + message("Qt5 library not found, not building gui") +endif() +if (Qt5_LIB) + add_executable(proxguiqt + src/proxgui.cpp + src/proxgui.h + src/proxguiqt.cpp + src/proxguiqt.h) +endif (Qt5_LIB) + + +find_library(jansson REQUIRED) +find_library(tinycbor REQUIRED) +find_library(lua REQUIRED) +find_library(mbedtls REQUIRED) +find_library(reveng REQUIRED) +find_library(z REQUIRED) +find_library(hardnested REQUIRED) + +target_include_directories(proxmark3 PUBLIC mbedtls jansson lua tinycbor amiibo reveng z hardnested) +target_link_libraries(proxmark3 readline pthread m mbedtls jansson lua tinycbor amiibo reveng z hardnested ${ADDITIONAL_LNK}) + +install(TARGETS proxmark3 DESTINATION "bin") +install(DIRECTORY cmdscripts lualibs luascripts resources dictionaries DESTINATION "share/proxmark3") + +add_custom_command(OUTPUT lualibs/pm3_cmd.lua + COMMAND "awk -f pm3_cmd_h2lua.awk ../include/pm3_cmd.h > lualibs/pm3_cmd.lua" + COMMENT "Creating lualibs/pm3_cmd.lua" + ) + +add_custom_command(OUTPUT lualibs/mfc_default_keys.lua + COMMAND "awk -f default_keys_dic2lua.awk mfc_default_keys.dic > lualibs/mfc_default_keys.lua" + COMMENT "Creating lualibs/mfc_default_keys.lua" + ) + +add_custom_command(OUTPUT src/proxguiqt.moc.cpp + COMMAND "$(MOC) -o src/proxguiqt.moc.cpp proxguiqt.h" + COMMENT "Creating src/proxguiqt.moc.cpp" + ) + +add_custom_command(OUTPUT src/ui/ui_overlays.h + COMMAND "$(UIC) src/ui/overlays.ui > src/ui/ui_overlays.h" + COMMENT "Creating ui/ui_overlays.h" + ) + +#"make package" will trigger this +SET(CPACK_GENERATOR "DEB") +SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Iceman") +INCLUDE(CPack) \ No newline at end of file diff --git a/client/cmake/FindSSE.cmake b/client/cmake/FindSSE.cmake new file mode 100644 index 000000000..14021e1c1 --- /dev/null +++ b/client/cmake/FindSSE.cmake @@ -0,0 +1,168 @@ +# 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/CMakeLists.txt b/client/deps/CMakeLists.txt new file mode 100644 index 000000000..f77a53305 --- /dev/null +++ b/client/deps/CMakeLists.txt @@ -0,0 +1,8 @@ +include(tinycbor.cmake) +include(jansson.cmake) +include(lua.cmake) +include(mbedtls.cmake) +include(amiibo.cmake) +include(reveng.cmake) +include(zlib.cmake) +include(hardnested.cmake) \ No newline at end of file diff --git a/client/deps/amiibo.cmake b/client/deps/amiibo.cmake new file mode 100644 index 000000000..8e21d1011 --- /dev/null +++ b/client/deps/amiibo.cmake @@ -0,0 +1,28 @@ +# just for testing amiitool before complete migration into a lib: + +#amiitool: +#gcc $(CFLAGS) \ +#amiitool.c $(MYSRCS) ../../../../common/../../commonutil.c ../ui.c -lreadline -lm ../../../../common/mbedtls/libmbedtls.a \ +#-o amiitool + +set_property(SOURCE PROPERTY C_STANDARD 99) +add_definitions(-D_ISOC99_SOURCE) +include_directories(jansson) +include_directories(../../common) +include_directories(../../common/include) +include_directories(amiitool) + +add_library(amiibo + jansson/dump.c + jansson/error.c + jansson/hashtable.c + jansson/hashtable_seed.c + jansson/load.c + jansson/memory.c + jansson/pack_unpack.c + jansson/strbuffer.c + jansson/strconv.c + jansson/utf.c + jansson/path.c + jansson/value.c +) diff --git a/client/deps/hardnested.cmake b/client/deps/hardnested.cmake new file mode 100644 index 000000000..b9e0bfa82 --- /dev/null +++ b/client/deps/hardnested.cmake @@ -0,0 +1,115 @@ +set_property(SOURCE PROPERTY C_STANDARD 99) +add_definitions(-DHAVE_STDINT_H) +include_directories(hardnested) + +## 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_include_directories(hardnested_nosimd PRIVATE + ../../common + ../../include + hardnested) + +set(X86_CPUS x86 x86_64 i686) + +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) + + set_property(TARGET hardnested_nosimd PROPERTY POSITION_INDEPENDENT_CODE ON) + + ## x86 / MMX + add_library(hardnested_mmx OBJECT + hardnested/hardnested_bf_core.c + hardnested/hardnested_bitarray_core.c) + + target_compile_options(hardnested_mmx BEFORE PRIVATE + -mmmx -mno-sse2 -mno-avx -mno-avx2 -mno-avx512f) + + target_include_directories(hardnested_mmx PRIVATE + ../../common + ../../include + hardnested) + + set_property(TARGET hardnested_mmx PROPERTY POSITION_INDEPENDENT_CODE ON) + + ## x86 / SSE2 + add_library(hardnested_sse2 OBJECT + hardnested/hardnested_bf_core.c + hardnested/hardnested_bitarray_core.c) + + target_compile_options(hardnested_sse2 BEFORE PRIVATE + -mmmx -msse2 -mno-avx -mno-avx2 -mno-avx512f) + + target_include_directories(hardnested_sse2 PRIVATE + ../../common + ../../include + hardnested) + + set_property(TARGET hardnested_sse2 PROPERTY POSITION_INDEPENDENT_CODE ON) + + ## x86 / AVX + add_library(hardnested_avx OBJECT + hardnested/hardnested_bf_core.c + hardnested/hardnested_bitarray_core.c) + + target_compile_options(hardnested_avx BEFORE PRIVATE + -mmmx -msse2 -mavx -mno-avx2 -mno-avx512f) + + target_include_directories(hardnested_avx PRIVATE + ../../common + ../../include + hardnested) + + set_property(TARGET hardnested_avx PROPERTY POSITION_INDEPENDENT_CODE ON) + + ## x86 / AVX2 + add_library(hardnested_avx2 OBJECT + hardnested/hardnested_bf_core.c + hardnested/hardnested_bitarray_core.c) + + target_compile_options(hardnested_avx2 BEFORE PRIVATE + -mmmx -msse2 -mavx -mavx2 -mno-avx512f) + + target_include_directories(hardnested_avx2 PRIVATE + ../../common + ../../include + hardnested) + + set_property(TARGET hardnested_avx2 PROPERTY POSITION_INDEPENDENT_CODE ON) + + ## x86 / AVX512 + add_library(hardnested_avx512 OBJECT + hardnested/hardnested_bf_core.c + hardnested/hardnested_bitarray_core.c) + + target_compile_options(hardnested_avx512 BEFORE PRIVATE + -mmmx -msse2 -mavx -mavx2 -mavx512f) + + target_include_directories(hardnested_avx512 PRIVATE + ../../common + ../../include + hardnested) + + set_property(TARGET hardnested_avx512 PROPERTY POSITION_INDEPENDENT_CODE ON) + + set(SIMD_TARGETS + $ + $ + $ + $ + $) +else () + message(STATUS "Not building optimised targets") + set(SIMD_TARGETS) +endif () + +add_library(hardnested STATIC + $ + ${SIMD_TARGETS}) diff --git a/client/deps/jansson.cmake b/client/deps/jansson.cmake new file mode 100644 index 000000000..f35d7dbc9 --- /dev/null +++ b/client/deps/jansson.cmake @@ -0,0 +1,18 @@ +set_property(SOURCE PROPERTY C_STANDARD 99) +add_definitions(-DHAVE_STDINT_H) +include_directories(jansson) + +add_library(jansson + jansson/dump.c + jansson/error.c + jansson/hashtable.c + jansson/hashtable_seed.c + jansson/load.c + jansson/memory.c + jansson/pack_unpack.c + jansson/strbuffer.c + jansson/strconv.c + jansson/utf.c + jansson/path.c + jansson/value.c +) diff --git a/client/deps/lua.cmake b/client/deps/lua.cmake new file mode 100644 index 000000000..916d79c6f --- /dev/null +++ b/client/deps/lua.cmake @@ -0,0 +1,58 @@ +add_definitions(-DLUA_COMPAT_ALL $(SYSCFLAGS)) +include_directories(liblua) + +set(SYSCFLAGS "-DLUA_COMPAT_ALL") + +if (UNIX) + set(SYSCFLAGS "-DLUA_USE_LINUX") +endif (UNIX) + +if (WIN32) + set(SYSCFLAGS "-DLUA_USE_LINUX") +endif (WIN32) + +if (MINGW) + set(SYSCFLAGS "-DLUA_COMPAT_ALL $(SYSCFLAGS)") +endif (MINGW) + +if (APPLE) + set(SYSCFLAGS "-DLUA_USE_MACOSX") +endif (APPLE) + +add_definitions($(SYSCFLAGS)) + +add_library(lua + liblua/lapi.c + liblua/lcode.c + liblua/lctype.c + liblua/ldebug.c + liblua/ldo.c + liblua/ldump.c + liblua/lfunc.c + liblua/lgc.c + liblua/llex.c + liblua/lmem.c + liblua/lobject.c + liblua/lopcodes.c + liblua/lparser.c + liblua/lstate.c + liblua/lstring.c + liblua/ltable.c + liblua/ltm.c + liblua/lundump.c + liblua/lvm.c + liblua/lzio.c + liblua/lauxlib.c + liblua/lbaselib.c + liblua/lbitlib.c + liblua/lcorolib.c + liblua/ldblib.c + liblua/liolib.c + liblua/lmathlib.c + liblua/loslib.c + liblua/lstrlib.c + liblua/ltablib.c + liblua/loadlib.c + liblua/linit.c +) + diff --git a/client/deps/mbedtls.cmake b/client/deps/mbedtls.cmake new file mode 100644 index 000000000..0b4c04e62 --- /dev/null +++ b/client/deps/mbedtls.cmake @@ -0,0 +1,49 @@ +set_property(SOURCE PROPERTY C_STANDARD 99) +add_definitions(-DHAVE_STDINT_H) +include_directories(../../common) + +add_library(mbedtls + ../../common/mbedtls/aes.c + ../../common/mbedtls/asn1parse.c + ../../common/mbedtls/asn1write.c + ../../common/mbedtls/base64.c + ../../common/mbedtls/bignum.c + ../../common/mbedtls/ctr_drbg.c + ../../common/mbedtls/entropy_poll.c + ../../common/mbedtls/entropy.c + ../../common/mbedtls/error.c + ../../common/mbedtls/timing.c + ../../common/mbedtls/ecp.c + ../../common/mbedtls/ecp_curves.c + ../../common/mbedtls/certs.c + ../../common/mbedtls/camellia.c + ../../common/mbedtls/blowfish.c + ../../common/mbedtls/cipher_wrap.c + ../../common/mbedtls/cipher.c + ../../common/mbedtls/cmac.c + ../../common/mbedtls/des.c + ../../common/mbedtls/ecdsa.c + ../../common/mbedtls/md.c + ../../common/mbedtls/md_wrap.c + ../../common/mbedtls/md5.c + ../../common/mbedtls/oid.c + ../../common/mbedtls/pem.c + ../../common/mbedtls/arc4.c + ../../common/mbedtls/pk.c + ../../common/mbedtls/pk_wrap.c + ../../common/mbedtls/pkwrite.c + ../../common/mbedtls/pkcs5.c + ../../common/mbedtls/pkcs12.c + ../../common/mbedtls/pkparse.c + ../../common/mbedtls/platform.c + ../../common/mbedtls/platform_util.c + ../../common/mbedtls/rsa.c + ../../common/mbedtls/rsa_internal.c + ../../common/mbedtls/sha1.c + ../../common/mbedtls/sha256.c + ../../common/mbedtls/sha512.c + ../../common/mbedtls/threading.c + ../../common/mbedtls/x509.c + ../../common/mbedtls/x509_crl.c + ../../common/mbedtls/x509_crt.c + ) diff --git a/client/deps/reveng.cmake b/client/deps/reveng.cmake new file mode 100644 index 000000000..5df1e85f2 --- /dev/null +++ b/client/deps/reveng.cmake @@ -0,0 +1,15 @@ +set_property(SOURCE PROPERTY C_STANDARD 99) +add_definitions(-DPRESETS) +include_directories(reveng) +include_directories(.) + +add_library(reveng + reveng/bmpbit.c + reveng/cli.c + reveng/getopt.c + reveng/model.c + reveng/poly.c + reveng/preset.c + reveng/reveng.c +) + diff --git a/client/deps/tinycbor.cmake b/client/deps/tinycbor.cmake new file mode 100644 index 000000000..f58011e93 --- /dev/null +++ b/client/deps/tinycbor.cmake @@ -0,0 +1,10 @@ +add_library(tinycbor + tinycbor/cborencoder.c + tinycbor/cborencoder_close_container_checked.c + tinycbor/cborerrorstrings.c + tinycbor/cborparser.c + tinycbor/cborparser_dup_string.c + tinycbor/cborpretty.c + tinycbor/cbortojson.c + tinycbor/cborvalidation.c + ) \ No newline at end of file diff --git a/client/deps/zlib.cmake b/client/deps/zlib.cmake new file mode 100644 index 000000000..28b42d74c --- /dev/null +++ b/client/deps/zlib.cmake @@ -0,0 +1,15 @@ +set_property(SOURCE PROPERTY C_STANDARD 99) +add_definitions(-D_ISOC99_SOURCE -DZ_SOLO -DNO_GZIP -DZLIB_PM3_TUNED) +include_directories(../../common/zlib) + +add_library(z + ../../common/zlib/deflate.c + ../../common/zlib/adler32.c + ../../common/zlib/trees.c + ../../common/zlib/zutil.c + ../../common/zlib/inflate.c + ../../common/zlib/inffast.c + ../../common/zlib/inftrees.c +) + +