mirror of
https://github.com/micropython/micropython.git
synced 2026-01-05 11:40:18 +01:00
Some checks failed
JavaScript code lint and formatting with Biome / eslint (push) Has been cancelled
Check code formatting / code-formatting (push) Has been cancelled
Check spelling with codespell / codespell (push) Has been cancelled
Build docs / build (push) Has been cancelled
Check examples / embedding (push) Has been cancelled
Package mpremote / build (push) Has been cancelled
.mpy file format and tools / test (push) Has been cancelled
Build ports metadata / build (push) Has been cancelled
cc3200 port / build (push) Has been cancelled
esp32 port / build_idf (esp32_build_cmod_spiram_s2) (push) Has been cancelled
esp32 port / build_idf (esp32_build_s3_c3) (push) Has been cancelled
esp8266 port / build (push) Has been cancelled
mimxrt port / build (push) Has been cancelled
nrf port / build (push) Has been cancelled
powerpc port / build (push) Has been cancelled
qemu port / build_and_test_arm (push) Has been cancelled
qemu port / build_and_test_rv32 (push) Has been cancelled
renesas-ra port / build_renesas_ra_board (push) Has been cancelled
rp2 port / build (push) Has been cancelled
samd port / build (push) Has been cancelled
stm32 port / build_stm32 (stm32_misc_build) (push) Has been cancelled
stm32 port / build_stm32 (stm32_nucleo_build) (push) Has been cancelled
stm32 port / build_stm32 (stm32_pyb_build) (push) Has been cancelled
unix port / minimal (push) Has been cancelled
unix port / reproducible (push) Has been cancelled
unix port / standard (push) Has been cancelled
unix port / standard_v2 (push) Has been cancelled
unix port / coverage (push) Has been cancelled
unix port / coverage_32bit (push) Has been cancelled
unix port / nanbox (push) Has been cancelled
unix port / float (push) Has been cancelled
unix port / stackless_clang (push) Has been cancelled
unix port / float_clang (push) Has been cancelled
unix port / settrace (push) Has been cancelled
unix port / settrace_stackless (push) Has been cancelled
unix port / macos (push) Has been cancelled
unix port / qemu_mips (push) Has been cancelled
unix port / qemu_arm (push) Has been cancelled
unix port / qemu_riscv64 (push) Has been cancelled
webassembly port / build (push) Has been cancelled
windows port / build-vs (Debug, x64, windows-2022, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Debug, x64, windows-latest, dev, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Debug, x86, windows-2022, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Debug, x86, windows-latest, dev, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-2019, dev, 2019, [16, 17)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-2019, standard, 2019, [16, 17)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-2022, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-2022, standard, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-latest, dev, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-latest, standard, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-2019, dev, 2019, [16, 17)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-2019, standard, 2019, [16, 17)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-2022, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-2022, standard, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-latest, dev, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-latest, standard, 2017, [15, 16)) (push) Has been cancelled
windows port / build-mingw (i686, mingw32, dev) (push) Has been cancelled
windows port / build-mingw (i686, mingw32, standard) (push) Has been cancelled
windows port / build-mingw (x86_64, mingw64, dev) (push) Has been cancelled
windows port / build-mingw (x86_64, mingw64, standard) (push) Has been cancelled
windows port / cross-build-on-linux (push) Has been cancelled
zephyr port / build (push) Has been cancelled
Python code lint and formatting with ruff / ruff (push) Has been cancelled
This commit moves `<board>.mk` to `<board>/mpconfigboard.mk` for all qemu boards, making it the same as other bare-metal ports. Signed-off-by: Damien George <damien@micropython.org>
206 lines
5.8 KiB
Makefile
206 lines
5.8 KiB
Makefile
################################################################################
|
|
# Initial setup of Makefile environment
|
|
|
|
BOARD ?= MPS2_AN385
|
|
BOARD_DIR ?= boards/$(BOARD)
|
|
|
|
ifeq ($(wildcard $(BOARD_DIR)/.),)
|
|
$(error Invalid BOARD specified: $(BOARD_DIR))
|
|
endif
|
|
|
|
# Make the build directory reflect the board.
|
|
BUILD ?= build-$(BOARD)
|
|
|
|
include ../../py/mkenv.mk
|
|
-include mpconfigport.mk
|
|
|
|
# Include board specific .mk file.
|
|
include $(BOARD_DIR)/mpconfigboard.mk
|
|
|
|
# qstr definitions (must come before including py.mk)
|
|
QSTR_DEFS = qstrdefsport.h
|
|
|
|
# MicroPython feature configurations
|
|
MICROPY_ROM_TEXT_COMPRESSION ?= 1
|
|
|
|
ifeq ($(QEMU_ARCH),arm)
|
|
MICROPY_HEAP_SIZE ?= 143360
|
|
ifeq ($(BOARD),MICROBIT)
|
|
FROZEN_MANIFEST ?= "require('unittest'); freeze('test-frzmpy', ('frozen_const.py'))"
|
|
else
|
|
FROZEN_MANIFEST ?= "require('unittest'); freeze('test-frzmpy', ('frozen_asm_thumb.py', 'frozen_const.py', 'frozen_viper.py', 'native_frozen_align.py'))"
|
|
endif
|
|
endif
|
|
ifeq ($(QEMU_ARCH),riscv32)
|
|
MICROPY_HEAP_SIZE ?= 143360
|
|
FROZEN_MANIFEST ?= "require('unittest'); freeze('test-frzmpy', ('frozen_asm_rv32.py', 'frozen_const.py', 'frozen_viper.py', 'native_frozen_align.py'))"
|
|
endif
|
|
|
|
# include py core make definitions
|
|
include $(TOP)/py/py.mk
|
|
include $(TOP)/extmod/extmod.mk
|
|
|
|
CFLAGS += -DMICROPY_HEAP_SIZE=$(MICROPY_HEAP_SIZE)
|
|
|
|
################################################################################
|
|
# ARM specific settings
|
|
|
|
ifeq ($(QEMU_ARCH),arm)
|
|
|
|
CROSS_COMPILE ?= arm-none-eabi-
|
|
|
|
LDFLAGS += -nostdlib
|
|
LIBS = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
|
|
|
|
SRC_C += \
|
|
mcu/arm/errorhandler.c \
|
|
mcu/arm/startup.c \
|
|
shared/runtime/semihosting_arm.c \
|
|
|
|
endif
|
|
|
|
################################################################################
|
|
# RISC-V 32-bit specific settings
|
|
|
|
ifeq ($(QEMU_ARCH),riscv32)
|
|
|
|
CROSS_COMPILE ?= riscv64-unknown-elf-
|
|
|
|
GCC_VERSION = $(word 1, $(subst ., , $(shell $(CC) -dumpversion)))
|
|
|
|
RV32_ABI = ilp32
|
|
|
|
QEMU_ARGS += -bios none
|
|
|
|
# GCC 10 and lower do not recognise the Zicsr extension in the architecture name.
|
|
ifeq ($(shell test $(GCC_VERSION) -le 10; echo $$?),0)
|
|
RV32_ARCH ?= rv32imac
|
|
else
|
|
# Recent GCC versions explicitly require to declare extensions.
|
|
RV32_ARCH ?= rv32imac_zicsr
|
|
endif
|
|
|
|
AFLAGS += -mabi=$(RV32_ABI) -march=$(RV32_ARCH)
|
|
CFLAGS += $(AFLAGS)
|
|
LDFLAGS += -mabi=$(RV32_ABI) -march=$(RV32_ARCH) -Wl,-EL
|
|
|
|
SRC_C += \
|
|
mcu/rv32/interrupts.c \
|
|
mcu/rv32/startup.c \
|
|
|
|
SRC_BOARD_O += mcu/rv32/entrypoint.o
|
|
|
|
endif
|
|
|
|
################################################################################
|
|
# Project specific settings and compiler/linker flags
|
|
|
|
QEMU_SYSTEM = qemu-system-$(QEMU_ARCH)
|
|
QEMU_ARGS += -machine $(QEMU_MACHINE) -nographic -monitor null -semihosting
|
|
QEMU_ARGS += $(QEMU_EXTRA)
|
|
|
|
# Specifying QEMU_DEBUG=1 will block qemu until a debugger is connected.
|
|
ifeq ($(QEMU_DEBUG),1)
|
|
QEMU_DEBUG_ARGS ?= -s
|
|
QEMU_ARGS += -S $(QEMU_DEBUG_ARGS) $(QEMU_DEBUG_EXTRA)
|
|
endif
|
|
|
|
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)
|
|
|
|
LDFLAGS += -T $(LDSCRIPT) -Wl,--gc-sections -Wl,-Map=$(@:.elf=.map)
|
|
|
|
# Debugging/Optimization
|
|
ifeq ($(DEBUG), 1)
|
|
CFLAGS += -g
|
|
COPT = -O0
|
|
else
|
|
COPT += -Os -DNDEBUG
|
|
endif
|
|
|
|
# If Picolibc is available then select it explicitly. Ubuntu 22.04 ships its
|
|
# bare metal RISC-V toolchain with Picolibc rather than Newlib, and the default
|
|
# is "nosys" so a value must be provided. To avoid having per-distro
|
|
# workarounds, always select Picolibc if available.
|
|
PICOLIBC_SPECS = $(shell $(CC) --print-file-name=picolibc.specs)
|
|
ifeq ($(PICOLIBC_SPECS),picolibc.specs)
|
|
# Picolibc was not found.
|
|
else
|
|
$(info picolibc used $(PICOLIBC_SPECS))
|
|
SPECS_FRAGMENT = --specs=$(PICOLIBC_SPECS)
|
|
CFLAGS += $(SPECS_FRAGMENT)
|
|
LDFLAGS += $(SPECS_FRAGMENT)
|
|
endif
|
|
|
|
RUN_TESTS_FULL_ARGS = -t execpty:"$(QEMU_SYSTEM) $(QEMU_ARGS) -serial pty -kernel ../ports/qemu/$<" $(RUN_TESTS_ARGS)
|
|
|
|
################################################################################
|
|
# Source files and libraries
|
|
|
|
SRC_C += \
|
|
main.c \
|
|
uart.c \
|
|
mphalport.c \
|
|
shared/libc/string0.c \
|
|
shared/readline/readline.c \
|
|
shared/runtime/interrupt_char.c \
|
|
shared/runtime/pyexec.c \
|
|
shared/runtime/stdout_helpers.c \
|
|
shared/runtime/sys_stdio_mphal.c \
|
|
|
|
LIB_SRC_C += $(SRC_LIB_LIBM_C)
|
|
LIB_SRC_C += $(SRC_LIB_LIBM_SQRT_SW_C)
|
|
|
|
OBJ += $(PY_O)
|
|
OBJ += $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
|
|
OBJ += $(addprefix $(BUILD)/, $(SRC_BOARD_O))
|
|
OBJ += $(addprefix $(BUILD)/, $(LIB_SRC_C:.c=.o))
|
|
|
|
# List of sources for qstr extraction
|
|
SRC_QSTR += $(SRC_C) $(LIB_SRC_C)
|
|
|
|
################################################################################
|
|
# Main targets
|
|
|
|
all: $(BUILD)/firmware.elf
|
|
|
|
.PHONY: repl
|
|
repl: $(BUILD)/firmware.elf
|
|
$(ECHO) "Use machine.reset() to exit"
|
|
$(QEMU_SYSTEM) $(QEMU_ARGS) -serial mon:stdio -kernel $<
|
|
|
|
.PHONY: run
|
|
run: $(BUILD)/firmware.elf
|
|
$(QEMU_SYSTEM) $(QEMU_ARGS) -serial pty -kernel $<
|
|
|
|
.PHONY: test
|
|
test: $(BUILD)/firmware.elf
|
|
cd $(TOP)/tests && ./run-tests.py $(RUN_TESTS_FULL_ARGS) $(RUN_TESTS_EXTRA)
|
|
|
|
.PHONY: test_full
|
|
test_full: $(BUILD)/firmware.elf
|
|
cd $(TOP)/tests && ./run-tests.py $(RUN_TESTS_FULL_ARGS)
|
|
cd $(TOP)/tests && ./run-tests.py $(RUN_TESTS_FULL_ARGS) --via-mpy
|
|
cd $(TOP)/tests && ./run-tests.py $(RUN_TESTS_FULL_ARGS) --via-mpy --emit native
|
|
|
|
.PHONY: test_natmod
|
|
test_natmod: $(BUILD)/firmware.elf
|
|
$(eval DIRNAME=ports/$(notdir $(CURDIR)))
|
|
# "btree" cannot build against Picolibc right now.
|
|
cd $(TOP)/tests && ./run-natmodtests.py -p -d execpty:"$(QEMU_SYSTEM) $(QEMU_ARGS) -serial pty -kernel ../$(DIRNAME)/$<" $(RUN_NATMODTESTS_ARGS) extmod/{deflate,framebuf,heapq,random_basic,re}*.py
|
|
|
|
$(BUILD)/firmware.elf: $(LDSCRIPT) $(OBJ)
|
|
$(Q)$(CC) $(LDFLAGS) -o $@ $(OBJ) $(LIBS)
|
|
$(Q)$(SIZE) $@
|
|
|
|
################################################################################
|
|
# Remaining make rules
|
|
|
|
include $(TOP)/py/mkrules.mk
|