You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

180 lines
4.5 KiB

TOPDIR := $(shell pwd)
STDPERIPH_DIR := $(TOPDIR)/stdperiph
USBFS_DIR := $(TOPDIR)/usbd
CMSIS_DIR := $(TOPDIR)/CMSIS
TGT_DIR := $(TOPDIR)/target
LDSCRIPT_DIR := $(TOPDIR)/ldscripts
TINYUSB_DIR := $(TOPDIR)/tinyusb
DAP_DIR := $(TOPDIR)/dap
XTAL_HZ := 8000000
CROSS_COMPILE ?= arm-none-eabi-
CC := $(CROSS_COMPILE)gcc
AR := $(CROSS_COMPILE)ar
OBJCOPY:= $(CROSS_COMPILE)objcopy
GDB := $(CROSS_COMPILE)gdb
TARGET_APP_BASE ?= 0x08005000
DEBUG_CFLAGS += -g -ggdb
#DEBUG_CFLAGS += -Os
CFLAGS += -mlittle-endian -mthumb -fno-common -Wall
CFLAGS += -ffunction-sections -fdata-sections -ffreestanding -nostartfiles
CFLAGS += -Wno-unused-function -fno-builtin -fno-strict-aliasing -Wshadow -pipe
CFLAGS += -mcpu=cortex-m3 -march=armv7-m
CFLAGS += -std=gnu99
ifeq ($(XTAL_HZ), 8000000)
XTAL_FLAGS := -DHXTAL_VALUE_8M
endif
ifeq ($(XTAL_HZ), 25000000)
XTAL_FLAGS := -DHXTAL_VALUE_25M
endif
CFLAGS += -DHXTAL_VALUE=$(XTAL_HZ)
CFLAGS += $(XTAL_FLAGS)
CFLAGS += -DUSE_STDPERIPH_DRIVER
CFLAGS += -DGD32F10X_MD
CFLAGS += -DTARGET_APP_BASE=$(TARGET_APP_BASE)
CFLAGS += -I$(CMSIS_DIR)
CFLAGS += -I$(CMSIS_DIR)/GD/GD32F10x/inc
CFLAGS += -I$(STDPERIPH_DIR)/inc
CFLAGS += -I$(USBFS_DIR)/inc
CFLAGS += -I$(TINYUSB_DIR)/src
CFLAGS += -I$(TINYUSB_DIR)/src/device
CFLAGS += -I$(DAP_DIR)
CFLAGS += -I$(TGT_DIR)
CFLAGS += -I$(TGT_DIR)/boot
CFLAGS += $(DEBUG_CFLAGS)
LDFLAGS += -L$(LDSCRIPT_DIR)
LDFLAGS += -Xlinker --gc-sections
LDFLAGS += -Xlinker --print-memory-usage
LDFLAGS += -Xlinker -nostdlib
LDFLAGS += -Xlinker --sort-section=alignment -mcpu=cortex-m4
LDFLAGS += --specs=nosys.specs --specs=nano.specs
stdperiph_srcs := \
$(STDPERIPH_DIR)/src/gd32f10x_adc.c \
$(STDPERIPH_DIR)/src/gd32f10x_bkp.c \
$(STDPERIPH_DIR)/src/gd32f10x_can.c \
$(STDPERIPH_DIR)/src/gd32f10x_crc.c \
$(STDPERIPH_DIR)/src/gd32f10x_dac.c \
$(STDPERIPH_DIR)/src/gd32f10x_dbg.c \
$(STDPERIPH_DIR)/src/gd32f10x_dma.c \
$(STDPERIPH_DIR)/src/gd32f10x_enet.c \
$(STDPERIPH_DIR)/src/gd32f10x_exmc.c \
$(STDPERIPH_DIR)/src/gd32f10x_exti.c \
$(STDPERIPH_DIR)/src/gd32f10x_fmc.c \
$(STDPERIPH_DIR)/src/gd32f10x_fwdgt.c \
$(STDPERIPH_DIR)/src/gd32f10x_gpio.c \
$(STDPERIPH_DIR)/src/gd32f10x_i2c.c \
$(STDPERIPH_DIR)/src/gd32f10x_misc.c \
$(STDPERIPH_DIR)/src/gd32f10x_pmu.c \
$(STDPERIPH_DIR)/src/gd32f10x_rcu.c \
$(STDPERIPH_DIR)/src/gd32f10x_rtc.c \
$(STDPERIPH_DIR)/src/gd32f10x_sdio.c \
$(STDPERIPH_DIR)/src/gd32f10x_spi.c \
$(STDPERIPH_DIR)/src/gd32f10x_timer.c \
$(STDPERIPH_DIR)/src/gd32f10x_usart.c \
$(STDPERIPH_DIR)/src/gd32f10x_wwdgt.c \
objects := $(stdperiph_srcs:.c=.o)
usbfs_srcs := \
$(USBFS_DIR)/src/usbd_core.c \
$(USBFS_DIR)/src/usbd_int.c \
$(USBFS_DIR)/src/usbd_pwr.c \
$(USBFS_DIR)/src/usbd_std.c \
objects += $(usbfs_srcs:.c=.o)
tinyusb_srcs := \
$(TINYUSB_DIR)/src/tusb.c \
$(TINYUSB_DIR)/src/common/tusb_fifo.c \
$(TINYUSB_DIR)/src/device/usbd.c \
$(TINYUSB_DIR)/src/device/usbd_control.c
objects += $(tinyusb_srcs:.c=.o)
dap_srcs := \
$(DAP_DIR)/DAP.c \
$(DAP_DIR)/DAP_vendor.c \
$(DAP_DIR)/JTAG_DP.c \
$(DAP_DIR)/SW_DP.c \
objects += $(dap_srcs:.c=.o)
objects += $(CMSIS_DIR)/GD/GD32F10x/src/system_gd32f10x.o
objects += $(CMSIS_DIR)/GD/GD32F10x/src/GCC/startup_gd32f10x_md.o
objects += $(CMSIS_DIR)/GD/GD32F10x/src/GCC/stub.o
tgt_frontpanel_srcs := \
$(TGT_DIR)/tick.c \
$(TGT_DIR)/cmd.c \
$(TGT_DIR)/fifo.c \
$(TGT_DIR)/terminal.c \
$(TGT_DIR)/target.c \
$(TGT_DIR)/usb/usb_driver.c \
$(TGT_DIR)/usb/frontpanel_core.c \
$(TGT_DIR)/fp/tgt_frontpanel.c \
$(TGT_DIR)/fp/main.c \
tgt_frontpanel_objs := $(tgt_frontpanel_srcs:.c=.o) $(objects)
tgt_dfu_srcs := \
$(TGT_DIR)/boot/main.c \
$(TGT_DIR)/usb_driver.c \
$(TGT_DIR)/usbd_cdc.c \
$(TGT_DIR)/target.c \
tgt_dfu_objs := $(tgt_dfu_srcs:.c=.o) $(objects)
all: dfu.bin dfu.hex
dfu.elf : $(tgt_dfu_objs)
@echo "linking $@"
@$(CC) $(LDFLAGS) -Wl,-Map="$@.map" $^ -o $@ -T dfu.ld
%.o : %.S
@echo "compiling $(notdir $<)"
@$(CC) $(CFLAGS) -c $< -o $@
%.o : %.c
@echo "compiling $(notdir $<)"
@$(CC) $(CFLAGS) -c $< -o $@
%.hex : %.elf
$(OBJCOPY) -O ihex $< $@
%.ld : %.ld.S
$(CC) -E -P -DROMBASE=$(TARGET_APP_BASE) -o $@ $<
%.bin : %.elf
$(OBJCOPY) -O binary $< $@
flash_boot: dfu.hex
@echo "flasing $^ ..."
@pyocd flash $^
flash_fp: frontpanel.hex
@echo "flasing $^ ..."
@pyocd flash $^
dbg_dfu: dfu.elf
@echo "Please run pyocd gdbserver --persist"
@$(GDB) -ex "target remote localhost:3333" $^
clean:
@echo "clean ..."
@rm -rf $(objects) $(tgt_frontpanel_objs) $(tgt_dfu_objs) $(TGT_DIR)/*.o ldscripts/frontpanel.ld
distclean: clean
@rm -rf *.elf *.map *.bin *.hex