95 lines
2.0 KiB
Makefile
95 lines
2.0 KiB
Makefile
all: $(TARGET)
|
|
|
|
MK_FILE_PATH = $(lastword $(MAKEFILE_LIST))
|
|
PRJ_DIR = $(abspath $(dir $(MK_FILE_PATH)))
|
|
|
|
# Hardcoded paths
|
|
OPENOCD_BIN := /usr/bin/riscv-openocd
|
|
RISCV_SDK_DIR := $(abspath $(PRJ_DIR)/../../riscv-sdk)
|
|
OUT_DIR := bin
|
|
|
|
# Variables
|
|
SDK_INC := $(RISCV_SDK_DIR)/include
|
|
SDK_WRAP := $(RISCV_SDK_DIR)/libwrap
|
|
SDK_OPENOCD_CFG := $(RISCV_SDK_DIR)/openocd.cfg
|
|
|
|
# libwrap config
|
|
include $(SDK_WRAP)/libwrap.mk
|
|
|
|
# SDK sources
|
|
SDK_SRC_ASM := \
|
|
$(RISCV_SDK_DIR)/entry.S \
|
|
$(RISCV_SDK_DIR)/start.S
|
|
|
|
SDK_SRC_C := \
|
|
$(RISCV_SDK_DIR)/init.c
|
|
SDK_LINK_SCRIPT := \
|
|
$(RISCV_SDK_DIR)/flash.lds
|
|
|
|
# Variable used by libwrap.mk
|
|
INCLUDES := -I$(RISCV_SDK_DIR)/include
|
|
|
|
# Platform specific: HiFive1
|
|
|
|
#Name of variable required by libwrap.mk
|
|
ARCH_FLAGS += \
|
|
-march=rv32imac -mabi=ilp32 -mcmodel=medany
|
|
|
|
CFLAGS += \
|
|
-O3 -fno-builtin-printf \
|
|
-Wall -Wextra -Wshadow -fno-common \
|
|
-include sys/cdefs.h \
|
|
$(ARCH_FLAGS) \
|
|
$(LOCAL_CFLAGS)
|
|
|
|
LDFLAGS += \
|
|
-static \
|
|
-L$(RISCV_SDK_DIR) \
|
|
-T$(SDK_LINK_SCRIPT) \
|
|
-nostartfiles \
|
|
--specs=nano.specs \
|
|
-Wl,--gc-sections \
|
|
$(LOCAL_LDFLAGS)
|
|
|
|
# Common targets
|
|
OBJ_S := \
|
|
$(LOCAL_SRC_S:.S=.o) \
|
|
$(SDK_SRC_ASM:.S=.o)
|
|
OBJ_C := \
|
|
$(LOCAL_SRC_C:.c=.o) \
|
|
$(SDK_SRC_C:.c=.o)
|
|
|
|
# Compilation targets
|
|
$(OBJ_S): %.o: %.S
|
|
mkdir -p $(OUT_DIR)/$(dir $@)
|
|
$(CC) $(ARCH_FLAGS) -I$(SDK_INC) $(OPT) -c -o $(OUT_DIR)/$@ $<
|
|
|
|
$(OBJ_C): %.o: %.c
|
|
mkdir -p $(OUT_DIR)/$(dir $@)
|
|
$(CC) -I$(SDK_INC) $(CFLAGS) $(OPT) -c -o $(OUT_DIR)/$@ $<
|
|
|
|
$(TARGET): $(OBJ_C) $(OBJ_S) $(LIBWRAP)
|
|
$(CC) -I$(SDK_INC) $(CFLAGS) $(OPT) \
|
|
$(addprefix $(OUT_DIR)/,$(OBJ_S)) \
|
|
$(addprefix $(OUT_DIR)/,$(OBJ_C)) \
|
|
-o $(OUT_DIR)/$@ $(LDFLAGS)
|
|
clean:
|
|
rm -rf $(OUT_DIR)
|
|
rm -rf $(LIBWRAP)
|
|
|
|
run:
|
|
$(OPENOCD_BIN) -s "sdk" -f $(SDK_OPENOCD_CFG) & \
|
|
$(GDB) \
|
|
"$(OUT_DIR)/$(TARGET)" \
|
|
--batch \
|
|
-ex "set remotetimeout 240" \
|
|
-ex "target extended-remote localhost:3333" \
|
|
-ex "monitor reset halt" \
|
|
-ex "monitor flash protect 0 64 last off" \
|
|
-ex "load" \
|
|
-ex "monitor resume" \
|
|
-ex "monitor shutdown" \
|
|
-ex "quit"
|
|
|
|
.PHONY: clean all run
|