#----------------------------------------------------------------------------- # Copyright (C) Proxmark3 contributors. See AUTHORS.md for details. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # See LICENSE.txt for the text of the license. #----------------------------------------------------------------------------- # Default platform if no platform specified PLATFORM?=PM3RDV4 # Standalone Mode info (path depends if make is called at top or from armsrc) # Guard Makefile.hal against implicit rules: (with % to avoid being first goal) %/Makefile.hal: ; -include armsrc/Standalone/Makefile.hal -include Standalone/Makefile.hal ifndef DEFAULT_STANDALONE $(error Could not find armsrc/Standalone/Makefile.hal) endif define KNOWN_PLATFORM_DEFINITIONS Known definitions: +============================================+ | PLATFORM | DESCRIPTION | +============================================+ | PM3RDV4 (def) | Proxmark3 RDV4 | +--------------------------------------------+ | PM3GENERIC | Proxmark3 generic target | +--------------------------------------------+ | PM3ICOPYX | iCopy-X with XC3S100E | +--------------------------------------------+ +============================================+ | PLATFORM_EXTRAS | DESCRIPTION | +============================================+ | BTADDON | Proxmark3 RDV4 BT add-on | +--------------------------------------------+ endef define HELP_DEFINITIONS Options to define platform, platform extras and/or standalone mode: (1) Run make with your PLATFORM, PLATFORM_EXTRAS and/or STANDALONE choices as follows: make PLATFORM=PM3GENERIC STANDALONE=$(HELP_EXAMPLE_STANDALONE) (2) Save a file called Makefile.platform with contents, e.g.: PLATFORM=PM3GENERIC or if you have a Proxmark 3 RDV4 with the BT add-on: PLATFORM=PM3RDV4 PLATFORM_EXTRAS=BTADDON Default standalone mode is $(DEFAULT_STANDALONE). To disable standalone modes, set explicitly an empty STANDALONE: STANDALONE= For Proxmarks with only 256k, you can define PLATFORM_SIZE=256 to be warned if the image is too big for your device and you can specify which parts to skip in order to reduce the size: SKIP_LF=1 SKIP_HITAG=1 SKIP_EM4x50=1 SKIP_ISO15693=1 SKIP_LEGICRF=1 SKIP_ISO14443b=1 SKIP_ISO14443a=1 SKIP_ICLASS=1 SKIP_FELICA=1 SKIP_NFCBARCODE=1 SKIP_HFSNIFF=1 SKIP_HFPLOT=1 SKIP_ZX8211=1 endef define KNOWN_DEFINITIONS $(KNOWN_PLATFORM_DEFINITIONS) $(KNOWN_STANDALONE_DEFINITIONS) $(HELP_DEFINITIONS) endef PLTNAME = Unknown Platform PLATFORM_FPGA = fpga-undefined ifeq ($(PLATFORM),PM3RDV4) PLATFORM_DEFS = -DWITH_SMARTCARD -DWITH_FLASH -DRDV4 PLTNAME = Proxmark3 RDV4 PLATFORM_FPGA = xc2s30 else ifeq ($(PLATFORM),PM3OTHER) $(warning PLATFORM=PM3OTHER is deprecated, please use PLATFORM=PM3GENERIC) PLTNAME = Proxmark3 generic target PLATFORM_FPGA = xc2s30 else ifeq ($(PLATFORM),PM3GENERIC) PLTNAME = Proxmark3 generic target PLATFORM_FPGA = xc2s30 else ifeq ($(PLATFORM),PM3ICOPYX) PLATFORM_DEFS = -DWITH_FLASH -DICOPYX -DXC3 PLTNAME = iCopy-X with XC3S100E PLATFORM_FPGA = xc3s100e else $(error Invalid or empty PLATFORM: $(PLATFORM). $(KNOWN_DEFINITIONS)) endif # parsing additional PLATFORM_EXTRAS tokens PLATFORM_EXTRAS_TMP:=$(PLATFORM_EXTRAS) ifneq (,$(findstring BTADDON,$(PLATFORM_EXTRAS_TMP))) PLATFORM_DEFS += -DWITH_FPC_USART_HOST PLATFORM_EXTRAS_TMP := $(strip $(filter-out BTADDON,$(PLATFORM_EXTRAS_TMP))) endif ifneq (,$(findstring FPC_USART_DEV,$(PLATFORM_EXTRAS_TMP))) PLATFORM_DEFS += -DWITH_FPC_USART_DEV PLATFORM_EXTRAS_TMP := $(strip $(filter-out FPC_USART_DEV,$(PLATFORM_EXTRAS_TMP))) endif ifneq (,$(PLATFORM_EXTRAS_TMP)) $(error Unknown PLATFORM_EXTRAS token(s): $(PLATFORM_EXTRAS_TMP)) endif # common LF support ifneq ($(SKIP_LF),1) PLATFORM_DEFS += -DWITH_LF endif ifneq ($(SKIP_HITAG),1) PLATFORM_DEFS += -DWITH_HITAG endif ifneq ($(SKIP_EM4x50),1) PLATFORM_DEFS += -DWITH_EM4x50 endif ifneq ($(SKIP_EM4x70),1) PLATFORM_DEFS += -DWITH_EM4x70 endif ifneq ($(SKIP_ZX8211),1) PLATFORM_DEFS += -DWITH_ZX8211 endif # common HF support ifneq ($(SKIP_HF),1) PLATFORM_DEFS += -DWITH_GENERAL_HF endif ifneq ($(SKIP_ISO15693),1) PLATFORM_DEFS += -DWITH_ISO15693 endif ifneq ($(SKIP_LEGICRF),1) PLATFORM_DEFS += -DWITH_LEGICRF endif ifneq ($(SKIP_ISO14443b),1) PLATFORM_DEFS += -DWITH_ISO14443b endif ifneq ($(SKIP_ISO14443a),1) PLATFORM_DEFS += -DWITH_ISO14443a endif ifneq ($(SKIP_ICLASS),1) PLATFORM_DEFS += -DWITH_ICLASS endif ifneq ($(SKIP_FELICA),1) PLATFORM_DEFS += -DWITH_FELICA endif ifneq ($(SKIP_NFCBARCODE),1) PLATFORM_DEFS += -DWITH_NFCBARCODE endif ifneq ($(SKIP_HFSNIFF),1) PLATFORM_DEFS += -DWITH_HFSNIFF endif ifneq ($(SKIP_HFPLOT),1) PLATFORM_DEFS += -DWITH_HFPLOT endif ifeq ($(SKIP_COMPRESSION),1) PLATFORM_DEFS += -DWITH_NO_COMPRESSION endif # Standalone mode ifneq ($(strip $(filter $(PLATFORM_DEFS),$(STANDALONE_REQ_DEFS))),$(strip $(STANDALONE_REQ_DEFS))) $(error Chosen Standalone mode $(STANDALONE) requires $(strip $(STANDALONE_REQ_DEFS)), unsupported by $(PLTNAME)) endif ifneq (,$(STANDALONE_PLATFORM_DEFS)) PLATFORM_DEFS+=$(STANDALONE_PLATFORM_DEFS) endif $(info $(findstring WITH_STANDALONE_*,$(PLATFORM_DEFS))) # Misc (LCD support) ifneq (,$(findstring WITH_LCD,$(PLATFORM_DEFS))) #PLATFORM_DEFS += -DWITH_LCD endif # Add flags dependencies : # WITH_FPC_USART_* needs WITH_FPC_USART : ifneq (,$(findstring WITH_FPC_USART_,$(PLATFORM_DEFS))) PLATFORM_DEFS += -DWITH_FPC_USART endif PLATFORM_DEFS_INFO = $(strip $(filter-out STANDALONE%, $(subst -DWITH_,,$(PLATFORM_DEFS)))) PLATFORM_DEFS_INFO_STANDALONE = $(strip $(subst STANDALONE_,, $(filter STANDALONE%, $(subst -DWITH_,,$(PLATFORM_DEFS))))) # Check that only one Standalone mode has been chosen ifneq (,$(word 2, $(PLATFORM_DEFS_INFO_STANDALONE))) $(error You must choose only one Standalone mode!: $(PLATFORM_DEFS_INFO_STANDALONE)) endif PLATFORM_EXTRAS_INFO = $(PLATFORM_EXTRAS) # info when no extra ifeq (,$(PLATFORM_EXTRAS_INFO)) PLATFORM_EXTRAS_INFO = No extra selected endif # info when no standalone mode ifeq (,$(PLATFORM_DEFS_INFO_STANDALONE)) PLATFORM_DEFS_INFO_STANDALONE = No standalone mode selected endif ifeq ($(PLATFORM_SIZE),) PLATFORM_SIZE=512 endif PLATFORM_CHANGED=false ifneq ($(PLATFORM), $(CACHED_PLATFORM)) PLATFORM_CHANGED=true else ifneq ($(PLATFORM_EXTRAS), $(CACHED_PLATFORM_EXTRAS)) PLATFORM_CHANGED=true else ifneq ($(PLATFORM_DEFS), $(CACHED_PLATFORM_DEFS)) PLATFORM_CHANGED=true endif export PLATFORM export PLATFORM_EXTRAS export PLATFORM_EXTRAS_INFO export PLATFORM_SIZE export PLTNAME export PLATFORM_FPGA export PLATFORM_DEFS export PLATFORM_DEFS_INFO export PLATFORM_DEFS_INFO_STANDALONE export PLATFORM_CHANGED $(info ===================================================================) $(info Version info: $(shell tools/mkversion.sh --short 2>/dev/null || ../tools/mkversion.sh --short 2>/dev/null)) $(info Platform name: $(PLTNAME)) $(info PLATFORM: $(PLATFORM)) $(info PLATFORM_FPGA: $(PLATFORM_FPGA)) $(info PLATFORM_SIZE: $(PLATFORM_SIZE)) $(info Platform extras: $(PLATFORM_EXTRAS_INFO)) $(info Included options: $(PLATFORM_DEFS_INFO)) $(info Standalone mode: $(PLATFORM_DEFS_INFO_STANDALONE)) $(info ===================================================================)