mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-15 17:02:53 +08:00
271 lines
10 KiB
Makefile
271 lines
10 KiB
Makefile
# DECLARATIONS
|
|
|
|
# Directory where QEMU_STM32 ARM executable is located - used for running
|
|
# program in emulator.
|
|
QEMU_ARM_DIR ?=
|
|
|
|
# OpenOCD interface file used for programming/debugging the micronctroller
|
|
OPENOCD_INTERFACE ?= interface/olimex-arm-usb-tiny-h.cfg
|
|
|
|
# Declare command line tools - assume these are in the path
|
|
CC = arm-none-eabi-gcc
|
|
LD = arm-none-eabi-ld
|
|
AS = arm-none-eabi-as
|
|
CP = arm-none-eabi-objcopy
|
|
OD = arm-none-eabi-objdump
|
|
|
|
# Declare command line flags
|
|
CORE_CFLAGS = -I./ -I$(CORE_SRC) -I$(DEVICE_SRC) -I$(STD_PERIPH)/inc -Idemos/common -fno-common -O0 -g -mcpu=cortex-m3 -mthumb
|
|
CFLAGS = $(CORE_CFLAGS) -c
|
|
CFLAGS_LINK = -Wl,-Tdemos/main.ld -nostartfiles $(CORE_CFLAGS)
|
|
ASFLAGS = -mcpu=cortex-m3 -mthumb -g
|
|
LDFLAGS = -Tdemos/main.ld
|
|
CPFLAGS = -Obinary
|
|
ODFLAGS = -S
|
|
|
|
# Declare library source paths
|
|
SRC = $(realpath .)
|
|
CORE_SRC = $(SRC)/libraries/CMSIS/CM3/CoreSupport
|
|
DEVICE_SRC = $(SRC)/libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x
|
|
STD_PERIPH = $(SRC)/libraries/STM32F10x_StdPeriph_Driver
|
|
STD_PERIPH_SRC = $(STD_PERIPH)/src
|
|
|
|
# List common and system library source files
|
|
# (i.e. for accessing STM32/Cortex M3 hardware)
|
|
COMMON_FILES = $(CORE_SRC)/core_cm3.c
|
|
COMMON_FILES += $(DEVICE_SRC)/system_stm32f10x.c
|
|
COMMON_FILES += $(DEVICE_SRC)/startup/gcc_ride7/startup_stm32f10x_md.s
|
|
COMMON_FILES += demos/common/stm32_p103.c
|
|
COMMON_FILES += demos/common/myprintk.c
|
|
COMMON_FILES += $(STD_PERIPH_SRC)/stm32f10x_rcc.c
|
|
COMMON_FILES += $(STD_PERIPH_SRC)/stm32f10x_gpio.c
|
|
COMMON_FILES += $(STD_PERIPH_SRC)/stm32f10x_usart.c
|
|
COMMON_FILES += $(STD_PERIPH_SRC)/stm32f10x_exti.c
|
|
COMMON_FILES += $(STD_PERIPH_SRC)/stm32f10x_adc.c
|
|
COMMON_FILES += $(STD_PERIPH_SRC)/stm32f10x_tim.c
|
|
COMMON_FILES += $(STD_PERIPH_SRC)/stm32f10x_rtc.c
|
|
COMMON_FILES += $(STD_PERIPH_SRC)/stm32f10x_dac.c
|
|
COMMON_FILES += $(STD_PERIPH_SRC)/misc.c
|
|
|
|
# List all demos
|
|
DEMOS = printf_demo
|
|
DEMOS += systick
|
|
|
|
# List all demo folders
|
|
DEMO_FOLDERS = $(addprefix demos/,$(DEMOS))
|
|
|
|
# List FreeRTOS resources
|
|
FREE_RTOS_SRC = $(SRC)/libraries/FreeRTOS
|
|
FREE_RTOS_SRC_FILES = $(FREE_RTOS_SRC)/croutine.c $(FREE_RTOS_SRC)/list.c $(FREE_RTOS_SRC)/queue.c $(FREE_RTOS_SRC)/tasks.c $(FREE_RTOS_SRC)/croutine.c $(FREE_RTOS_SRC)/stream_buffer.c $(FREE_RTOS_SRC)/portable/GCC/ARM_CM3/port.c
|
|
FREE_RTOS_INC = $(FREE_RTOS_SRC)/include/
|
|
FREE_RTOS_PORT_INC = $(FREE_RTOS_SRC)/portable/GCC/ARM_CM3/
|
|
|
|
# List path to demo build output files
|
|
OUTPUT_FILES = $(addsuffix /main,$(DEMO_FOLDERS))
|
|
ELF_FILES = $(addsuffix .elf,$(OUTPUT_FILES))
|
|
LIST_FILES = $(addsuffix .list,$(OUTPUT_FILES))
|
|
BIN_FILES = $(addsuffix .bin,$(OUTPUT_FILES))
|
|
|
|
# Declare target names for each demo
|
|
ALL_TARGETS = $(addsuffix _ALL,$(DEMOS))
|
|
PROG_TARGETS = $(addsuffix _PROG,$(DEMOS))
|
|
|
|
QEMU_RUN_TARGETS = $(addsuffix _QEMURUN,$(DEMOS))
|
|
QEMU_RUN_PTY_TARGETS = $(addsuffix _QEMURUN_PTY,$(DEMOS))
|
|
QEMU_RUN_TEL_TARGETS = $(addsuffix _QEMURUN_TEL,$(DEMOS))
|
|
QEMU_DBG_TARGETS = $(addsuffix _QEMUDBG,$(DEMOS))
|
|
QEMU_DBG_PTY_TARGETS = $(addsuffix _QEMUDBG_PTY,$(DEMOS))
|
|
QEMU_DBG_TEL_TARGETS = $(addsuffix _QEMUDBG_TEL,$(DEMOS))
|
|
|
|
|
|
|
|
# TARGETS - See README for descriptions of the targets
|
|
|
|
# Generic targets
|
|
.PHONY: clean $(ALL_TARGETS) $(PROG_TARGETS) openocd_dbg
|
|
|
|
all: $(ALL_TARGETS)
|
|
|
|
clean:
|
|
find . -type f -name "*.o" -exec rm {} \;
|
|
find . -type f -name "*.elf" -exec rm {} \;
|
|
find . -type f -name "*.bin" -exec rm {} \;
|
|
find . -type f -name "*.list" -exec rm {} \;
|
|
|
|
# Compile targets (builds all output files)
|
|
$(ALL_TARGETS): %_ALL : demos/%/main.elf demos/%/main.bin demos/%/main.list
|
|
|
|
# Targets to program a microntroller using OpenOCD
|
|
$(PROG_TARGETS): %_PROG : %_ALL
|
|
-killall -q openocd
|
|
openocd -f $(OPENOCD_INTERFACE) -f openocd/openocd_stm32_p103.cfg -c "program_flash demos/$*/main.bin"
|
|
|
|
# Target to launch OpenOCD - by default, OpenOCD creates a GDB server at port 3333.
|
|
DBG:
|
|
-killall -q openocd
|
|
openocd -f $(OPENOCD_INTERFACE) -f openocd/openocd_stm32_p103.cfg -c "init_stm32"
|
|
|
|
# QEMU run targets
|
|
$(QEMU_RUN_TARGETS): %_QEMURUN : %_ALL
|
|
-killall -q qemu-system-arm
|
|
$(QEMU_ARM_DIR)qemu-system-arm -M stm32-p103 -kernel demos/$*/main.bin
|
|
|
|
$(QEMU_RUN_PTY_TARGETS): %_QEMURUN_PTY : %_ALL
|
|
-killall -q qemu-system-arm
|
|
$(QEMU_ARM_DIR)qemu-system-arm -M stm32-p103 -kernel demos/$*/main.bin -serial pty
|
|
|
|
$(QEMU_RUN_TEL_TARGETS): %_QEMURUN_TEL : %_ALL
|
|
-killall -q qemu-system-arm
|
|
$(QEMU_ARM_DIR)qemu-system-arm -M stm32-p103 -kernel demos/$*/main.bin -serial tcp::7777,server
|
|
|
|
# QEMU debug targets
|
|
$(QEMU_DBG_TARGETS): %_QEMUDBG : %_ALL
|
|
-killall -q qemu-system-arm
|
|
$(QEMU_ARM_DIR)qemu-system-arm -M stm32-p103 -gdb tcp::3333 -S -kernel demos/$*/main.bin
|
|
|
|
$(QEMU_DBG_PTY_TARGETS): %_QEMUDBG_PTY : %_ALL
|
|
-killall -q qemu-system-arm
|
|
$(QEMU_ARM_DIR)qemu-system-arm -M stm32-p103 -gdb tcp::3333 -S -kernel demos/$*/main.bin -serial pty
|
|
|
|
$(QEMU_DBG_TEL_TARGETS): %_QEMUDBG_TEL : %_ALL
|
|
-killall -q qemu-system-arm
|
|
$(QEMU_ARM_DIR)qemu-system-arm -M stm32-p103 -gdb tcp::3333 -S -kernel demos/$*/main.bin -serial tcp::7777,server
|
|
|
|
# Note: Use this command to run QEMU in low-level debug mode:
|
|
# qemu-system-arm -cpu cortex-m3 -M stm32-p103 -nographic -singlestep -kernel main.bin -d in_asm,out_asm,exec,cpu,int,op,op_opt
|
|
|
|
# Compile targets to build individual files
|
|
$(LIST_FILES): %.list : %.elf
|
|
$(OD) $(ODFLAGS) $< > $@
|
|
|
|
$(BIN_FILES): %.bin : %.elf
|
|
$(CP) $(CPFLAGS) $< $@
|
|
|
|
# Targets to build individual demos
|
|
demos/blink_flash/main.elf: demos/blink_flash/main.c
|
|
demos/blink_flash/main.elf: $(STD_PERIPH_SRC)/stm32f10x_rcc.c
|
|
demos/blink_flash/main.elf: $(STD_PERIPH_SRC)/stm32f10x_gpio.c
|
|
demos/blink_flash/main.elf: $(COMMON_FILES)
|
|
$(CC) $(CFLAGS_LINK) -Idemos/blink_flash/ -o $@ $^
|
|
|
|
|
|
demos/blink_flash_asm/main.elf: demos/blink_flash_asm/main.o
|
|
$(LD) $(LDFLAGS) -o $@ $<
|
|
|
|
demos/blink_flash_asm/main.o: demos/blink_flash_asm/main.s
|
|
$(AS) $(ASFLAGS) -o $@ $<
|
|
|
|
|
|
demos/adc_single/main.elf: demos/adc_single/main.c
|
|
demos/adc_single/main.elf: $(COMMON_FILES)
|
|
$(CC) $(CFLAGS_LINK) -Idemos/adc_single/ -o $@ $^
|
|
|
|
|
|
demos/button/main.elf: demos/button/main.c
|
|
demos/button/main.elf: $(COMMON_FILES)
|
|
$(CC) $(CFLAGS_LINK) -Idemos/button/ -o $@ $^
|
|
|
|
|
|
demos/button_int/main.elf: demos/button_int/main.c
|
|
demos/button_int/main.elf: $(COMMON_FILES)
|
|
$(CC) $(CFLAGS_LINK) -Idemos/button_int/ -o $@ $^
|
|
|
|
|
|
demos/button_int_infinite/main.elf: demos/button_int/main.c
|
|
demos/button_int_infinite/main.elf: $(COMMON_FILES)
|
|
$(CC) -DDO_NOT_CLEAR_IT_PENDING_FLAG $(CFLAGS_LINK) -Idemos/button_int/ -o $@ $^
|
|
|
|
|
|
demos/c_mem_model/main.o: demos/c_mem_model/main.c
|
|
$(CC) $(CFLAGS_LINK) -Idemos/c_mem_model/ -c -o $@ $^
|
|
|
|
demos/c_mem_model/main.elf: demos/c_mem_model/main.o
|
|
demos/c_mem_model/main.elf: $(COMMON_FILES)
|
|
$(CC) $(CFLAGS_LINK) -Idemos/c_mem_model/ -o $@ $^
|
|
|
|
|
|
demos/freertos_singlethread/main.elf: demos/freertos_singlethread/main.c
|
|
demos/freertos_singlethread/main.elf: $(COMMON_FILES)
|
|
demos/freertos_singlethread/main.elf: $(FREE_RTOS_SRC_FILES)
|
|
demos/freertos_singlethread/main.elf: $(FREE_RTOS_SRC)/portable/MemMang/heap_1.c
|
|
$(CC) $(CFLAGS_LINK) -Idemos/freertos_singlethread/ -I$(FREE_RTOS_INC) -I$(FREE_RTOS_PORT_INC) -o $@ $^
|
|
|
|
|
|
demos/freertos_multithread/main.elf: demos/freertos_multithread/main.c
|
|
demos/freertos_multithread/main.elf: $(COMMON_FILES)
|
|
demos/freertos_multithread/main.elf: $(FREE_RTOS_SRC_FILES)
|
|
demos/freertos_multithread/main.elf: $(FREE_RTOS_SRC)/portable/MemMang/heap_1.c
|
|
$(CC) $(CFLAGS_LINK) -Idemos/freertos_multithread/ -I$(FREE_RTOS_INC) -I$(FREE_RTOS_PORT_INC) -o $@ $^
|
|
|
|
demos/freertos_streambuffer/main.elf: demos/freertos_streambuffer/main.c
|
|
demos/freertos_streambuffer/main.elf: $(COMMON_FILES)
|
|
demos/freertos_streambuffer/main.elf: $(FREE_RTOS_SRC_FILES)
|
|
demos/freertos_streambuffer/main.elf: $(FREE_RTOS_SRC)/portable/MemMang/heap_1.c
|
|
$(CC) $(CFLAGS_LINK) -Idemos/freertos_streambuffer/ -I$(FREE_RTOS_INC) -I$(FREE_RTOS_PORT_INC) -o $@ $^
|
|
|
|
demos/qemu_test/main.elf: demos/qemu_test/main.c
|
|
demos/qemu_test/main.elf: $(COMMON_FILES)
|
|
$(CC) $(CFLAGS_LINK) -Idemos/qemu_test/ -o $@ $^
|
|
|
|
|
|
demos/software_int/main.elf: demos/software_int/main.c
|
|
demos/software_int/main.elf: $(COMMON_FILES)
|
|
$(CC) $(CFLAGS_LINK) -Idemos/software_int/ -o $@ $^
|
|
|
|
|
|
demos/stkalign/main.elf: demos/stkalign/main.c
|
|
demos/stkalign/main.elf: $(COMMON_FILES)
|
|
$(CC) $(CFLAGS_LINK) -Idemos/stkalign/ -o $@ $^
|
|
|
|
|
|
demos/systick/main.elf: demos/systick/main.c
|
|
demos/systick/main.elf: $(COMMON_FILES)
|
|
$(CC) $(CFLAGS_LINK) -Idemos/systick/ -o $@ $^
|
|
|
|
|
|
demos/timer/main.elf: demos/timer/main.c
|
|
demos/timer/main.elf: $(COMMON_FILES)
|
|
$(CC) $(CFLAGS_LINK) -Idemos/timer/ -o $@ $^
|
|
|
|
|
|
demos/uart_echo/main.elf: demos/uart_echo/main.c
|
|
demos/uart_echo/main.elf: $(COMMON_FILES)
|
|
$(CC) $(CFLAGS_LINK) -Idemos/uart_echo/ -o $@ $^
|
|
|
|
demos/printf_demo/main.elf: demos/printf_demo/main.c
|
|
demos/printf_demo/main.elf: $(COMMON_FILES)
|
|
$(CC) $(CFLAGS_LINK) -Idemos/printf_demo/ -o $@ $^
|
|
|
|
demos/uart_repeat_write/main.elf: demos/uart_repeat_write/main.c
|
|
demos/uart_repeat_write/main.elf: $(COMMON_FILES)
|
|
$(CC) $(CFLAGS_LINK) -Idemos/uart_repeat_write/ -o $@ $^
|
|
|
|
|
|
demos/uart_echo_int/main.elf: demos/uart_echo_int/main.c
|
|
demos/uart_echo_int/main.elf: $(COMMON_FILES)
|
|
$(CC) $(CFLAGS_LINK) -Idemos/uart_echo_int/ -o $@ $^
|
|
|
|
demos/uart_repeat_write_int/main.elf: demos/uart_repeat_write_int/main.c
|
|
demos/uart_repeat_write_int/main.elf: $(COMMON_FILES)
|
|
$(CC) $(CFLAGS_LINK) -Idemos/uart_repeat_write_int/ -o $@ $^
|
|
|
|
demos/dac/main.elf: demos/dac/main.c
|
|
demos/dac/main.elf: $(COMMON_FILES)
|
|
$(CC) $(CFLAGS_LINK) -Idemos/dac/ -o $@ $^
|
|
|
|
demos/rtc/main.elf: demos/rtc/main.c
|
|
demos/rtc/main.elf: $(COMMON_FILES)
|
|
$(CC) $(CFLAGS_LINK) -Idemos/rtc/ -o $@ $^
|
|
|
|
demos/freertos_semaphore1/main.elf: demos/freertos_semaphore1/main.c
|
|
demos/freertos_semaphore1/main.elf: $(COMMON_FILES)
|
|
demos/freertos_semaphore1/main.elf: $(FREE_RTOS_SRC_FILES)
|
|
demos/freertos_semaphore1/main.elf: $(FREE_RTOS_SRC)/portable/MemMang/heap_1.c
|
|
$(CC) $(CFLAGS_LINK) -Idemos/freertos_semaphore1/ -I$(FREE_RTOS_INC) -I$(FREE_RTOS_PORT_INC) -o $@ $^
|
|
|
|
demos/freertos_cycletask/main.elf: demos/freertos_cycletask/main.c
|
|
demos/freertos_cycletask/main.elf: $(COMMON_FILES)
|
|
demos/freertos_cycletask/main.elf: $(FREE_RTOS_SRC_FILES)
|
|
demos/freertos_cycletask/main.elf: $(FREE_RTOS_SRC)/portable/MemMang/heap_1.c
|
|
$(CC) $(CFLAGS_LINK) -Idemos/freertos_cycletask/ -I$(FREE_RTOS_INC) -I$(FREE_RTOS_PORT_INC) -o $@ $^
|