1 #-----------------------------------------------------------------------------
2 # This code is licensed to you under the terms of the GNU GPL, version 2 or,
3 # at your option, any later version. See the LICENSE.txt file for the text of
5 #-----------------------------------------------------------------------------
11 TARFLAGS
= -C ..
--ignore-failed-read
-rvf
15 ENV_LDFLAGS
:= $(LDFLAGS
)
16 ENV_CFLAGS
:= $(CFLAGS
)
17 VPATH
= ..
/common ..
/zlib ..
/uart
20 LDLIBS
= -L
/opt
/local
/lib
-L
/usr
/local
/lib
-lreadline
-lpthread
-lm
21 LUALIB
= ..
/liblua
/liblua.a
22 JANSSONLIBPATH
= .
/jansson
23 JANSSONLIB
= $(JANSSONLIBPATH
)/libjansson.a
24 MBEDTLSLIBPATH
= ..
/common
/mbedtls
25 MBEDTLSLIB
= $(MBEDTLSLIBPATH
)/libmbedtls.a
26 CBORLIBPATH
= .
/tinycbor
27 CBORLIB
= $(CBORLIBPATH
)/tinycbor.a
28 LIBINCLUDES
= -I..
/zlib
-I..
/uart
-I..
/liblua
-I
$(MBEDTLSLIBPATH
) -I
$(JANSSONLIBPATH
) -I
$(CBORLIBPATH
)
29 INCLUDES_CLIENT
= -I.
-I..
/include -I..
/common
-I
/opt
/local
/include $(LIBINCLUDES
)
30 LDFLAGS
= $(ENV_LDFLAGS
)
31 CFLAGS
= $(ENV_CFLAGS
) -std
=c99
-D_ISOC99_SOURCE
$(INCLUDES_CLIENT
) -Wall
-g
-O3
32 CXXFLAGS
= -I..
/include -Wall
-O3
35 include ..
/common
/Makefile_Enabled_Options.common
36 CFLAGS
+= $(APP_CFLAGS
)
37 ifneq (,$(findstring WITH_SMARTCARD
,$(APP_CFLAGS
)))
38 SRC_SMARTCARD
= cmdsmartcard.c pcsc.c
43 platform
= $(shell uname
)
45 ifneq (,$(findstring MINGW
,$(platform
)))
47 PCSC_LIBS
= -lwinscard
49 ifeq ($(platform
),Darwin
)
51 PCSC_LIBS
= -framework PCSC
53 PCSC_INCLUDES
:= $(shell pkg-config
--cflags libpcsclite
)
54 PCSC_LIBS
:= $(shell pkg-config
--libs libpcsclite
)
59 ifneq (,$(findstring MINGW
,$(platform
)))
62 ifeq ($(platform
),Darwin
)
64 OBJCSRCS
= util_darwin.m
65 LDFLAGS
+= -framework Foundation
-framework AppKit
68 LDLIBS
+= -ltermcap
-lncurses
73 ifneq (,$(findstring WITH_GUI
,$(APP_CFLAGS
)))
74 # Check for correctly configured Qt5
75 QTINCLUDES
= $(shell pkg-config
--cflags Qt5Core Qt5Widgets
2>/dev
/null
)
76 QTLDLIBS
= $(shell pkg-config
--libs Qt5Core Qt5Widgets
2>/dev
/null
)
77 MOC
= $(shell pkg-config
--variable
=host_bins Qt5Core
)/moc
78 UIC
= $(shell pkg-config
--variable
=host_bins Qt5Core
)/uic
79 ifeq ($(QTINCLUDES
), )
80 # if Qt5 not found check for correctly configured Qt4
81 QTINCLUDES
= $(shell pkg-config
--cflags QtCore QtGui
2>/dev
/null
)
82 QTLDLIBS
= $(shell pkg-config
--libs QtCore QtGui
2>/dev
/null
)
83 MOC
= $(shell pkg-config
--variable
=moc_location QtCore
)
84 UIC
= $(shell pkg-config
--variable
=uic_location QtCore
)
86 CXXFLAGS
+= -std
=c
++11 -fPIC
88 ifeq ($(QTINCLUDES
), )
89 # if both pkg-config commands failed, search in common places
91 QTINCLUDES
= -I
$(QTDIR
)/include -I
$(QTDIR
)/include/QtCore
-I
$(QTDIR
)/include/QtGui
92 QTLDLIBS
= -L
$(QTDIR
)/lib
-lQtCore4
-lQtGui4
93 ifneq ($(wildcard $(QTDIR
)/include/QtWidgets
),)
94 QTINCLUDES
+= -I
$(QTDIR
)/include/QtWidgets
95 QTLDLIBS
= -L
$(QTDIR
)/lib
-lQt5Widgets
-lQt5Gui
-lQt5Core
96 CXXFLAGS
+= -std
=c
++11 -fPIC
98 MOC
= $(QTDIR
)/bin
/moc
99 UIC
= $(QTDIR
)/bin
/uic
105 ifneq ($(QTLDLIBS
), )
106 QTGUIOBJS
= $(OBJDIR
)/proxgui.o
$(OBJDIR
)/proxguiqt.o
$(OBJDIR
)/proxguiqt.moc.o
109 QTGUIOBJS
= $(OBJDIR
)/guidummy.o
112 # Flags to generate temporary dependency files
113 DEPFLAGS
= -MT
$@
-MMD
-MP
-MF
$(OBJDIR
)/$*.Td
114 # make temporary to final dependeny files after successful compilation
115 POSTCOMPILE
= $(MV
) -f
$(OBJDIR
)/$*.Td
$(OBJDIR
)/$*.d
118 CORESRCS
= uart_posix.c \
125 CMDSRCS
= $(SRC_SMARTCARD
) \
131 cliparser
/argtable3.c\
132 cliparser
/cliparser.c\
133 fido
/additional_ca.c \
139 loclass
/cipherutils.c \
141 loclass
/elite_crack.c\
157 emv
/crypto_polarssl.c\
162 emv
/test/cryptotest.c\
170 emv
/test/crypto_test.c\
188 hardnested
/hardnested_bruteforce.c \
198 hidcardformatutils.c\
226 cpu_arch
= $(shell uname
-m
)
227 ifneq ($(findstring 86, $(cpu_arch
)), )
228 MULTIARCHSRCS
= hardnested
/hardnested_bf_core.c hardnested
/hardnested_bitarray_core.c
230 ifneq ($(findstring amd64
, $(cpu_arch
)), )
231 MULTIARCHSRCS
= hardnested
/hardnested_bf_core.c hardnested
/hardnested_bitarray_core.c
233 ifeq ($(MULTIARCHSRCS
), )
234 CMDSRCS
+= hardnested
/hardnested_bf_core.c hardnested
/hardnested_bitarray_core.c
237 ZLIBSRCS
= deflate.c adler32.c trees.c zutil.c inflate.c inffast.c inftrees.c
238 ZLIBFLAGS
= -DZ_SOLO
-DZ_PREFIX
-DNO_GZIP
-DZLIB_PM3_TUNED
241 QTGUISRCS
= proxgui.
cpp proxguiqt.
cpp proxguiqt.moc.
cpp guidummy.
cpp
243 COREOBJS
= $(CORESRCS
:%.c
=$(OBJDIR
)/%.o
)
244 CMDOBJS
= $(CMDSRCS
:%.c
=$(OBJDIR
)/%.o
)
245 OBJCOBJS
= $(OBJCSRCS
:%.m
=$(OBJDIR
)/%.o
)
246 ZLIBOBJS
= $(ZLIBSRCS
:%.c
=$(OBJDIR
)/%.o
)
247 MULTIARCHOBJS
= $(MULTIARCHSRCS
:%.c
=$(OBJDIR
)/%_NOSIMD.o
) \
248 $(MULTIARCHSRCS
:%.c
=$(OBJDIR
)/%_MMX.o
) \
249 $(MULTIARCHSRCS
:%.c
=$(OBJDIR
)/%_SSE2.o
) \
250 $(MULTIARCHSRCS
:%.c
=$(OBJDIR
)/%_AVX.o
) \
251 $(MULTIARCHSRCS
:%.c
=$(OBJDIR
)/%_AVX2.o
)
253 SUPPORTS_AVX512
:= $(shell echo | gcc
-E
-mavx512f
- > /dev
/null
2>&1 && echo
"True" )
254 HARD_SWITCH_NOSIMD
= -mno-mmx
-mno-sse2
-mno-avx
-mno-avx2
255 HARD_SWITCH_MMX
= -mmmx
-mno-sse2
-mno-avx
-mno-avx2
256 HARD_SWITCH_SSE2
= -mmmx
-msse2
-mno-avx
-mno-avx2
257 HARD_SWITCH_AVX
= -mmmx
-msse2
-mavx
-mno-avx2
258 HARD_SWITCH_AVX2
= -mmmx
-msse2
-mavx
-mavx2
259 HARD_SWITCH_AVX512
= -mmmx
-msse2
-mavx
-mavx2
-mavx512f
260 ifeq "$(SUPPORTS_AVX512)" "True"
261 HARD_SWITCH_NOSIMD
+= -mno-avx512f
262 HARD_SWITCH_MMX
+= -mno-avx512f
263 HARD_SWITCH_SSE2
+= -mno-avx512f
264 HARD_SWITCH_AVX
+= -mno-avx512f
265 HARD_SWITCH_AVX2
+= -mno-avx512f
266 MULTIARCHOBJS
+= $(MULTIARCHSRCS
:%.c
=$(OBJDIR
)/%_AVX512.o
)
269 BINS
= proxmark3 flasher fpga_compress
270 WINBINS
= $(patsubst %, %.exe
, $(BINS
))
271 CLEAN
= $(BINS
) $(WINBINS
) $(COREOBJS
) $(CMDOBJS
) $(OBJCOBJS
) $(ZLIBOBJS
) $(QTGUIOBJS
) $(MULTIARCHOBJS
) $(OBJDIR
)/*.o
*.moc.
cpp ui
/ui_overlays.h lualibs
/usb_cmd.lua
273 # need to assign dependancies to build these first...
274 all: lua_build jansson_build mbedtls_build cbor_build
$(BINS
)
276 all-static
: LDLIBS
:=-static
$(LDLIBS
)
277 all-static
: proxmark3 flasher fpga_compress
279 proxmark3
: LDLIBS
+=$(LUALIB
) $(JANSSONLIB
) $(MBEDTLSLIB
) $(CBORLIB
) $(QTLDLIBS
) $(PCSC_LIBS
)
280 proxmark3
: $(OBJDIR
)/proxmark3.o
$(COREOBJS
) $(CMDOBJS
) $(OBJCOBJS
) $(QTGUIOBJS
) $(MULTIARCHOBJS
) $(ZLIBOBJS
) lualibs
/usb_cmd.lua
281 $(LD
) $(LDFLAGS
) $(OBJDIR
)/proxmark3.o
$(COREOBJS
) $(CMDOBJS
) $(OBJCOBJS
) $(QTGUIOBJS
) $(MULTIARCHOBJS
) $(ZLIBOBJS
) $(LDLIBS
) -o
$@
283 flasher
: $(OBJDIR
)/flash.o
$(OBJDIR
)/flasher.o
$(COREOBJS
) $(OBJCOBJS
)
284 $(LD
) $(LDFLAGS
) $^
$(LDLIBS
) -o
$@
286 fpga_compress
: $(OBJDIR
)/fpga_compress.o
$(ZLIBOBJS
)
287 $(LD
) $(LDFLAGS
) $(ZLIBFLAGS
) $^
$(LDLIBS
) -o
$@
289 proxgui.
cpp: ui
/ui_overlays.h
291 proxguiqt.moc.
cpp: proxguiqt.h
294 ui
/ui_overlays.h
: ui
/overlays.ui
297 lualibs
/usb_cmd.lua
: ..
/include/usb_cmd.h
298 awk
-f usb_cmd_h2lua.awk
$^
> $@
302 cd ..
/liblua
&& make
clean
303 cd
$(JANSSONLIBPATH
) && make
clean
304 cd
$(MBEDTLSLIBPATH
) && make
clean
305 cd
$(CBORLIBPATH
) && make
clean
308 $(TAR
) $(TARFLAGS
) ..
/proxmark3-
$(platform
)-bin.
tar $(BINS
:%=client
/%) $(WINBINS
:%=client
/%)
311 @echo Compiling liblua
, using platform
$(LUAPLATFORM
)
312 cd ..
/liblua
&& make
$(LUAPLATFORM
)
315 @echo Compiling jansson
316 cd
$(JANSSONLIBPATH
) && make
all
319 @echo Compiling mbedtls
320 cd
$(MBEDTLSLIBPATH
) && make
all
323 @echo Compiling tinycbor
324 cd
$(CBORLIBPATH
) && make
all
328 $(OBJDIR
)/%_NOSIMD.o
: %.c
$(OBJDIR
)/%.d
329 $(CC
) $(DEPFLAGS
) $(CFLAGS
) $(HARD_SWITCH_NOSIMD
) -c
-o
$@
$<
331 $(OBJDIR
)/%_MMX.o
: %.c
$(OBJDIR
)/%.d
332 $(CC
) $(DEPFLAGS
) $(CFLAGS
) $(HARD_SWITCH_MMX
) -c
-o
$@
$<
334 $(OBJDIR
)/%_SSE2.o
: %.c
$(OBJDIR
)/%.d
335 $(CC
) $(DEPFLAGS
) $(CFLAGS
) $(HARD_SWITCH_SSE2
) -c
-o
$@
$<
337 $(OBJDIR
)/%_AVX.o
: %.c
$(OBJDIR
)/%.d
338 $(CC
) $(DEPFLAGS
) $(CFLAGS
) $(HARD_SWITCH_AVX
) -c
-o
$@
$<
340 $(OBJDIR
)/%_AVX2.o
: %.c
$(OBJDIR
)/%.d
341 $(CC
) $(DEPFLAGS
) $(CFLAGS
) $(HARD_SWITCH_AVX2
) -c
-o
$@
$<
343 $(OBJDIR
)/%_AVX512.o
: %.c
$(OBJDIR
)/%.d
344 $(CC
) $(DEPFLAGS
) $(CFLAGS
) $(HARD_SWITCH_AVX512
) -c
-o
$@
$<
347 $(OBJDIR
)/%.o
: %.c
$(OBJDIR
)/%.d
348 $(CC
) $(DEPFLAGS
) $(CFLAGS
) $(ZLIBFLAGS
) $(PCSC_INCLUDES
) -c
-o
$@
$<
352 $(OBJDIR
)/%.o
: %.
cpp $(OBJDIR
)/%.d
353 $(CXX
) $(DEPFLAGS
) $(CXXFLAGS
) $(QTINCLUDES
) -c
-o
$@
$<
357 $(OBJDIR
)/%.o
: %.m
$(OBJDIR
)/%.d
358 $(CC
) $(DEPFLAGS
) $(CFLAGS
) -c
-o
$@
$<
361 #$(CMDOBJS) $(COREOBJS): $(notdir $(%.c)) %.d
362 # $(CC) $(DEPFLAGS) $(CFLAGS) -c -o $@ $<
365 #$(ZLIBOBJS): $(notdir $(%.c)) %.d
366 # $(CC) $(DEPFLAGS) $(CFLAGS) $(ZLIBFLAGS) -c -o $@ $<
369 #$(QTGUIOBJS): $(notdir $(%.cpp)) %.d
370 # $(CXX) $(DEPFLAGS) $(CXXFLAGS) -c -o $@ $<
373 DEPENDENCY_FILES
= $(patsubst %.c
, $(OBJDIR
)/%.d
, $(CORESRCS
) $(CMDSRCS
) $(ZLIBSRCS
) $(MULTIARCHSRCS
)) \
374 $(patsubst %.
cpp, $(OBJDIR
)/%.d
, $(QTGUISRCS
)) \
375 $(patsubst %.m
, $(OBJDIR
)/%.d
, $(OBJCSRCS
)) \
376 $(OBJDIR
)/proxmark3.d
$(OBJDIR
)/flash.d
$(OBJDIR
)/flasher.d
$(OBJDIR
)/fpga_compress.d
378 $(DEPENDENCY_FILES
): ;
379 .PRECIOUS
: $(DEPENDENCY_FILES
)
381 -include $(DEPENDENCY_FILES
)