Commit dc9ecd58 authored by Damien George's avatar Damien George

qemu-arm: Factor board config to mk fragments.

Signed-off-by: default avatarDamien George <damien@micropython.org>
parent 9396572e
BOARD ?= mps2-an385
BOARD ?= MPS2_AN385
# Make the build directory reflect the board.
BUILD ?= build-$(BOARD)
......@@ -6,6 +6,9 @@ BUILD ?= build-$(BOARD)
include ../../py/mkenv.mk
-include mpconfigport.mk
# Include board specific .mk file.
include boards/$(BOARD).mk
# qstr definitions (must come before including py.mk)
QSTR_DEFS = qstrdefsport.h
......@@ -17,58 +20,16 @@ FROZEN_MANIFEST ?= "freeze('test-frzmpy')"
include $(TOP)/py/py.mk
include $(TOP)/extmod/extmod.mk
CFLAGS += -DMICROPY_HW_BOARD_NAME='"$(BOARD)"'
QEMU_ARGS += -machine $(BOARD) -nographic -monitor null -semihosting
ifeq ($(BOARD),netduino2)
CFLAGS += -mthumb -mcpu=cortex-m3 -mfloat-abi=soft
CFLAGS += -DQEMU_SOC_STM32
CFLAGS += -DMICROPY_HW_MCU_NAME='"STM32"'
LDSCRIPT = stm32.ld
SRC_BOARD_O = shared/runtime/gchelper_native.o shared/runtime/gchelper_thumb2.o
MPY_CROSS_FLAGS += -march=armv7m
endif
ifeq ($(BOARD),microbit)
CFLAGS += -mthumb -mcpu=cortex-m0 -mfloat-abi=soft
CFLAGS += -DQEMU_SOC_NRF51
CFLAGS += -DMICROPY_HW_MCU_NAME='"nRF51"'
LDSCRIPT = nrf51.ld
QEMU_ARGS += -global nrf51-soc.flash-size=1048576 -global nrf51-soc.sram-size=262144
SRC_BOARD_O = shared/runtime/gchelper_native.o shared/runtime/gchelper_thumb1.o
MPY_CROSS_FLAGS += -march=armv7m
endif
ifeq ($(BOARD),mps2-an385)
CFLAGS += -mthumb -mcpu=cortex-m3 -mfloat-abi=soft
CFLAGS += -DQEMU_SOC_MPS2
CFLAGS += -DMICROPY_HW_MCU_NAME='"Cortex-M3"'
LDSCRIPT = mps2.ld
SRC_BOARD_O = shared/runtime/gchelper_native.o shared/runtime/gchelper_thumb2.o
MPY_CROSS_FLAGS += -march=armv7m
endif
ifeq ($(BOARD),sabrelite)
CFLAGS += -mcpu=cortex-a9
CFLAGS += -DQEMU_SOC_IMX6
CFLAGS += -DMICROPY_HW_MCU_NAME='"Cortex-A9"'
LDSCRIPT = imx6.ld
QEMU_ARGS += -m 128M
SRC_BOARD_O = shared/runtime/gchelper_generic.o
# It's really armv7a but closest supported value is armv6.
MPY_CROSS_FLAGS += -march=armv6
# Cortex-A9 should support unaligned-access, but qemu doesn't seem to.
CFLAGS += -mno-unaligned-access
# These don't work on Cortex-A9.
TESTS_EXCLUDE = --exclude '(asmdiv|asmspecialregs).py'
endif
CROSS_COMPILE ?= arm-none-eabi-
QEMU_SYSTEM = qemu-system-$(QEMU_ARCH)
QEMU_ARGS += -machine $(QEMU_MACHINE) -nographic -monitor null -semihosting
INC += -I.
INC += -I$(TOP)
INC += -I$(BUILD)
CFLAGS += -DMICROPY_HW_BOARD_NAME='"$(QEMU_MACHINE)"'
CFLAGS += $(INC) -Wall -Wpointer-arith -Wdouble-promotion -Wfloat-conversion -Werror -std=gnu99 $(COPT) \
-ffunction-sections -fdata-sections
CFLAGS += $(CFLAGS_EXTRA)
......@@ -135,16 +96,16 @@ all: $(BUILD)/firmware.elf
.PHONY: repl
repl: $(BUILD)/firmware.elf
$(ECHO) "Use machine.reset() to exit"
qemu-system-arm $(QEMU_ARGS) -serial mon:stdio -kernel $<
$(QEMU_SYSTEM) $(QEMU_ARGS) -serial mon:stdio -kernel $<
.PHONY: run
run: $(BUILD)/firmware.elf
qemu-system-arm $(QEMU_ARGS) -serial pty -kernel $<
$(QEMU_SYSTEM) $(QEMU_ARGS) -serial pty -kernel $<
.PHONY: test
test: $(BUILD)/firmware.elf
$(eval DIRNAME=ports/$(notdir $(CURDIR)))
cd $(TOP)/tests && ./run-tests.py --target qemu-arm --device execpty:"qemu-system-arm $(QEMU_ARGS) -serial pty -kernel ../$(DIRNAME)/$<" $(TESTS_EXCLUDE)
cd $(TOP)/tests && ./run-tests.py --target qemu-arm --device execpty:"$(QEMU_SYSTEM) $(QEMU_ARGS) -serial pty -kernel ../$(DIRNAME)/$<" $(RUN_TESTS_ARGS) $(RUN_TESTS_EXTRA)
## `$(LD)` doesn't seem to like `--specs` for some reason, but we can just use `$(CC)` here.
$(BUILD)/firmware.elf: $(LDSCRIPT) $(ALL_OBJ_RUN)
......
......@@ -32,7 +32,16 @@ Then build using:
The default qemu-supported board is `mps2-an385`, a Cortex-M3 board. To select a
different board pass the `BOARD` argument to `make`, for example:
$ make BOARD=sabrelite
$ make BOARD=SABRELITE
Available boards are:
| Name for `BOARD=` | Corresponding qemu board |
| ----------------- | ------------------------ |
| `MICROBIT` | `microbit` |
| `MPS2_AN385` | `mps2-an385` |
| `NETDUINO2` | `netduino2` |
| `SABRELITE` | `sabrelite` |
Running
-------
......@@ -67,3 +76,11 @@ tests against the serial device, for example:
$ cd ../../tests
$ ./run-tests.py --target qemu-arm --device /dev/pts/1
Extra make options
------------------
The following options can be specified on the `make` command line:
- `CFLAGS_EXTRA`: pass in extra flags for the compiler.
- `RUN_TESTS_EXTRA`: pass in extra flags for `run-tests.py` when invoked via
`make test`.
QEMU_ARCH = arm
QEMU_MACHINE = microbit
QEMU_ARGS += -global nrf51-soc.flash-size=1048576 -global nrf51-soc.sram-size=262144
CFLAGS += -mthumb -mcpu=cortex-m0 -mfloat-abi=soft
CFLAGS += -DQEMU_SOC_NRF51
CFLAGS += -DMICROPY_HW_MCU_NAME='"nRF51"'
LDSCRIPT = nrf51.ld
SRC_BOARD_O = shared/runtime/gchelper_native.o shared/runtime/gchelper_thumb1.o
MPY_CROSS_FLAGS += -march=armv7m
QEMU_ARCH = arm
QEMU_MACHINE = mps2-an385
CFLAGS += -mthumb -mcpu=cortex-m3 -mfloat-abi=soft
CFLAGS += -DQEMU_SOC_MPS2
CFLAGS += -DMICROPY_HW_MCU_NAME='"Cortex-M3"'
LDSCRIPT = mps2.ld
SRC_BOARD_O = shared/runtime/gchelper_native.o shared/runtime/gchelper_thumb2.o
MPY_CROSS_FLAGS += -march=armv7m
QEMU_ARCH = arm
QEMU_MACHINE = netduino2
CFLAGS += -mthumb -mcpu=cortex-m3 -mfloat-abi=soft
CFLAGS += -DQEMU_SOC_STM32
CFLAGS += -DMICROPY_HW_MCU_NAME='"STM32"'
LDSCRIPT = stm32.ld
SRC_BOARD_O = shared/runtime/gchelper_native.o shared/runtime/gchelper_thumb2.o
MPY_CROSS_FLAGS += -march=armv7m
QEMU_ARCH = arm
QEMU_MACHINE = sabrelite
QEMU_ARGS += -m 128M
CFLAGS += -mcpu=cortex-a9
CFLAGS += -DQEMU_SOC_IMX6
CFLAGS += -DMICROPY_HW_MCU_NAME='"Cortex-A9"'
# Cortex-A9 should support unaligned-access, but qemu doesn't seem to.
CFLAGS += -mno-unaligned-access
LDSCRIPT = imx6.ld
SRC_BOARD_O = shared/runtime/gchelper_generic.o
# It's really armv7a but closest supported value is armv6.
MPY_CROSS_FLAGS += -march=armv6
# These tests don't work on Cortex-A9, so exclude them.
RUN_TESTS_ARGS = --exclude '(asmdiv|asmspecialregs).py'
......@@ -259,7 +259,7 @@ function ci_qemu_arm_build {
make ${MAKEOPTS} -C ports/qemu-arm CFLAGS_EXTRA=-DMP_ENDIANNESS_BIG=1
make ${MAKEOPTS} -C ports/qemu-arm clean
make ${MAKEOPTS} -C ports/qemu-arm test
make ${MAKEOPTS} -C ports/qemu-arm BOARD=sabrelite test
make ${MAKEOPTS} -C ports/qemu-arm BOARD=SABRELITE test
}
########################################################################################
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment