ifndef PLATFORM_DIR $(error please define PLATFORM_DIR 'make PLATFORM_DIR=foo') else TOOLS := tools ELF2MIF := $(TOOLS)/elf_read/elf_utils.x LD := mipsel-unknown-elf-ld CC := mipsel-unknown-elf-gcc AS := mipsel-unknown-elf-as DU := mipsel-unknown-elf-objdump RM := rm -rf ECHO := echo MKDIR := mkdir DTC := dtc HEXDUMP := hexdump OBJS_DIR := objs MIF_DIR := mifs # ============================================================================= # Include files paths # ============================================================================= INCLUDE += -I. -Iio_drivers -I$(PLATFORM_DIR) # ============================================================================= # Paths of sources in another directories # ============================================================================= VPATH += io_drivers VPATH += $(PLATFORM_DIR) # ============================================================================= # Object files # ============================================================================= S_SRCS += reset.s C_SRCS += spi.c C_SRCS += sdcard.c C_SRCS += ioc.c C_SRCS += boot_tty.c C_SRCS += boot_loader_entry.c C_SRCS += exceptions.c OBJS := $(subst .s,.o,$(S_SRCS)) OBJS += $(subst .c,.o,$(C_SRCS)) OBJS := $(addprefix $(OBJS_DIR)/, $(OBJS)) TARGET := bin.soft ifdef SOCLIB DEFS+= -DSOCLIB_IOC DTS=platform_soclib.dts $(info Making for $(PLATFORM_DIR), SocLib variant) else ifdef SYSCLK_FREQ DEFS+= -DSYSCLK_FREQ endif DTS=platform_fpga.dts $(info Making for $(PLATFORM_DIR), FPGA variant) endif CFLAGS := -Wall -mno-gpopt -ffreestanding -fomit-frame-pointer -mips32 \ -ggdb -mlong-calls # ============================================================================= # ALL target. If the MIF variable is defined, the $(MIF) file is generated # using the $(basename $(MIF))_tab.txt file all: $(TARGET) if [ ! -z $(MIF) ]; then\ if [ ! -e $(MIF_DIR) ]; then\ $(MKDIR) $(MIF_DIR);\ fi;\ $(ECHO) "[ MIF ] $(MIF)";\ $(ELF2MIF) \ -ELF_FILE $(TARGET) \ -SEG_FILE $(basename $(MIF))_tab.txt \ -MIF_FILE $(MIF_DIR)/$(MIF);\ fi; $(TARGET): $(OBJS_DIR) $(OBJS) ldscript $(OBJS_DIR)/platform.ld @\ $(ECHO) "[ LD ] $@" $(LD) -o $@ -T ldscript $(OBJS) $(DU) -D $@ > $@.txt $(OBJS_DIR)/platform.ld: $(OBJS_DIR)/platform.dtb $(HEXDUMP) -v -e '"BYTE(0x" 1/1 "%02X" ")\n"' $< > $@ $(OBJS_DIR)/platform.dtb: $(DTS) ${DTC} -O dtb -o $@ $< $(OBJS_DIR): $(MKDIR) $@ clean: $(RM) $(TARGET).txt $(TARGET) *~ $(OBJS_DIR) distclean: clean $(RM) $(MIF_DIR) # ============================================================================= # Implicit makefile rules $(OBJS_DIR)/%.o: %.c @\ $(ECHO) "[ CC ] $(notdir $<)" $(CC) $(DEFS) $(CFLAGS) $(INCLUDE) -c -o $@ $< $(DU) -D $@ > $@.txt $(OBJS_DIR)/%.o: %.S @\ $(ECHO) "[ AS ] $(notdir $<)" $(CC) $(DEFS) ${INCLUDE} -g -mips32 -c -o $@ $< $(DU) -D $@ > $@.txt .SILENT: endif