######################################################################### # # Makefile used for building application. # # The default target (all) builds application in three formats : # venus.rec : Image in S-record format. # venus.bin : Image in binary format. # venus.elf : Image in ELF format. # venus.map : Linker generated map file. # venus.dis : Disassembly of image. # venus.siz : Sizes of sections. # venus.sym : Symbols. # # Other targets are : # clean : Deletes all files generated by makefile. # depend : Builds dependency file. # ######################################################################### # ********************************************** # Build Options # ********************************************** DRIVERNAME = mvd # Chip: u2 / u3 / t2 / t3 CHIP = t2 # MCU: aeon / mips4ke / mips34k MCU_TYPE = aeon # OS: ecos / linux / nos OS_TYPE = nos # Version: Debug or Retail VERSION = Retail # Makefile for DVB system TV_SYSTEM = DVB ENDIAN = EL # Country/Region, temporarily for DVB only DVB_REGION_UNDEFINED = 0 # invalid setting DVB_REGION_UK = 1 # UK DVB_REGION_GERMANY = 2 # Germany DVB_REGION = $(DVB_REGION_UK) # Image name IMAGENAME = $(MCU_TYPE)_$(DRIVERNAME) # ********************************************** # Tool Chain # ********************************************** ifeq ($(OS_TYPE),ecos) CROSS = mipsisa32-elf- endif ifeq ($(OS_TYPE),linux) CROSS = mips-linux-gnu- CC_FLAG = -march=aeon1 -mhard-div -mhard-mul endif ifeq ($(OS_TYPE),nos) CROSS = aeon- CFG_OPTS = -D$(CHIP) -D'MSOS_TYPE_NOS' CC_OPTS = -c -Wall -$(ENDIAN) CC_OPTS += -march=aeon1 -mhard-div -mhard-mul CC_OPTS += -mredzone-size=4 -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -fomit-frame-pointer -fno-exceptions -ffunction-sections -fdata-sections ifeq ($(VERSION),Debug) CFG_OPTS += -D'MSOS_DEBUG' -D'MSOS_DEBUG_LV5' CC_OPTS += $(CC_OPTS0) -O else CFG_OPTS += -D'MSOS_RETAIL' -D'MSOS_DEBUG_LV5' CC_OPTS += $(CC_OPTS0) -O2 endif CC_OPTS += $(CFG_OPTS) IMAGE_LIB = $(BINPATH)/lib$(DRIVERNAME).a endif CC = $(CROSS)gcc CPP = $(CROSS)cpp LD = $(CROSS)ld OBJCOPY = $(CROSS)objcopy OBJDUMP = $(CROSS)objdump SIZE = $(CROSS)size AR = $(CROSS)ar NM = $(CROSS)nm # ********************************************** # Directories # ********************************************** OSDIR = ../../msos MXLIBDIR = ../../ HALDIR = ../../hal/$(CHIP) DRVAPI = ../$(DRIVERNAME) DRVDRV = ../$(DRIVERNAME) DRVHAL = $(HALDIR)/$(DRIVERNAME) MMIODIR = ../mmio PATH_INSTALL = ../../../lib/$(OS_TYPE)/$(CHIP)/$(DRIVERNAME) # Source files SRC_FILE = $(DRVDRV)/drvMVD.c \ $(DRVDRV)/mvd_cc.c \ $(DRVHAL)/halMVD.c \ $(DRVHAL)/osalMVD.c # Header include file INC_DIR = -I$(DRVDIR)/include -I$(MXLIBDIR) -I$(DRVDRV) -I$(DRVHAL) -I$(OSDIR) -I$(HALDIR) -I$(MMIODIR) BINDIR = ./lib BINPATH = $(BINDIR) OBJDIR = obj OBJPATH = $(OBJDIR) #TOOLS = $(ROOT)/Tools VPATH = $(dir $(SRC_FILE)) # ********************************************** # Addition # ********************************************** # Keep it for addition of options CC_TVOPTS = # ********************************************** # Tools # ********************************************** # ********************************************** # Files to be compiled # ********************************************** SRC_S = $(filter %.S, $(SRC_FILE)) SRC_C = $(filter %.c, $(SRC_FILE)) SRC_O = $(filter %.o, $(SRC_FILE)) SRC_B = $(filter %.bin, $(SRC_FILE)) SRC = $(SRC_C) OBJ_S0 = $(notdir $(patsubst %.S, %.o, $(SRC_S))) OBJ_C0 = $(notdir $(patsubst %.c, %.o, $(SRC_C))) OBJ_C_H0 = $(notdir $(patsubst %.c, %.o, $(SRC_C_H))) OBJ_B0 = $(notdir $(patsubst %.bin, %.o, $(SRC_B))) OBJ_S = $(foreach file, $(OBJ_S0), $(OBJPATH)/$(file) ) OBJ_C = $(foreach file, $(OBJ_C0), $(OBJPATH)/$(file) ) OBJ_C_H = $(foreach file, $(OBJ_C_H0), $(OBJPATH)/$(file) ) OBJ_B = $(foreach file, $(OBJ_B0), $(OBJPATH)/$(file) ) OBJ = $(OBJ_C) $(OBJ_C_H) $(OBJ_B) # *********************************************************************** # Libraries # *********************************************************************** # Standard Libraries # ********************************************** # Compiler and linker options # ********************************************** INCLUDE = $(INC_DIR) CC_OPTS0 = -c $(INCLUDE) $(CC_FLAG) $(CC_TVOPTS) LD_SCRIPT = target.ld LDLIB = -L$(OS_LIB_DIR) -T$(LD_SCRIPT) -lc # -lc # ********************************************** # Rules # ********************************************** .PHONY : all clean depend .SUFFIXES: .bin # Project Build all : setup $(IMAGE_LIB) $(IMAGE_LIB) : depend $(OBJ_S) $(OBJ_C) $(OBJ_C_H) $(OBJ_B) $(AR) rcsv $@ $(OBJ_S) $(OBJ_C) $(OBJ_C_H) $(OBJ_B) $(OBJ_S) : $(OBJPATH)/%.o : %.S $(CC) $(CC_OPTS) -o $@ $< $(OBJ_C) : $(OBJPATH)/%.o : %.c $(CC) $(CC_OPTS) -o $@ $< $(OBJ_C_H) : $(OBJPATH)/%.o : %.c $(CC) $(CC_OPTS) -o $@ $<; $(OBJ_B) : $(OBJPATH)/%.o : %.bin $(shell cd $(dir $<); $(OBJCOPY) -I binary -O elf32-littleaeon -B aeon --prefix-sections=bin $(notdir $<) $(abspath $@)) # Project Setup setup : mkdir -p $(BINDIR) echo "Make $(IMAGENAME) $(TV_SYSTEM) project..." # Project Clean clean : rm -f $(OBJPATH)/*.o echo "Clean $(IMAGENAME) $(TV_SYSTEM) project..." install: mkdir -p $(PATH_INSTALL) [ -n $(PATH_INSTALL) ] && install $(IMAGE_LIB) $(PATH_INSTALL) $(OBJPATH)/depend.mk : Makefile mkdir -p $(OBJPATH) $(CC) $(INCLUDE) $(CC_OPTS) -MM $(SRC) > $(OBJPATH)/depend.mk -include $(OBJPATH)/depend.mk