Files
onur 1dbd1b5151 Merge tdk_new and Ti375 Efinity support
Keep the current GPS software and Genesys2/VCU118 flows while integrating Ti375C529 Efinity, flash, programming, and debug support. Add board-specific SPI NOR profiles and persistent GPS flash layouts across all three boards.
2026-08-13 01:28:46 +03:00

75 lines
2.6 KiB
Makefile

REPO_DIR ?= $(abspath ../../..)
include $(REPO_DIR)/tools/project.mk
CC := $(CROSS)gcc
OBJCOPY := $(CROSS)objcopy
OBJDUMP := $(CROSS)objdump
SIZE := $(CROSS)size
BUILD_DIR := build
TARGET := bootloader
BSP_DIR := ../bsp
APP_FLASH_OFFSET ?= 0x06000000
MARCH ?= rv64imafdc_zicsr_zifencei
MABI ?= lp64d
BSP_UART_CLOCK_HZ ?= 100000000
BSP_UART_BAUDRATE ?= 460800
BSP_CLINT_TIMEBASE_HZ ?= 1000000
BSP_SPI_FLASH_PROFILE ?= 1
BSP_DTIM_BASE ?= 0x80000000
BSP_DTIM_SIZE ?= 0x00100000
CONFIG_STAMP := $(BUILD_DIR)/build_config.txt
# C uses BSP_DTIM_* for bounds checks; linker uses __dtim_* for RAM origin/length.
CFLAGS := -march=$(MARCH) -mabi=$(MABI) -mcmodel=medany -Os -ffreestanding -fno-builtin -fno-common -Wall -Wextra -I$(BSP_DIR)/include -DAPP_FLASH_OFFSET=$(APP_FLASH_OFFSET)UL -DBSP_UART_CLOCK_HZ=$(BSP_UART_CLOCK_HZ)UL -DBSP_UART_BAUDRATE=$(BSP_UART_BAUDRATE)UL -DBSP_CLINT_TIMEBASE_HZ=$(BSP_CLINT_TIMEBASE_HZ)UL -DBSP_SPI_FLASH_PROFILE=$(BSP_SPI_FLASH_PROFILE) -DBSP_DTIM_BASE=$(BSP_DTIM_BASE)UL -DBSP_DTIM_SIZE=$(BSP_DTIM_SIZE)UL
LDFLAGS := -T linker.ld -nostdlib -static -Wl,--gc-sections -Wl,--defsym=__dtim_base=$(BSP_DTIM_BASE) -Wl,--defsym=__dtim_size=$(BSP_DTIM_SIZE) -Wl,-Map,$(BUILD_DIR)/$(TARGET).map
SRCS := start.S main.c
BSP_SRCS := init.c uart.c spi_flash.c
OBJS := $(addprefix $(BUILD_DIR)/,$(SRCS:=.o)) $(addprefix $(BUILD_DIR)/bsp_,$(BSP_SRCS:=.o))
.PHONY: all clean FORCE
all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).img $(BUILD_DIR)/$(TARGET).dump
$(SIZE) $(BUILD_DIR)/$(TARGET).elf
$(BUILD_DIR):
mkdir -p $@
$(CONFIG_STAMP): FORCE | $(BUILD_DIR)
@tmp="$@.tmp"; \
printf '%s\n' \
'APP_FLASH_OFFSET=$(APP_FLASH_OFFSET)' \
'MARCH=$(MARCH)' \
'MABI=$(MABI)' \
'BSP_UART_CLOCK_HZ=$(BSP_UART_CLOCK_HZ)' \
'BSP_UART_BAUDRATE=$(BSP_UART_BAUDRATE)' \
'BSP_CLINT_TIMEBASE_HZ=$(BSP_CLINT_TIMEBASE_HZ)' \
'BSP_SPI_FLASH_PROFILE=$(BSP_SPI_FLASH_PROFILE)' \
'BSP_DTIM_BASE=$(BSP_DTIM_BASE)' \
'BSP_DTIM_SIZE=$(BSP_DTIM_SIZE)' > "$$tmp"; \
if ! cmp -s "$$tmp" "$@"; then mv "$$tmp" "$@"; else rm "$$tmp"; fi
FORCE:
$(BUILD_DIR)/%.S.o: %.S $(CONFIG_STAMP) | $(BUILD_DIR)
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/%.c.o: %.c $(CONFIG_STAMP) | $(BUILD_DIR)
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/bsp_%.c.o: $(BSP_DIR)/drivers/%.c $(CONFIG_STAMP) | $(BUILD_DIR)
$(CC) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/$(TARGET).elf: $(OBJS) linker.ld $(CONFIG_STAMP)
$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) -o $@
$(BUILD_DIR)/$(TARGET).img: $(BUILD_DIR)/$(TARGET).elf
$(OBJCOPY) -O binary $< $@
$(BUILD_DIR)/$(TARGET).dump: $(BUILD_DIR)/$(TARGET).elf
$(OBJDUMP) -d -S $< > $@
clean:
rm -rf $(BUILD_DIR)