2016-11-16 15:38:25 -05:00
|
|
|
# Select the board to build for: if not given on the command line,
|
|
|
|
# then default to pca10040.
|
|
|
|
BOARD ?= pca10040
|
|
|
|
ifeq ($(wildcard boards/$(BOARD)/.),)
|
|
|
|
$(error Invalid BOARD specified)
|
|
|
|
endif
|
|
|
|
|
|
|
|
# If SoftDevice is selected, try to use that one.
|
|
|
|
SD ?= none
|
|
|
|
SD_LOWER = $(shell echo $(SD) | tr '[:upper:]' '[:lower:]')
|
|
|
|
|
|
|
|
# TODO: Verify that it is a valid target.
|
|
|
|
|
|
|
|
|
|
|
|
ifeq ($(SD), none)
|
|
|
|
# If the build directory is not given, make it reflect the board name.
|
|
|
|
BUILD ?= build-$(BOARD)
|
|
|
|
include ../py/mkenv.mk
|
|
|
|
include boards/$(BOARD)/mpconfigboard.mk
|
|
|
|
else
|
|
|
|
# If the build directory is not given, make it reflect the board name.
|
|
|
|
BUILD ?= build-$(BOARD)-$(SD_LOWER)
|
|
|
|
include ../py/mkenv.mk
|
|
|
|
include boards/$(BOARD)/mpconfigboard_$(SD_LOWER).mk
|
|
|
|
endif
|
|
|
|
|
|
|
|
# qstr definitions (must come before including py.mk)
|
|
|
|
QSTR_DEFS = qstrdefsport.h
|
|
|
|
|
|
|
|
# include py core make definitions
|
|
|
|
include ../py/py.mk
|
|
|
|
|
|
|
|
CROSS_COMPILE = arm-none-eabi-
|
|
|
|
|
|
|
|
MCU_VARIANT_LOWER = $(shell echo $(MCU_VARIANT) | tr '[:upper:]' '[:lower:]')
|
|
|
|
|
|
|
|
INC = -I.
|
|
|
|
INC += -I..
|
|
|
|
INC += -I$(BUILD)
|
|
|
|
INC += -I./device
|
|
|
|
INC += -I./../lib/cmsis/inc
|
|
|
|
INC += -I./device
|
|
|
|
INC += -I./device/$(MCU_VARIANT_LOWER)
|
|
|
|
INC += -I./hal
|
|
|
|
INC += -I./hal/$(MCU_VARIANT_LOWER)
|
|
|
|
INC += -I./drivers
|
|
|
|
INC += -I../lib/mp-readline
|
|
|
|
|
|
|
|
NRF_DEFINES = -D$(MCU_VARIANT)
|
|
|
|
NRF_DEFINES += -DCONFIG_GPIO_AS_PINRESET
|
|
|
|
|
|
|
|
CFLAGS_CORTEX_M = -mthumb -mabi=aapcs -fsingle-precision-constant -Wdouble-promotion
|
|
|
|
|
|
|
|
CFLAGS_MCU_m4 = $(CFLAGS_CORTEX_M) -mtune=cortex-m4 -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
|
|
|
|
|
|
|
|
CFLAGS_MCU_m0 = $(CFLAGS_CORTEX_M) --short-enums -mtune=cortex-m0 -mcpu=cortex-m0 -mfloat-abi=soft -fno-builtin
|
|
|
|
|
|
|
|
CFLAGS = $(CFLAGS_MCU_$(MCU_SERIES))
|
|
|
|
CFLAGS += $(INC) -Wall -Werror -ansi -std=gnu99 -nostdlib $(COPT) $(NRF_DEFINES)
|
|
|
|
CFLAGS += -Iboards/$(BOARD)
|
|
|
|
|
|
|
|
LDFLAGS = $(CFLAGS)
|
|
|
|
LDFLAGS += -Xlinker -Map=$(@:.elf=.map)
|
|
|
|
LDFLAGS += -mthumb -mabi=aapcs -T $(LD_FILE)
|
|
|
|
|
|
|
|
#Debugging/Optimization
|
|
|
|
ifeq ($(DEBUG), 1)
|
|
|
|
CFLAGS += -O0 -ggdb
|
|
|
|
LDFLAGS += -O0
|
|
|
|
else
|
|
|
|
CFLAGS += -Os -DNDEBUG
|
|
|
|
LDFLAGS += -Os
|
|
|
|
endif
|
|
|
|
|
|
|
|
LIBS =
|
|
|
|
|
|
|
|
SRC_LIB = $(addprefix lib/,\
|
|
|
|
libc/string0.c \
|
|
|
|
mp-readline/readline.c \
|
|
|
|
utils/pyexec.c \
|
|
|
|
utils/pyhelp.c \
|
|
|
|
)
|
|
|
|
|
2016-11-16 17:39:40 -05:00
|
|
|
SRC_C += \
|
2016-11-16 15:38:25 -05:00
|
|
|
main.c \
|
|
|
|
device/$(MCU_VARIANT_LOWER)/system_$(MCU_VARIANT_LOWER).c \
|
|
|
|
modpyb.c \
|
|
|
|
led.c \
|
|
|
|
mphalport.c \
|
|
|
|
uart.c \
|
|
|
|
help.c \
|
|
|
|
gccollect.c \
|
|
|
|
|
|
|
|
SRC_S = \
|
|
|
|
device/$(MCU_VARIANT_LOWER)/startup_$(MCU_VARIANT_LOWER).s \
|
|
|
|
|
|
|
|
OBJ = $(PY_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o) $(SRC_S:.s=.o))
|
|
|
|
OBJ += $(addprefix $(BUILD)/, $(SRC_LIB:.c=.o))
|
|
|
|
|
|
|
|
|
|
|
|
.phony: all flash
|
|
|
|
|
|
|
|
all: $(BUILD)/firmware.elf binary hex
|
|
|
|
|
|
|
|
flash: $(BUILD)/firmware.elf
|
|
|
|
nrfjprog --program $(BUILD)/firmware.hex --sectorerase -f $(MCU_VARIANT_LOWER)
|
|
|
|
nrfjprog --pinreset -f $(MCU_VARIANT_LOWER)
|
|
|
|
|
|
|
|
$(BUILD)/firmware.elf: $(OBJ)
|
|
|
|
$(ECHO) "LINK $@"
|
|
|
|
$(Q)$(CC) $(LDFLAGS) -o $@ $(OBJ) $(LIBS)
|
|
|
|
$(Q)$(SIZE) $@
|
|
|
|
|
|
|
|
SRC_QSTR += $(SRC_C) $(SRC_MOD) $(SRC_LIB)
|
|
|
|
|
|
|
|
include ../py/mkrules.mk
|
|
|
|
include mkrules.mk
|