30179df8e6
Remove the fixed pseudorange start offset, preserve per-PRN navigation assistance across RF loss and power cycles, and seed coherent navigation measurement phase on reacquisition. Add full LNAV almanac visibility scheduling, power-safe QSPI journaling, RF-domain reset isolation, and PPS Gray CDC hardening with Linux, sanitizer, RTL, and end-to-end coverage.
99 lines
3.4 KiB
Makefile
99 lines
3.4 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
|
|
COMMON_DIR ?= ../common
|
|
BSP_DIR ?= ../bsp
|
|
LINKER_SCRIPT ?= $(COMMON_DIR)/linker_ram.ld
|
|
MARCH ?= rv64imafdc_zicsr_zifencei
|
|
MABI ?= lp64d
|
|
BSP_UART_CLOCK_HZ ?= 100000000
|
|
BSP_UART_BAUDRATE ?= 460800
|
|
BSP_CLINT_TIMEBASE_HZ ?= 1000000
|
|
BSP_DTIM_BASE ?= 0x80000000
|
|
BSP_DTIM_SIZE ?= 0x00100000
|
|
CONFIG_STAMP := $(BUILD_DIR)/build_config.txt
|
|
|
|
# C sees BSP_DTIM_* while ld sees __dtim_*; both come from the same Makefile knobs.
|
|
CFLAGS ?= -march=$(MARCH) -mabi=$(MABI) -mcmodel=medany -Os -ffreestanding -fno-builtin -fno-common -Wall -Wextra -I$(BSP_DIR)/include -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_DTIM_BASE=$(BSP_DTIM_BASE)UL -DBSP_DTIM_SIZE=$(BSP_DTIM_SIZE)UL
|
|
LDFLAGS ?= -T $(LINKER_SCRIPT) -nostartfiles -static -Wl,--gc-sections -Wl,--defsym=__dtim_base=$(BSP_DTIM_BASE) -Wl,--defsym=__dtim_size=$(BSP_DTIM_SIZE) -Wl,-Map,$(BUILD_DIR)/$(TARGET).map
|
|
LDLIBS ?= -Wl,--start-group -lc -lgcc -Wl,--end-group
|
|
|
|
APP_SRCS ?= main.c
|
|
BSP_SRCS ?= init.c uart.c plic.c irq.c spi_flash.c
|
|
APP_OBJS := $(addprefix $(BUILD_DIR)/,$(APP_SRCS:=.o))
|
|
COMMON_OBJS := $(BUILD_DIR)/common_start.S.o $(BUILD_DIR)/common_syscalls.c.o
|
|
BSP_OBJS := $(addprefix $(BUILD_DIR)/bsp_,$(BSP_SRCS:=.o))
|
|
OBJS := $(COMMON_OBJS) $(BSP_OBJS) $(APP_OBJS)
|
|
DEPS := $(OBJS:.o=.d)
|
|
DEPFLAGS := -MMD -MP
|
|
|
|
.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' \
|
|
'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_DTIM_BASE=$(BSP_DTIM_BASE)' \
|
|
'BSP_DTIM_SIZE=$(BSP_DTIM_SIZE)' \
|
|
'GPS_DEBUG=$(GPS_DEBUG)' \
|
|
'GPS_DEBUG_LEVEL=$(GPS_DEBUG_LEVEL)' \
|
|
'CFLAGS=$(CFLAGS)' \
|
|
'LDFLAGS=$(LDFLAGS)' \
|
|
'LDLIBS=$(LDLIBS)' > "$$tmp"; \
|
|
if ! cmp -s "$$tmp" "$@"; then mv "$$tmp" "$@"; else rm "$$tmp"; fi
|
|
|
|
FORCE:
|
|
|
|
$(BUILD_DIR)/common_start.S.o: $(COMMON_DIR)/start.S $(CONFIG_STAMP) | $(BUILD_DIR)
|
|
mkdir -p $(dir $@)
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
$(BUILD_DIR)/common_syscalls.c.o: $(COMMON_DIR)/syscalls.c $(CONFIG_STAMP) | $(BUILD_DIR)
|
|
mkdir -p $(dir $@)
|
|
$(CC) $(CFLAGS) $(DEPFLAGS) -c $< -o $@
|
|
|
|
$(BUILD_DIR)/bsp_%.c.o: $(BSP_DIR)/drivers/%.c $(CONFIG_STAMP) | $(BUILD_DIR)
|
|
mkdir -p $(dir $@)
|
|
$(CC) $(CFLAGS) $(DEPFLAGS) -c $< -o $@
|
|
|
|
$(BUILD_DIR)/%.c.o: %.c $(CONFIG_STAMP) | $(BUILD_DIR)
|
|
mkdir -p $(dir $@)
|
|
$(CC) $(CFLAGS) $(DEPFLAGS) -c $< -o $@
|
|
|
|
$(BUILD_DIR)/%.S.o: %.S $(CONFIG_STAMP) | $(BUILD_DIR)
|
|
mkdir -p $(dir $@)
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
$(BUILD_DIR)/$(TARGET).elf: $(OBJS) $(LINKER_SCRIPT) $(CONFIG_STAMP)
|
|
$(CC) $(CFLAGS) $(OBJS) $(LDFLAGS) $(LDLIBS) -o $@
|
|
|
|
$(BUILD_DIR)/$(TARGET).img: $(BUILD_DIR)/$(TARGET).elf
|
|
$(OBJCOPY) -O binary $< $@
|
|
|
|
$(BUILD_DIR)/$(TARGET).dump: $(BUILD_DIR)/$(TARGET).elf
|
|
$(OBJDUMP) -d -S $< > $@
|
|
|
|
# Header-only firmware changes must invalidate their objects. Without these
|
|
# generated dependencies, `debug-load` could silently reload an older ELF even
|
|
# though a configuration header had changed.
|
|
-include $(DEPS)
|
|
|
|
clean:
|
|
rm -rf $(BUILD_DIR)
|