From 2437e8b5c10485cec799aad7acf8aac6a5d3d913 Mon Sep 17 00:00:00 2001 From: Sean Cross Date: Sat, 6 Apr 2019 09:34:26 +0800 Subject: [PATCH] sw: Makefile: support litex build environment Allow this software package to be built from within the Litex build system. Signed-off-by: Sean Cross --- sw/Makefile | 237 +++++++++++++++++++++++++++------------------------- 1 file changed, 122 insertions(+), 115 deletions(-) diff --git a/sw/Makefile b/sw/Makefile index d888129..f9816f5 100644 --- a/sw/Makefile +++ b/sw/Makefile @@ -1,115 +1,122 @@ -PACKAGE := foboot -FOMU_SDK ?= . -ADD_CFLAGS := -I$(FOMU_SDK)/include -D__vexriscv__ -march=rv32im -mabi=ilp32 -ADD_LFLAGS := -SRC_DIR := src - -GIT_VERSION := $(shell git describe --tags) -TRGT ?= riscv64-unknown-elf- -CC := $(TRGT)gcc -CXX := $(TRGT)g++ -OBJCOPY := $(TRGT)objcopy - -RM := rm -rf -COPY := cp -a -PATH_SEP := / - -ifeq ($(OS),Windows_NT) -COPY := copy -RM := del -PATH_SEP := \\ -endif - -LDSCRIPT := $(FOMU_SDK)/ld/linker.ld -LDSCRIPTS := $(LDSCRIPT) $(FOMU_SDK)/ld/output_format.ld $(FOMU_SDK)/ld/regions.ld -DBG_CFLAGS := -ggdb -g -DDEBUG -Wall -DBG_LFLAGS := -ggdb -g -Wall -CFLAGS := $(ADD_CFLAGS) \ - -Wall -Wextra \ - -ffunction-sections -fdata-sections -fno-common \ - -fomit-frame-pointer -Os \ - -march=rv32i \ - -DGIT_VERSION=u\"$(GIT_VERSION)\" -std=gnu11 -CXXFLAGS := $(CFLAGS) -std=c++11 -fno-rtti -fno-exceptions -LFLAGS := $(CFLAGS) $(ADD_LFLAGS) \ - -nostartfiles \ - -nostdlib \ - -Wl,--gc-sections \ - -Wl,--no-warn-mismatch \ - -Wl,--script=$(LDSCRIPT) \ - -Wl,--build-id=none - -OBJ_DIR := .obj - -CSOURCES := $(wildcard $(SRC_DIR)/*.c) $(wildcard third_party/libbase/*.c) $(wildcard third_party/*.c) -CPPSOURCES := $(wildcard $(SRC_DIR)/*.cpp) $(wildcard third_party/libbase/*.cpp) $(wildcard third_party/*.cpp) -ASOURCES := $(wildcard $(SRC_DIR)/*.S) $(wildcard third_party/libbase/*.S) $(wildcard third_party/*.S) -COBJS := $(addprefix $(OBJ_DIR)/, $(notdir $(CSOURCES:.c=.o))) -CXXOBJS := $(addprefix $(OBJ_DIR)/, $(notdir $(CPPSOURCES:.cpp=.o))) -AOBJS := $(addprefix $(OBJ_DIR)/, $(notdir $(ASOURCES:.S=.o))) -OBJECTS := $(COBJS) $(CXXOBJS) $(AOBJS) -VPATH := $(SRC_DIR) third_party/libbase third_party - -QUIET := @ - -ALL := all -TARGET := $(PACKAGE).elf -CLEAN := clean - -$(ALL): $(TARGET) $(PACKAGE).bin $(PACKAGE).ihex - -$(OBJECTS): | $(OBJ_DIR) - -$(TARGET): $(OBJECTS) $(LDSCRIPTS) - $(QUIET) echo " LD $@" - $(QUIET) $(CC) $(OBJECTS) $(LFLAGS) -o $@ - -$(PACKAGE).bin: $(TARGET) - $(QUIET) echo " OBJCOPY $@" - $(QUIET) $(OBJCOPY) -O binary $(TARGET) $@ - -$(PACKAGE).dfu: $(TARGET) - $(QUIET) echo " DFU $@" - $(QUIET) $(COPY) $(PACKAGE).bin $@ - $(QUIET) dfu-suffix -v 1209 -p 70b1 -a $@ - -#$(PACKAGE).bit: $(TARGET) -# $(QUIET) echo " BIT $@" -# # $(QUIET) ice40-repack input/top.bin input/mem_1.init ./foboot.bin ./foboot.bit - -$(PACKAGE).ihex: $(TARGET) - $(QUIET) echo " IHEX $(PACKAGE).ihex" - $(QUIET) $(OBJCOPY) -O ihex $(TARGET) $@ - -$(DEBUG): CFLAGS += $(DBG_CFLAGS) -$(DEBUG): LFLAGS += $(DBG_LFLAGS) -CFLAGS += $(DBG_CFLAGS) -LFLAGS += $(DBG_LFLAGS) -$(DEBUG): $(TARGET) - -$(OBJ_DIR): - $(QUIET) mkdir $(OBJ_DIR) - -$(COBJS) : $(OBJ_DIR)/%.o : %.c Makefile - $(QUIET) echo " CC $< $(notdir $@)" - $(QUIET) $(CC) -c $< $(CFLAGS) -o $@ -MMD - -$(OBJ_DIR)/%.o: %.cpp - $(QUIET) echo " CXX $< $(notdir $@)" - $(QUIET) $(CXX) -c $< $(CXXFLAGS) -o $@ -MMD - -$(OBJ_DIR)/%.o: %.S - $(QUIET) echo " AS $< $(notdir $@)" - $(QUIET) $(CC) -x assembler-with-cpp -c $< $(CFLAGS) -o $@ -MMD - -.PHONY: clean - -clean: - $(QUIET) echo " RM $(subst /,$(PATH_SEP),$(wildcard $(OBJ_DIR)/*.d))" - -$(QUIET) $(RM) $(subst /,$(PATH_SEP),$(wildcard $(OBJ_DIR)/*.d)) - $(QUIET) echo " RM $(subst /,$(PATH_SEP),$(wildcard $(OBJ_DIR)/*.d))" - -$(QUIET) $(RM) $(subst /,$(PATH_SEP),$(wildcard $(OBJ_DIR)/*.o)) - $(QUIET) echo " RM $(TARGET) $(PACKAGE).bin $(PACKAGE).symbol $(PACKAGE).ihex $(PACKAGE).dfu" - -$(QUIET) $(RM) $(TARGET) $(PACKAGE).bin $(PACKAGE).symbol $(PACKAGE).ihex $(PACKAGE).dfu - -include $(wildcard $(OBJ_DIR)/*.d) +PACKAGE := foboot + +GIT_VERSION := $(shell git describe --tags) +TRGT ?= riscv64-unknown-elf- +CC := $(TRGT)gcc +CXX := $(TRGT)g++ +OBJCOPY := $(TRGT)objcopy + +RM := rm -rf +COPY := cp -a +PATH_SEP := / + +ifeq ($(OS),Windows_NT) +COPY := copy +RM := del +PATH_SEP := \\ +endif + +ifeq ($(LITEX),1) +BASE_DIR := ../../../../sw +LDSCRIPT := $(BASE_DIR)/ld/linker.ld +LD_DIR := ../include/generated +ADD_CFLAGS := -I../include -I$(BASE_DIR)/include -D__vexriscv__ -march=rv32im -mabi=ilp32 +ADD_LFLAGS := +else +BASE_DIR := . +LD_DIR := $(BASE_DIR)/ld +LDSCRIPT := $(BASE_DIR)/ld/linker.ld +ADD_CFLAGS := -I$(BASE_DIR)/include -D__vexriscv__ -march=rv32im -mabi=ilp32 +ADD_LFLAGS := +endif + +LDSCRIPTS := $(LDSCRIPT) $(LD_DIR)/output_format.ld $(LD_DIR)/regions.ld +SRC_DIR := $(BASE_DIR)/src +THIRD_PARTY := $(BASE_DIR)third_party +DBG_CFLAGS := -ggdb -g -DDEBUG -Wall +DBG_LFLAGS := -ggdb -g -Wall +CFLAGS := $(ADD_CFLAGS) \ + -Wall -Wextra \ + -ffunction-sections -fdata-sections -fno-common \ + -fomit-frame-pointer -Os \ + -march=rv32i \ + -DGIT_VERSION=u\"$(GIT_VERSION)\" -std=gnu11 +CXXFLAGS := $(CFLAGS) -std=c++11 -fno-rtti -fno-exceptions +LFLAGS := $(CFLAGS) $(ADD_LFLAGS) -L$(LD_DIR) \ + -nostartfiles \ + -nostdlib \ + -Wl,--gc-sections \ + -Wl,--no-warn-mismatch \ + -Wl,--script=$(LDSCRIPT) \ + -Wl,--build-id=none + +OBJ_DIR := .obj + +CSOURCES := $(wildcard $(SRC_DIR)/*.c) $(wildcard $(THIRD_PARTY)/libbase/*.c) $(wildcard $(THIRD_PARTY)/*.c) +CPPSOURCES := $(wildcard $(SRC_DIR)/*.cpp) $(wildcard $(THIRD_PARTY)/libbase/*.cpp) $(wildcard $(THIRD_PARTY)/*.cpp) +ASOURCES := $(wildcard $(SRC_DIR)/*.S) $(wildcard $(THIRD_PARTY)/libbase/*.S) $(wildcard $(THIRD_PARTY)/*.S) +COBJS := $(addprefix $(OBJ_DIR)/, $(notdir $(CSOURCES:.c=.o))) +CXXOBJS := $(addprefix $(OBJ_DIR)/, $(notdir $(CPPSOURCES:.cpp=.o))) +AOBJS := $(addprefix $(OBJ_DIR)/, $(notdir $(ASOURCES:.S=.o))) +OBJECTS := $(COBJS) $(CXXOBJS) $(AOBJS) +VPATH := $(SRC_DIR) $(THIRD_PARTY) $(THIRD_PARTY)/libbase + +QUIET := @ + +ALL := all +TARGET := $(PACKAGE).elf +CLEAN := clean + +$(ALL): $(TARGET) $(PACKAGE).bin $(PACKAGE).ihex + +$(OBJECTS): | $(OBJ_DIR) + +$(TARGET): $(OBJECTS) $(LDSCRIPTS) + $(QUIET) echo " LD $@" + $(QUIET) $(CC) $(OBJECTS) $(LFLAGS) -o $@ + +$(PACKAGE).bin: $(TARGET) + $(QUIET) echo " OBJCOPY $@" + $(QUIET) $(OBJCOPY) -O binary $(TARGET) $@ + +$(PACKAGE).dfu: $(TARGET) + $(QUIET) echo " DFU $@" + $(QUIET) $(COPY) $(PACKAGE).bin $@ + $(QUIET) dfu-suffix -v 1209 -p 70b1 -a $@ + +$(PACKAGE).ihex: $(TARGET) + $(QUIET) echo " IHEX $(PACKAGE).ihex" + $(QUIET) $(OBJCOPY) -O ihex $(TARGET) $@ + +$(DEBUG): CFLAGS += $(DBG_CFLAGS) +$(DEBUG): LFLAGS += $(DBG_LFLAGS) +CFLAGS += $(DBG_CFLAGS) +LFLAGS += $(DBG_LFLAGS) +$(DEBUG): $(TARGET) + +$(OBJ_DIR): + $(QUIET) mkdir $(OBJ_DIR) + +$(COBJS) : $(OBJ_DIR)/%.o : %.c $(BASE_DIR)/Makefile + $(QUIET) echo " CC $< $(notdir $@)" + $(QUIET) $(CC) -c $< $(CFLAGS) -o $@ -MMD + +$(OBJ_DIR)/%.o: %.cpp + $(QUIET) echo " CXX $< $(notdir $@)" + $(QUIET) $(CXX) -c $< $(CXXFLAGS) -o $@ -MMD + +$(OBJ_DIR)/%.o: %.S + $(QUIET) echo " AS $< $(notdir $@)" + $(QUIET) $(CC) -x assembler-with-cpp -c $< $(CFLAGS) -o $@ -MMD + +.PHONY: clean + +clean: + $(QUIET) echo " RM $(subst /,$(PATH_SEP),$(wildcard $(OBJ_DIR)/*.d))" + -$(QUIET) $(RM) $(subst /,$(PATH_SEP),$(wildcard $(OBJ_DIR)/*.d)) + $(QUIET) echo " RM $(subst /,$(PATH_SEP),$(wildcard $(OBJ_DIR)/*.d))" + -$(QUIET) $(RM) $(subst /,$(PATH_SEP),$(wildcard $(OBJ_DIR)/*.o)) + $(QUIET) echo " RM $(TARGET) $(PACKAGE).bin $(PACKAGE).symbol $(PACKAGE).ihex $(PACKAGE).dfu" + -$(QUIET) $(RM) $(TARGET) $(PACKAGE).bin $(PACKAGE).symbol $(PACKAGE).ihex $(PACKAGE).dfu + +include $(wildcard $(OBJ_DIR)/*.d)