# Set toolchain path if arm-none-eabi- binaries are not in user path #TOOLCHAIN_PATH ?= TERMINAL ?= gnome-terminal -e FLASH_START_ADDRESS = $(shell $(OBJDUMP) -h $(ELF) -j .text | grep .text | awk '{print $$4}') ifdef SEGGER_SERIAL JLINKEXE_OPTION = -SelectEmuBySn $(SEGGER_SERIAL) JLINKGDBSERVER_OPTION = -select USB=$(SEGGER_SERIAL) endif MAKE_BUILD_FOLDER = mkdir -p $(OUTPUT_PATH) JLINK = -JLinkExe $(JLINK_OPTIONS) $(JLINKEXE_OPTION) JLINKGDBSERVER = JLinkGDBServer $(JLINK_OPTIONS) $(JLINKGDBSERVER_OPTION) SOFTDEVICE_OUTPUT = $(OUTPUT_PATH)$(notdir $(SOFTDEVICE)) clean: rm -rf $(OUTPUT_PATH) rm -f *.jlink rm -f JLink.log rm -f .gdbinit rm -f bulk-program/*.hex flash: all flash.jlink $(JLINK) flash.jlink flash.jlink: printf "r\nloadbin $(BIN) $(FLASH_START_ADDRESS)\nr\ng\nexit\n" > flash.jlink flash-softdevice: erase-all flash-softdevice.jlink ifndef SOFTDEVICE $(error "You need to set the SOFTDEVICE command-line parameter to a path (without spaces) to the softdevice hex-file") endif $(OBJCOPY) -Iihex -Obinary $(SOFTDEVICE) $(SOFTDEVICE_OUTPUT:.hex=.bin) $(JLINK) flash-softdevice.jlink flash-softdevice.jlink: # Write to NVMC to enable write. Write mainpart, write UICR. Assumes device is erased. printf "w4 4001e504 1\nloadbin \"$(SOFTDEVICE_OUTPUT:.hex=.bin)\" 0\nr\ng\nexit\n" > flash-softdevice.jlink recover: recover.jlink erase-all.jlink pin-reset.jlink $(JLINK) recover.jlink $(JLINK) erase-all.jlink $(JLINK) pin-reset.jlink recover.jlink: printf "si 0\nt0\nsleep 1\ntck1\nsleep 1\nt1\nsleep 2\nt0\nsleep 2\nt1\nsleep 2\nt0\nsleep 2\nt1\nsleep 2\nt0\nsleep 2\nt1\nsleep 2\nt0\nsleep 2\nt1\nsleep 2\nt0\nsleep 2\nt1\nsleep 2\nt0\nsleep 2\nt1\nsleep 2\ntck0\nsleep 100\nsi 1\nr\nexit\n" > recover.jlink pin-reset.jlink: printf "w4 40000544 1\nr\nexit\n" > pin-reset.jlink pin-reset: pin-reset.jlink $(JLINK) pin-reset.jlink reset: reset.jlink $(JLINK) reset.jlink reset.jlink: printf "r\ng\nexit\n" > reset.jlink erase-all: erase-all.jlink $(JLINK) erase-all.jlink erase-all.jlink: # Write to NVMC to enable erase, do erase all, wait for completion. reset printf "w4 4001e504 2\nw4 4001e50c 1\nsleep 100\nr\nexit\n" > erase-all.jlink startdebug: debug-gdbinit $(TERMINAL) "$(JLINKGDBSERVER) -port $(GDB_PORT_NUMBER)" sleep 1 $(TERMINAL) "$(GDB) $(ELF)" debug-gdbinit: printf "target remote localhost:$(GDB_PORT_NUMBER)\nbreak main\n" > .gdbinit .PHONY: flash flash-softdevice erase-all startdebug TEST_CFLAGS=-std=gnu99 -g -Wall -Werror -I.. -I . -DHOST_BUILD -Os test: $(HOST_CC) $(TEST_CFLAGS) -lcrypto block.c aes.c cmac.c tests/test_cmac.c -o tests/test_cmac ./tests/test_cmac $(HOST_CC) $(TEST_CFLAGS) -lcrypto block.c aes.c ctr.c tests/test_ctr.c -o tests/test_ctr ./tests/test_ctr $(HOST_CC) $(TEST_CFLAGS) -lcrypto block.c aes.c ctr.c cmac.c eax.c tests/test_eax.c -o tests/test_eax ./tests/test_eax $(HOST_CC) $(TEST_CFLAGS) -lcrypto block.c aes.c cmac.c ckdf.c tests/test_ckdf.c -o tests/test_ckdf ./tests/test_ckdf