Release v4.9237 - Ice Coffee :coffee:
[RRG-proxmark3.git] / client / CMakeLists.txt
blobce58a4449a7e3f886c030c595ab0a0cf43bc4fa5
1 # MINGW:
2 #  On ProxSpace 3.4:
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)
9 project(proxmark3)
11 if(CMAKE_VERSION VERSION_LESS "3.7.0")
12     set(CMAKE_INCLUDE_CURRENT_DIR ON)
13 endif()
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)
24 endif()
25 set(QT_PACKAGELIST
26     Qt5Core
27     Qt5Widgets
28     Qt5Gui
30 set(Qt5_FOUND ON)
31 foreach(_qt_package IN LISTS QT_PACKAGELIST)
32     find_package(${_qt_package} QUIET ${QT_FIND_PACKAGE_OPTIONS})
33     if(NOT ${_qt_package}_FOUND)
34         set(Qt5_FOUND OFF)
35     endif(NOT ${_qt_package}_FOUND)
36 endforeach()
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)
45 set (TARGET_SOURCES
46         src/proxmark3.c
47         ../common/commonutil.c
48         ../common/util_posix.c
49         ../common/parity.c
50         ../common/bucketsort.c
51         ../common/crapto1/crapto1.c
52         ../common/crapto1/crypto1.c
53         ../common/crc.c
54         ../common/crc16.c
55         ../common/crc32.c
56         ../common/crc64.c
57         ../common/lfdemod.c
58         ../common/legic_prng.c
59         ../common/iso15693tools.c
60         ../common/cardhelper.c
61         ../common/generator.c
62         src/crypto/asn1dump.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
70         src/emv/apduinfo.c
71         src/emv/cmdemv.c
72         src/emv/crypto.c
73         src/emv/crypto_polarssl.c
74         src/emv/dol.c
75         src/emv/dump.c
76         src/emv/emv_pk.c
77         src/emv/emv_pki.c
78         src/emv/emv_pki_priv.c
79         src/emv/emv_roca.c
80         src/emv/emv_tags.c
81         src/emv/emvcore.c
82         src/emv/emvjson.c
83         src/emv/tlv.c
84         src/fido/additional_ca.c
85         src/fido/cbortools.c
86         src/fido/cose.c
87         src/fido/fidocore.c
88         src/loclass/cipher.c
89         src/loclass/cipherutils.c
90         src/loclass/elite_crack.c
91         src/loclass/hash1_brute.c
92         src/loclass/ikeys.c
93         src/mifare/mad.c
94         src/mifare/mfkey.c
95         src/mifare/mifare4.c
96         src/mifare/mifaredefault.c
97         src/mifare/mifarehost.c
98         src/mifare/ndef.c
99         src/mifare/desfire_crypto.c
100         src/uart/uart_posix.c
101         src/uart/uart_win32.c
102         src/ui/overlays.ui
103         src/aidsearch.c
104         src/cmdanalyse.c
105         src/cmdcrc.c
106         src/cmddata.c
107         src/cmdflashmem.c
108         src/cmdflashmemspiffs.c
109         src/cmdhf.c
110         src/cmdhf14a.c
111         src/cmdhf14b.c
112         src/cmdhf15.c
113         src/cmdhfcryptorf.c
114         src/cmdhfepa.c
115         src/cmdhffelica.c
116         src/cmdhffido.c
117         src/cmdhficlass.c
118         src/cmdhflegic.c
119         src/cmdhflist.c
120         src/cmdhflto.c
121         src/cmdhfmf.c
122         src/cmdhfmfdes.c
123         src/cmdhfmfhard.c
124         src/cmdhfmfp.c
125         src/cmdhfmfu.c
126         src/cmdhfthinfilm.c
127         src/cmdhftopaz.c
128         src/cmdhw.c
129         src/cmdlf.c
130         src/cmdlfawid.c
131         src/cmdlfcotag.c
132         src/cmdlfem4x.c
133         src/cmdlffdx.c
134         src/cmdlfgallagher.c
135         src/cmdlfguard.c
136         src/cmdlfhid.c
137         src/cmdlfhitag.c
138         src/cmdlfindala.c
139         src/cmdlfio.c
140         src/cmdlfjablotron.c
141         src/cmdlfkeri.c
142         src/cmdlfmotorola.c
143         src/cmdlfnedap.c
144         src/cmdlfnexwatch.c
145         src/cmdlfnoralsy.c
146         src/cmdlfpac.c
147         src/cmdlfparadox.c
148         src/cmdlfpcf7931.c
149         src/cmdlfpresco.c
150         src/cmdlfpyramid.c
151         src/cmdlfsecurakey.c
152         src/cmdlft55xx.c
153         src/cmdlfti.c
154         src/cmdlfverichip.c
155         src/cmdlfviking.c
156         src/cmdlfvisa2000.c
157         src/cmdmain.c
158         src/cmdparser.c
159         src/cmdscript.c
160         src/cmdsmartcard.c
161         src/cmdtrace.c
162         src/cmdusart.c
163         src/cmdwiegand.c
164         src/comms.c
165         src/fileutils.c
166         src/flash.c
167         src/graph.c
168         src/preferences.c
169         src/pm3_binlib.c
170         src/pm3_bitlib.c
171         src/prng.c
172         src/scandir.c
173         src/scripting.c
174         src/tea.c
175         src/ui.c
176         src/util.c
177         src/wiegand_formats.c
178         src/wiegand_formatutils.c
179         ${CMAKE_BINARY_DIR}/version.c
180         )
182 add_custom_command(
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}")
195 if (APPLE)
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")
199 endif (APPLE)
201 if (Qt5_FOUND)
202     message("Qt5 library found, building gui :)")
203     set(CMAKE_AUTOMOC ON)
204     set(CMAKE_AUTORCC ON)
205     set(CMAKE_AUTOUIC ON)
206     set (TARGET_SOURCES
207             src/proxgui.cpp
208             src/proxguiqt.cpp
209             ${TARGET_SOURCES})
211     add_definitions("-DHAVE_GUI")
212     set(ADDITIONAL_LNK Qt5::Core Qt5::Widgets Qt5::Gui ${ADDITIONAL_LNK})
213 else (Qt5_FOUND)
214     message("Qt5 library not found, not building gui")
215     set(TARGET_SOURCES
216             src/guidummy.cpp
217             ${TARGET_SOURCES})
218 endif (Qt5_FOUND)
220 if (BLUEZ_FOUND)
221     message("Bluez library found, building native Bluetooth support :)")
222     add_definitions("-DHAVE_BLUEZ")
223     set(ADDITIONAL_LNK bluetooth ${ADDITIONAL_LNK})
224 endif (BLUEZ_FOUND)
226 add_executable(
227         proxmark3
228         ${TARGET_SOURCES}
229         ${ADDITIONAL_SRC}
232 target_compile_options(proxmark3 PUBLIC -Wall -O3)
234 if (MINGW)
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}")
243 endif (MINGW)
245 target_include_directories(proxmark3 PRIVATE
246         ../common
247         ../common_fpga
248         ../include
249         src
252 if (APPLE)
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")
255 else (APPLE)
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)
258 endif (APPLE)
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
272         readline
273         pthread
274         m
275         pm3rrg_rdv4_mbedtls
276         pm3rrg_rdv4_cliparser
277         pm3rrg_rdv4_jansson
278         pm3rrg_rdv4_lua
279         pm3rrg_rdv4_tinycbor
280         pm3rrg_rdv4_amiibo
281         pm3rrg_rdv4_reveng
282         pm3rrg_rdv4_z
283         pm3rrg_rdv4_hardnested
284         pm3rrg_rdv4_whereami
285         ${ADDITIONAL_LNK})
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"
293         )
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"
298         )
300 #"make package" will trigger this
301 SET(CPACK_GENERATOR "DEB")
302 SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Iceman")
303 INCLUDE(CPack)