3 # cmake -G"MSYS Makefiles" ..
4 # On Proxspace 3.3 or less, you need to install cmake:
5 # pacman -S mingw-w64-x86_64-cmake
6 # /mingw64/bin/cmake -G"MSYS Makefiles" ..
8 cmake_minimum_required(VERSION 3.10)
11 if(CMAKE_VERSION VERSION_LESS "3.7.0")
12 set(CMAKE_INCLUDE_CURRENT_DIR ON)
15 if(APPLE AND EXISTS /usr/local/opt/qt5)
16 # Homebrew installs Qt5 (up to at least 5.11.0) in
17 # /usr/local/qt5. Ensure that it can be found by CMake
18 # since it is not in the default /usr/local prefix.
19 # Add it to PATHS so that it doesn't override the
20 # CMAKE_PREFIX_PATH environment variable.
21 # QT_FIND_PACKAGE_OPTIONS should be passed to find_package,
22 # e.g. find_package(Qt5Core ${QT_FIND_PACKAGE_OPTIONS})
23 list(APPEND QT_FIND_PACKAGE_OPTIONS PATHS /usr/local/opt/qt5)
31 foreach(_qt_package IN LISTS QT_PACKAGELIST)
32 find_package(${_qt_package} QUIET ${QT_FIND_PACKAGE_OPTIONS})
33 if(NOT ${_qt_package}_FOUND)
35 endif(NOT ${_qt_package}_FOUND)
38 find_package(PkgConfig)
39 pkg_search_module(BLUEZ QUIET bluez)
41 SET (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
43 add_subdirectory(deps)
47 ../common/commonutil.c
48 ../common/util_posix.c
50 ../common/bucketsort.c
51 ../common/crapto1/crapto1.c
52 ../common/crapto1/crypto1.c
58 ../common/legic_prng.c
59 ../common/iso15693tools.c
60 ../common/cardhelper.c
63 src/crypto/asn1utils.c
64 src/crypto/libpcrypto.c
65 src/emv/test/cda_test.c
66 src/emv/test/crypto_test.c
67 src/emv/test/cryptotest.c
68 src/emv/test/dda_test.c
69 src/emv/test/sda_test.c
73 src/emv/crypto_polarssl.c
78 src/emv/emv_pki_priv.c
84 src/fido/additional_ca.c
89 src/loclass/cipherutils.c
90 src/loclass/elite_crack.c
91 src/loclass/hash1_brute.c
96 src/mifare/mifaredefault.c
97 src/mifare/mifarehost.c
99 src/mifare/desfire_crypto.c
100 src/uart/uart_posix.c
101 src/uart/uart_win32.c
108 src/cmdflashmemspiffs.c
177 src/wiegand_formats.c
178 src/wiegand_formatutils.c
179 ${CMAKE_BINARY_DIR}/version.c
183 OUTPUT ${CMAKE_BINARY_DIR}/version.c
184 COMMAND sh ${CMAKE_SOURCE_DIR}/../tools/mkversion.sh > ${CMAKE_BINARY_DIR}/version.c || perl ${CMAKE_SOURCE_DIR}/../tools/mkversion.pl > ${CMAKE_BINARY_DIR}/version.c || ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../common/default_version.c ${CMAKE_BINARY_DIR}/version.c
185 DEPENDS ${CMAKE_SOURCE_DIR}/../common/default_version.c
188 set(ADDITIONAL_SRC "")
189 set(ADDITIONAL_LNK "")
191 set(X86_CPUS x86 x86_64 i686)
193 message(STATUS "CMAKE_SYSTEM_PROCESSOR := ${CMAKE_SYSTEM_PROCESSOR}")
196 message("Apple device detected.")
197 set(ADDITIONAL_SRC src/util_darwin.h src/util_darwin.m ${ADDITIONAL_SRC})
198 set(ADDITIONAL_LNK "-framework Foundation" "-framework AppKit")
202 message("Qt5 library found, building gui :)")
203 set(CMAKE_AUTOMOC ON)
204 set(CMAKE_AUTORCC ON)
205 set(CMAKE_AUTOUIC ON)
211 add_definitions("-DHAVE_GUI")
212 set(ADDITIONAL_LNK Qt5::Core Qt5::Widgets Qt5::Gui ${ADDITIONAL_LNK})
214 message("Qt5 library not found, not building gui")
221 message("Bluez library found, building native Bluetooth support :)")
222 add_definitions("-DHAVE_BLUEZ")
223 set(ADDITIONAL_LNK bluetooth ${ADDITIONAL_LNK})
232 target_compile_options(proxmark3 PUBLIC -Wall -O3)
235 # Mingw uses by default Microsoft printf, we want the GNU printf (e.g. for %z)
236 # and setting _ISOC99_SOURCE sets internally __USE_MINGW_ANSI_STDIO=1
237 # FTR __USE_MINGW_ANSI_STDIO seems deprecated in Mingw32
238 # but not Mingw64 https://fr.osdn.net/projects/mingw/lists/archive/users/2019-January/000199.html
239 target_compile_definitions(proxmark3 PRIVATE _ISOC99_SOURCE)
241 set(CMAKE_C_FLAGS "-mno-ms-bitfields -fexec-charset=cp850 ${CMAKE_C_FLAGS}")
242 set(CMAKE_CXX_FLAGS "-mno-ms-bitfields -fexec-charset=cp850 ${CMAKE_CXX_FLAGS}")
245 target_include_directories(proxmark3 PRIVATE
253 set_target_properties(proxmark3 PROPERTIES LINK_FLAGS "-Wl,-F/Library/Frameworks, -L/usr/local/opt/readline/lib")
254 set_target_properties(proxmark3 PROPERTIES COMPILE_FLAGS "-I/usr/local/opt/readline/include")
256 # required for Raspberry Pi, but breaks with clang (OSX). Need to be at the end of the linker line.
257 set(ADDITIONAL_LNK ${ADDITIONAL_LNK} -Wl,--as-needed -latomic -Wl,--no-as-needed)
261 find_library(pm3rrg_rdv4_cliparser REQUIRED)
262 find_library(pm3rrg_rdv4_jansson REQUIRED)
263 find_library(pm3rrg_rdv4_tinycbor REQUIRED)
264 find_library(pm3rrg_rdv4_lua REQUIRED)
265 find_library(pm3rrg_rdv4_mbedtls REQUIRED)
266 find_library(pm3rrg_rdv4_reveng REQUIRED)
267 find_library(pm3rrg_rdv4_z REQUIRED)
268 find_library(pm3rrg_rdv4_hardnested REQUIRED)
269 find_library(pm3rrg_rdv4_whereami REQUIRED)
271 target_link_libraries(proxmark3 PRIVATE
276 pm3rrg_rdv4_cliparser
283 pm3rrg_rdv4_hardnested
287 install(TARGETS proxmark3 DESTINATION "bin")
288 install(DIRECTORY cmdscripts lualibs luascripts resources dictionaries DESTINATION "share/proxmark3")
290 add_custom_command(OUTPUT lualibs/pm3_cmd.lua
291 COMMAND "awk -f pm3_cmd_h2lua.awk ../include/pm3_cmd.h > lualibs/pm3_cmd.lua"
292 COMMENT "Creating lualibs/pm3_cmd.lua"
295 add_custom_command(OUTPUT lualibs/mfc_default_keys.lua
296 COMMAND "awk -f default_keys_dic2lua.awk mfc_default_keys.dic > lualibs/mfc_default_keys.lua"
297 COMMENT "Creating lualibs/mfc_default_keys.lua"
300 #"make package" will trigger this
301 SET(CPACK_GENERATOR "DEB")
302 SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Iceman")