94 lines
2.3 KiB
Makefile
94 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 ../py/py.mk
|
||
|
|
||
|
ifeq ($(CROSS), 1)
|
||
|
CROSS_COMPILE = arm-none-eabi-
|
||
|
endif
|
||
|
|
||
|
BOSSAC := /Users/tannewt/ArduinoCore-samd/tools/bossac_osx
|
||
|
|
||
|
INC += -I.
|
||
|
INC += -I..
|
||
|
INC += -I../lib/mp-readline
|
||
|
INC += -I$(BUILD)
|
||
|
|
||
|
ifeq ($(CROSS), 1)
|
||
|
CFLAGS_CORTEX_M0 = -mthumb -mabi=aapcs-linux -mcpu=cortex-m0plus -fsingle-precision-constant -Wdouble-promotion -D__SAMD21G18A__
|
||
|
CFLAGS = $(INC) -Wall -Werror -ansi -std=gnu99 -nostdlib $(CFLAGS_CORTEX_M0) $(COPT)
|
||
|
else
|
||
|
CFLAGS = -m32 $(INC) -Wall -Werror -ansi -std=gnu99 $(COPT)
|
||
|
endif
|
||
|
|
||
|
#Debugging/Optimization
|
||
|
ifeq ($(DEBUG), 1)
|
||
|
CFLAGS += -O0 -ggdb
|
||
|
else
|
||
|
CFLAGS += -Os -DNDEBUG
|
||
|
endif
|
||
|
|
||
|
LIBS =
|
||
|
ifeq ($(CROSS), 1)
|
||
|
LIBGCC_FILE_NAME = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
|
||
|
LDFLAGS = -Lasf/thirdparty/CMSIS/Lib/GCC/ -L $(dir $(LIBGCC_FILE_NAME)) -nostdlib -T samd21.ld -Map=$@.map --cref
|
||
|
LIBS += -larm_cortexM0l_math -lgcc
|
||
|
else
|
||
|
LD = gcc
|
||
|
LDFLAGS = -m32 -Wl,-Map=$@.map,--cref
|
||
|
endif
|
||
|
|
||
|
SRC_C = \
|
||
|
main.c \
|
||
|
uart_core.c \
|
||
|
lib/utils/stdout_helpers.c \
|
||
|
lib/utils/printf.c \
|
||
|
lib/utils/pyexec.c \
|
||
|
lib/libc/string0.c \
|
||
|
lib/mp-readline/readline.c \
|
||
|
$(BUILD)/_frozen_mpy.c \
|
||
|
|
||
|
OBJ = $(PY_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
|
||
|
|
||
|
ifeq ($(CROSS), 1)
|
||
|
all: $(BUILD)/firmware.bin
|
||
|
else
|
||
|
all: $(BUILD)/firmware.elf
|
||
|
endif
|
||
|
|
||
|
$(BUILD)/_frozen_mpy.c: frozentest.mpy $(BUILD)/genhdr/qstrdefs.generated.h
|
||
|
$(ECHO) "MISC freezing bytecode"
|
||
|
$(Q)../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
|
||
|
$(ECHO) "Create $@"
|
||
|
$(Q)$(OBJCOPY) -O binary -j .isr_vector -j .text -j .data $^ $@
|
||
|
|
||
|
deploy: $(BUILD)/firmware.bin
|
||
|
$(ECHO) "Writing $< to the board"
|
||
|
$(BOSSAC) -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 ../py/mkrules.mk
|