+CMDSRCS = $(SRC_SMARTCARD) \
+ crapto1/crapto1.c\
+ crapto1/crypto1.c\
+ crypto/libpcrypto.c\
+ crypto/asn1utils.c\
+ crypto/asn1dump.c\
+ cliparser/argtable3.c\
+ cliparser/cliparser.c\
+ fido/additional_ca.c \
+ fido/cose.c \
+ fido/cbortools.c \
+ fido/fidocore.c \
+ mifare/mfkey.c \
+ loclass/cipher.c \
+ loclass/cipherutils.c \
+ loclass/ikeys.c \
+ loclass/elite_crack.c\
+ loclass/fileutils.c\
+ whereami.c\
+ mifare/mifarehost.c\
+ mifare/mifare4.c\
+ mifare/mad.c \
+ mifare/ndef.c \
+ parity.c\
+ crc.c \
+ crc16.c \
+ crc64.c \
+ iso14443crc.c \
+ iso15693tools.c \
+ graph.c \
+ cmddata.c \
+ lfdemod.c \
+ emv/crypto_polarssl.c\
+ emv/crypto.c\
+ emv/emv_pk.c\
+ emv/emv_pki.c\
+ emv/emv_pki_priv.c\
+ emv/test/cryptotest.c\
+ emv/apduinfo.c\
+ emv/dump.c\
+ emv/tlv.c\
+ emv/emv_tags.c\
+ emv/dol.c\
+ emv/emvjson.c\
+ emv/emvcore.c\
+ emv/test/crypto_test.c\
+ emv/test/sda_test.c\
+ emv/test/dda_test.c\
+ emv/test/cda_test.c\
+ emv/cmdemv.c\
+ emv/emv_roca.c \
+ cmdhf.c \
+ cmdhflist.c \
+ cmdhf14a.c \
+ cmdhf14b.c \
+ cmdhf15.c \
+ cmdhfepa.c \
+ cmdhflegic.c \
+ cmdhficlass.c \
+ cmdhfmf.c \
+ cmdhfmfp.c \
+ cmdhfmfu.c \
+ cmdhfmfhard.c \
+ hardnested/hardnested_bruteforce.c \
+ cmdhftopaz.c \
+ cmdhffido.c \
+ cmdhw.c \
+ cmdlf.c \
+ cmdlfawid.c \
+ cmdlfcotag.c\
+ cmdlfem4x.c \
+ cmdlffdx.c \
+ cmdlfgproxii.c \
+ hidcardformatutils.c\
+ hidcardformats.c\
+ cmdlfhid.c \
+ cmdlfhitag.c \
+ cmdlfio.c \
+ cmdlfindala.c \
+ cmdlfjablotron.c \
+ cmdlfnexwatch.c \
+ cmdlfnoralsy.c \
+ cmdlfparadox.c \
+ cmdlfpcf7931.c \
+ cmdlfpresco.c \
+ cmdlfpyramid.c \
+ cmdlfsecurakey.c \
+ cmdlft55xx.c \
+ cmdlfti.c \
+ cmdlfviking.c\
+ cmdlfvisa2000.c\
+ cmdlfpac.c\
+ cmdparser.c \
+ cmdmain.c \
+ scripting.c\
+ cmdscript.c\
+ pm3_binlib.c\
+ pm3_bitlib.c\
+ protocols.c\
+ taginfo.c
+
+cpu_arch = $(shell uname -m)
+ifneq ($(findstring 86, $(cpu_arch)), )
+ MULTIARCHSRCS = hardnested/hardnested_bf_core.c hardnested/hardnested_bitarray_core.c
+endif
+ifneq ($(findstring amd64, $(cpu_arch)), )
+ MULTIARCHSRCS = hardnested/hardnested_bf_core.c hardnested/hardnested_bitarray_core.c
+endif
+ifeq ($(MULTIARCHSRCS), )
+ CMDSRCS += hardnested/hardnested_bf_core.c hardnested/hardnested_bitarray_core.c
+endif
+
+ZLIBSRCS = deflate.c adler32.c trees.c zutil.c inflate.c inffast.c inftrees.c
+ZLIBFLAGS = -DZ_SOLO -DZ_PREFIX -DNO_GZIP -DZLIB_PM3_TUNED
+#-DDEBUG -Dverbose=1
+
+QTGUISRCS = proxgui.cpp proxguiqt.cpp proxguiqt.moc.cpp guidummy.cpp
+
+COREOBJS = $(CORESRCS:%.c=$(OBJDIR)/%.o)
+CMDOBJS = $(CMDSRCS:%.c=$(OBJDIR)/%.o)
+OBJCOBJS = $(OBJCSRCS:%.m=$(OBJDIR)/%.o)
+ZLIBOBJS = $(ZLIBSRCS:%.c=$(OBJDIR)/%.o)
+MULTIARCHOBJS = $(MULTIARCHSRCS:%.c=$(OBJDIR)/%_NOSIMD.o) \
+ $(MULTIARCHSRCS:%.c=$(OBJDIR)/%_MMX.o) \
+ $(MULTIARCHSRCS:%.c=$(OBJDIR)/%_SSE2.o) \
+ $(MULTIARCHSRCS:%.c=$(OBJDIR)/%_AVX.o) \
+ $(MULTIARCHSRCS:%.c=$(OBJDIR)/%_AVX2.o)
+
+SUPPORTS_AVX512 := $(shell echo | gcc -E -mavx512f - > /dev/null 2>&1 && echo "True" )
+HARD_SWITCH_NOSIMD = -mno-mmx -mno-sse2 -mno-avx -mno-avx2
+HARD_SWITCH_MMX = -mmmx -mno-sse2 -mno-avx -mno-avx2
+HARD_SWITCH_SSE2 = -mmmx -msse2 -mno-avx -mno-avx2
+HARD_SWITCH_AVX = -mmmx -msse2 -mavx -mno-avx2
+HARD_SWITCH_AVX2 = -mmmx -msse2 -mavx -mavx2
+HARD_SWITCH_AVX512 = -mmmx -msse2 -mavx -mavx2 -mavx512f
+ifeq "$(SUPPORTS_AVX512)" "True"
+ HARD_SWITCH_NOSIMD += -mno-avx512f
+ HARD_SWITCH_MMX += -mno-avx512f
+ HARD_SWITCH_SSE2 += -mno-avx512f
+ HARD_SWITCH_AVX += -mno-avx512f
+ HARD_SWITCH_AVX2 += -mno-avx512f
+ MULTIARCHOBJS += $(MULTIARCHSRCS:%.c=$(OBJDIR)/%_AVX512.o)
+endif
+
+BINS = proxmark3 flasher fpga_compress
+WINBINS = $(patsubst %, %.exe, $(BINS))
+CLEAN = $(BINS) $(WINBINS) $(COREOBJS) $(CMDOBJS) $(OBJCOBJS) $(ZLIBOBJS) $(QTGUIOBJS) $(MULTIARCHOBJS) $(OBJDIR)/*.o *.moc.cpp ui/ui_overlays.h lualibs/usb_cmd.lua
+
+# need to assign dependancies to build these first...
+all: lua_build jansson_build mbedtls_build cbor_build $(BINS)
+
+all-static: LDLIBS:=-static $(LDLIBS)
+all-static: proxmark3 flasher fpga_compress