999733b1fb
When compiled with hard float the system should enable FP access when it
starts or else FP instructions lead to a fault. But this minimal port does
not enable (or use) FP and so, to keep it minimal, switch to use soft
floating point. (This became an issue due to the recent commit
34c04d2319
which saves/restores FP registers
in the NLR state.)
92 lines
2.3 KiB
Makefile
92 lines
2.3 KiB
Makefile
include ../../py/mkenv.mk
|
|
|
|
CROSS = 0
|
|
|
|
# qstr definitions (must come before including py.mk)
|
|
QSTR_DEFS = qstrdefsport.h
|
|
|
|
# include py core make definitions
|
|
include $(TOP)/py/py.mk
|
|
|
|
ifeq ($(CROSS), 1)
|
|
CROSS_COMPILE = arm-none-eabi-
|
|
endif
|
|
|
|
INC += -I.
|
|
INC += -I$(TOP)
|
|
INC += -I$(BUILD)
|
|
|
|
ifeq ($(CROSS), 1)
|
|
DFU = $(TOP)/tools/dfu.py
|
|
PYDFU = $(TOP)/tools/pydfu.py
|
|
CFLAGS_CORTEX_M4 = -mthumb -mtune=cortex-m4 -mcpu=cortex-m4 -msoft-float -fsingle-precision-constant -Wdouble-promotion
|
|
CFLAGS = $(INC) -Wall -Werror -std=c99 -nostdlib $(CFLAGS_CORTEX_M4) $(COPT)
|
|
LDFLAGS = -nostdlib -T stm32f405.ld -Map=$@.map --cref --gc-sections
|
|
else
|
|
LD = gcc
|
|
CFLAGS = -m32 $(INC) -Wall -Werror -std=c99 $(COPT)
|
|
LDFLAGS = -m32 -Wl,-Map=$@.map,--cref -Wl,--gc-sections
|
|
endif
|
|
|
|
# Tune for Debugging or Optimization
|
|
ifeq ($(DEBUG), 1)
|
|
CFLAGS += -O0 -ggdb
|
|
else
|
|
CFLAGS += -Os -DNDEBUG
|
|
CFLAGS += -fdata-sections -ffunction-sections
|
|
endif
|
|
|
|
LIBS =
|
|
|
|
SRC_C = \
|
|
main.c \
|
|
uart_core.c \
|
|
lib/utils/printf.c \
|
|
lib/utils/stdout_helpers.c \
|
|
lib/utils/pyexec.c \
|
|
lib/libc/string0.c \
|
|
lib/mp-readline/readline.c \
|
|
$(BUILD)/_frozen_mpy.c \
|
|
|
|
OBJ = $(PY_CORE_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
|
|
|
|
ifeq ($(CROSS), 1)
|
|
all: $(BUILD)/firmware.dfu
|
|
else
|
|
all: $(BUILD)/firmware.elf
|
|
endif
|
|
|
|
$(BUILD)/_frozen_mpy.c: frozentest.mpy $(BUILD)/genhdr/qstrdefs.generated.h
|
|
$(ECHO) "MISC freezing bytecode"
|
|
$(Q)$(TOP)/tools/mpy-tool.py -f -q $(BUILD)/genhdr/qstrdefs.preprocessed.h -mlongint-impl=none $< > $@
|
|
|
|
$(BUILD)/firmware.elf: $(OBJ)
|
|
$(ECHO) "LINK $@"
|
|
$(Q)$(LD) $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
$(Q)$(SIZE) $@
|
|
|
|
$(BUILD)/firmware.bin: $(BUILD)/firmware.elf
|
|
$(Q)$(OBJCOPY) -O binary -j .isr_vector -j .text -j .data $^ $(BUILD)/firmware.bin
|
|
|
|
$(BUILD)/firmware.dfu: $(BUILD)/firmware.bin
|
|
$(ECHO) "Create $@"
|
|
$(Q)$(PYTHON) $(DFU) -b 0x08000000:$(BUILD)/firmware.bin $@
|
|
|
|
deploy: $(BUILD)/firmware.dfu
|
|
$(ECHO) "Writing $< to the board"
|
|
$(Q)$(PYTHON) $(PYDFU) -u $<
|
|
|
|
# Run emulation build on a POSIX system with suitable terminal settings
|
|
run:
|
|
stty raw opost -echo
|
|
build/firmware.elf
|
|
@echo Resetting terminal...
|
|
# This sleep is useful to spot segfaults
|
|
sleep 1
|
|
reset
|
|
|
|
test: $(BUILD)/firmware.elf
|
|
$(Q)/bin/echo -e "print('hello world!', list(x+1 for x in range(10)), end='eol\\\\n')\\r\\n\\x04" | $(BUILD)/firmware.elf | tail -n2 | grep "^hello world! \\[1, 2, 3, 4, 5, 6, 7, 8, 9, 10\\]eol"
|
|
|
|
include $(TOP)/py/mkrules.mk
|