1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-22 15:38:11 +00:00
trezor-firmware/Makefile.include

224 lines
5.0 KiB
Makefile
Raw Normal View History

TOP_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
2015-12-15 22:01:54 +00:00
TOOLCHAIN_DIR ?= $(TOP_DIR)vendor/libopencm3
ifneq ($(V),1)
Q := @
endif
2017-12-18 21:48:52 +00:00
PYTHON ?= python
2017-12-13 18:38:51 +00:00
ifeq ($(EMULATOR),1)
CC ?= gcc
LD := $(CC)
OBJCOPY := objcopy
OBJDUMP := objdump
AR := ar
AS := as
2017-12-13 18:38:51 +00:00
OPTFLAGS ?= -O3
DBGFLAGS ?= -g3 -ggdb3
CPUFLAGS ?=
FPUFLAGS ?=
2017-12-13 18:38:51 +00:00
else
PREFIX ?= arm-none-eabi-
CC := $(PREFIX)gcc
LD := $(PREFIX)gcc
OBJCOPY := $(PREFIX)objcopy
OBJDUMP := $(PREFIX)objdump
AR := $(PREFIX)ar
AS := $(PREFIX)as
OPENOCD := openocd -f interface/stlink-v2.cfg -c "transport select hla_swd" -f target/stm32f2x.cfg
2019-01-27 13:28:21 +00:00
GDB := $(PREFIX)gdb --nx -ex 'set remotetimeout unlimited' -ex 'set confirm off' -ex 'target remote 127.0.0.1:3333' -ex 'monitor reset halt'
2014-04-29 12:26:51 +00:00
OPTFLAGS ?= -O3
DBGFLAGS ?= -g -DNDEBUG
CPUFLAGS ?= -mcpu=cortex-m3 -mthumb
FPUFLAGS ?= -msoft-float
2017-12-13 18:38:51 +00:00
endif
2014-04-29 12:26:51 +00:00
CFLAGS += $(OPTFLAGS) \
$(DBGFLAGS) \
-std=gnu11 \
2014-04-29 12:26:51 +00:00
-W \
-Wall \
-Wextra \
-Wimplicit-function-declaration \
-Wredundant-decls \
-Wstrict-prototypes \
-Wundef \
-Wshadow \
-Wpointer-arith \
-Wformat \
-Wreturn-type \
-Wsign-compare \
-Wmultichar \
-Wformat-nonliteral \
-Winit-self \
-Wuninitialized \
-Wformat-security \
-Werror \
-fno-common \
-fno-exceptions \
-fvisibility=internal \
2014-06-19 00:16:28 +00:00
-ffunction-sections \
-fdata-sections \
2014-07-30 18:34:28 +00:00
-fstack-protector-all \
$(CPUFLAGS) \
$(FPUFLAGS) \
2014-04-29 12:26:51 +00:00
-DSTM32F2 \
-DCONFIDENTIAL='__attribute__((section("confidential")))' \
-DRAND_PLATFORM_INDEPENDENT=1 \
2014-04-29 12:26:51 +00:00
-I$(TOOLCHAIN_DIR)/include \
-I$(TOP_DIR) \
2015-12-14 23:20:34 +00:00
-I$(TOP_DIR)gen \
2015-12-15 22:01:54 +00:00
-I$(TOP_DIR)vendor/trezor-crypto \
-I$(TOP_DIR)vendor/trezor-qrenc
2014-04-29 12:26:51 +00:00
LDFLAGS += -L$(TOP_DIR) \
$(DBGFLAGS) \
$(CPUFLAGS) \
$(FPUFLAGS)
2017-12-13 18:38:51 +00:00
ifeq ($(EMULATOR),1)
CFLAGS += -DEMULATOR=1
2018-02-18 17:44:36 +00:00
CFLAGS += -include $(TOP_DIR)emulator/emulator.h
CFLAGS += -include stdio.h
LDFLAGS += -L$(TOP_DIR)emulator
LDLIBS += -ltrezor -lemulator
LIBDEPS += $(TOP_DIR)/libtrezor.a $(TOP_DIR)emulator/libemulator.a
2017-12-13 18:38:51 +00:00
ifeq ($(HEADLESS),1)
CFLAGS += -DHEADLESS=1
else
CFLAGS += -DHEADLESS=0
CFLAGS += $(shell pkg-config --cflags sdl2)
LDLIBS += $(shell pkg-config --libs sdl2)
2017-12-13 18:38:51 +00:00
endif
ifdef RANDOM_DEV_FILE
CFLAGS += -DRANDOM_DEV_FILE=\"$(RANDOM_DEV_FILE)\"
endif
2017-12-13 18:38:51 +00:00
else
2014-04-29 12:26:51 +00:00
ifdef APPVER
CFLAGS += -DAPPVER=$(APPVER)
LDSCRIPT = $(TOP_DIR)/memory_app_$(APPVER).ld
else
LDSCRIPT = $(TOP_DIR)/memory.ld
endif
2017-12-13 18:38:51 +00:00
CFLAGS += -DEMULATOR=0
2014-04-29 12:26:51 +00:00
LDFLAGS += --static \
-Wl,--start-group \
-lc \
-lgcc \
-lnosys \
-Wl,--end-group \
-L$(TOOLCHAIN_DIR)/lib \
-T$(LDSCRIPT) \
-nostartfiles \
-Wl,--gc-sections
2014-04-29 12:26:51 +00:00
2017-12-11 19:42:51 +00:00
LDLIBS += -ltrezor
LIBDEPS += $(TOP_DIR)/libtrezor.a
LDLIBS += -lopencm3_stm32f2
LIBDEPS += $(TOOLCHAIN_DIR)/lib/libopencm3_stm32f2.a
2017-12-13 18:38:51 +00:00
endif
ifeq ($(MEMORY_PROTECT), 0)
CFLAGS += -DMEMORY_PROTECT=0
else
CFLAGS += -DMEMORY_PROTECT=1
endif
ifeq ($(DEBUG_RNG), 1)
CFLAGS += -DDEBUG_RNG=1
else
CFLAGS += -DDEBUG_RNG=0
endif
2017-12-11 19:42:51 +00:00
2014-04-29 12:26:51 +00:00
all: $(NAME).bin
2019-01-27 13:28:21 +00:00
openocd:
$(OPENOCD)
gdb_bootloader: bootloader/bootloader.elf
$(GDB) $<
gdb_firmware: firmware/trezor.elf
$(GDB) $<
2014-04-29 12:26:51 +00:00
flash: $(NAME).bin
$(OPENOCD) -c "init; reset halt; flash write_image erase $(NAME).bin 0x8000000; exit"
2014-04-29 12:26:51 +00:00
upload: sign
2017-01-10 13:58:28 +00:00
trezorctl firmware_update -f $(NAME).bin
2014-04-29 12:26:51 +00:00
sign: $(NAME).bin
$(PYTHON) ../bootloader/firmware_sign.py -f $(NAME).bin
2014-04-29 12:26:51 +00:00
release: $(NAME).bin
$(PYTHON) ../bootloader/firmware_sign.py -f $(NAME).bin
2014-04-29 12:26:51 +00:00
cp $(NAME).bin $(NAME)-$(APPVER).bin
chmod -x $(NAME)-$(APPVER).bin
xxd -p $(NAME)-$(APPVER).bin | tr -d '\n' > $(NAME)-$(APPVER).bin.hex
$(NAME).bin: $(NAME).elf
@printf " OBJCOPY $@\n"
$(Q)$(OBJCOPY) -Obinary $(NAME).elf $(NAME).bin
2014-04-29 12:26:51 +00:00
$(NAME).hex: $(NAME).elf
@printf " OBJCOPY $@\n"
$(Q)$(OBJCOPY) -Oihex $(NAME).elf $(NAME).hex
2014-04-29 12:26:51 +00:00
$(NAME).srec: $(NAME).elf
@printf " OBJCOPY $@\n"
$(Q)$(OBJCOPY) -Osrec $(NAME).elf $(NAME).srec
2014-04-29 12:26:51 +00:00
$(NAME).list: $(NAME).elf
@printf " OBJDUMP $@\n"
$(Q)$(OBJDUMP) -S $(NAME).elf > $(NAME).list
2014-04-29 12:26:51 +00:00
2017-12-11 19:42:51 +00:00
$(NAME).elf: $(OBJS) $(LDSCRIPT) $(LIBDEPS)
@printf " LD $@\n"
$(Q)$(LD) -o $(NAME).elf $(OBJS) $(LDLIBS) $(LDFLAGS)
2014-04-29 12:26:51 +00:00
%.o: %.s Makefile
@printf " AS $@\n"
$(Q)$(AS) $(CPUFLAGS) -o $@ $<
2014-04-29 12:26:51 +00:00
%.o: %.c Makefile
@printf " CC $@\n"
$(Q)$(CC) $(CFLAGS) -MMD -MP -o $@ -c $<
2014-04-29 12:26:51 +00:00
%.small.o: %.c Makefile
@printf " CC $@\n"
$(Q)$(CC) $(CFLAGS) -MMD -MP -o $@ -c $<
%.d: %.c Makefile
@printf " DEP $@\n"
$(Q)$(CC) $(CFLAGS) -MM -MP -MG -o $@ $<
%.small.d: %.c Makefile
@printf " DEP $@\n"
$(Q)$(CC) $(CFLAGS) -MM -MP -MG -o $@ $<
2014-04-29 12:26:51 +00:00
clean::
2014-04-29 12:26:51 +00:00
rm -f $(OBJS)
rm -f *.a
rm -f *.bin
2014-04-29 12:26:51 +00:00
rm -f *.d
rm -f *.elf
rm -f *.hex
rm -f *.list
2014-07-01 18:29:44 +00:00
rm -f *.log
rm -f *.srec
-include $(OBJS:.o=.d)