# ********************************************** # ls1x project # ********************************************** # Name of application # ********************************************** # Tools # ********************************************** #CROSS_COMPILE = loongarch32-linux-gnu- #CROSS_COMPILE = loongarch32-linux-gnusf- #CROSS_COMPILE = /opt/loongarch32-linux-gnu-2022-04-15/bin/loongarch32-linux-gnu- CC = $(CROSS_COMPILE)gcc$(EXE) LD = $(CROSS_COMPILE)ld$(EXE) OBJCOPY = $(CROSS_COMPILE)objcopy$(EXE) OBJDUMP = $(CROSS_COMPILE)objdump$(EXE) STRIP = $(CROSS_COMPILE)strip$(EXE) SIZE = $(CROSS_COMPILE)size$(EXE) # ********************************************** # Directories # ********************************************** BUILD_DIR = $(ROOT_DIR)/build TARGET = $(ROOT_DIR)/target APP = $(ROOT_DIR)/App/Src USER = $(ROOT_DIR)/user DRIVER = $(ROOT_DIR)/driver TOOL = $(ROOT_DIR)/tool BOARD = $(MCU) BOARDNAME = $(MCU) IMAGENAME = $(MCU)_demo PRIVATE = $(ROOT_DIR)/private #BCMDLINE = $(ROOT_DIR)/user/$(BOARD)_cmdline.o BCMDLINE = $(ROOT_DIR)/user/main.o BCOMMAND = $(ROOT_DIR)/user/$(BOARD)_cmd.o BINT = $(ROOT_DIR)/user/$(BOARD)_Interrupt.o SRCDIR = $(TARGET) $(PUBLIC) $(PRIVATE) $(DRIVER) $(TOOL) VPATH = $(SRCDIR) $(USER) # ********************************************** # Image file names and map file # ********************************************** IMAGE_ELF = $(IMAGENAME).elf IMAGE_BIN = $(IMAGENAME).bin IMAGE_MAP = $(IMAGENAME).map # ********************************************** # Compiler and linker options # ********************************************** INCLUDE += -I$(ROOT_DIR)/include -I$(ROOT_DIR)/public -I$(PRIVATE) -I$(TARGET) -I$(DRIVER) -I$(TOOL) FLAGS = -std=gnu99 -O0 -ffunction-sections -fdata-sections -msoft-float -fsched-pressure -fno-builtin -D $(BOARDNAME) CC_OPTS = $(DEBUG) $(FLAGS) $(INCLUDE) CC_COPTS = $(DEBUG) $(FLAGS) $(INCLUDE) LD_SCRIPT = ld.script LD_OPTS = -G 0 -static -T $(LD_SCRIPT) -Map $(IMAGE_MAP) --gc-sections # ********************************************** # Files to be compiled # ********************************************** SRC_C = $(foreach dir, $(SRCDIR), $(wildcard $(dir)/*.c)) SRC_S = $(foreach dir, $(SRCDIR), $(wildcard $(dir)/*.S)) SRC = $(SRC_C) $(SRC_S) OBJ_C = $(notdir $(patsubst %.c, %.o, $(SRC_C))) OBJ_C += $(notdir $(BCMDLINE)) OBJ_C += $(notdir $(BCOMMAND)) OBJ_C += $(notdir $(BINT)) OBJ_S = start.o $(filter-out start.o, $(notdir $(patsubst %.S, %.o, $(SRC_S)))) LS1C1X_OBJ = $(OBJ_S) $(OBJ_C) # ********************************************** # Rules # ********************************************** .PHONY : all all : $(IMAGE_BIN) $(IMAGE_BIN):$(LS1C1X_OBJ) $(LD) $(LD_OPTS) -o $(IMAGE_ELF) $^ -Map $(IMAGE_MAP) $(OBJCOPY) -O binary $(IMAGE_ELF) $(IMAGE_BIN) $(SIZE) $(IMAGE_ELF) $(OBJDUMP) -alD $(IMAGE_ELF) > $(IMAGENAME).s $(OBJ_C) : %.o : %.c $(CC) $(CC_COPTS) -g -Og -c -o $@ $^ $(OBJ_S) : %.o : %.S $(CC) $(CC_OPTS) -g -Og -c -o $@ $^ .PHONY : clean clean : rm -rf *.o *.elf *.map *.bin *.s *.a