1 2################################################################################ 3# 4# Copyright (c) 2008-2009 MStar Semiconductor, Inc. 5# All rights reserved. 6# 7# Unless otherwise stipulated in writing, any and all information contained 8# herein regardless in any format shall remain the sole proprietary of 9# MStar Semiconductor Inc. and be kept in strict confidence 10# ("MStar Confidential Information") by the recipient. 11# Any unauthorized act including without limitation unauthorized disclosure, 12# copying, use, reproduction, sale, distribution, modification, disassembling, 13# reverse engineering and compiling of the contents of MStar Confidential 14# Information is unlawful and strictly prohibited. MStar hereby reserves the 15# rights to any and all damages, losses, costs and expenses resulting therefrom. 16# 17# 18# Makefile used for building DDI 19# 20# 21################################################################################ 22 23unexport HAL_DIR 24unexport DRV_SUB 25unexport DRV_NAME 26unexport DRV_SRC 27unexport DRV_CC_INCS 28 29 30# ********************************************** 31# DRV Name 32# ********************************************** 33#DRV_NAME = ddd 34#DRV_SUB = \ 35# sss 36 37# ********************************************** 38# HAL Source Files 39# ********************************************** 40#HAL_DIR = \ 41# hhh \ 42 43 44# ********************************************** 45# Rules 46# ********************************************** 47# if API_NAME is defined the driver will be built into API library 48# else driver will be built in single driver library 49ifneq ($(API_NAME), ) 50LIB_NAME = api$(API_NAME) 51else 52LIB_NAME = drv$(DRV_NAME) 53endif 54 55DRV_SRC = $(wildcard $(CURDIR)/*.c) 56DRV_SRC += $(foreach dir, $(DRV_SUB), $(wildcard $(CURDIR)/$(dir)/*.c)) 57DRV_OBJ = $(foreach file, $(notdir $(patsubst %.c, %.o, $(DRV_SRC))), $(OBJ_PATH)/$(file)) 58DRV_IMPORT_SRC = $(foreach dir, $(CURDIR), $(wildcard $(CURDIR)/obj_import/$(OS_TYPE)/$(MCU_TYPE)/*.src)) 59DRV_IMPORT_OBJ = $(foreach file, $(notdir $(patsubst %.src, %.o, $(DRV_IMPORT_SRC))), $(OBJ_PATH)/$(file)) 60HAL_SRC = $(foreach dir, $(HAL_DIR), $(wildcard $(DDIHAL)/$(CHIP)/$(dir)/*.c)) 61HAL_SRC_S = $(foreach dir, $(HAL_DIR), $(wildcard $(DDIHAL)/$(CHIP)/$(dir)/*.s)) 62HAL_OBJ = $(foreach file, $(notdir $(patsubst %.c, %.o, $(HAL_SRC))), $(OBJ_PATH)/$(file)) 63HAL_OBJ_S = $(foreach file, $(notdir $(patsubst %.s, %.o, $(HAL_SRC_S))), $(OBJ_PATH)/$(file)) 64HAL_IMPORT_SRC = $(foreach dir, $(HAL_DIR), $(wildcard $(DDIHAL)/$(CHIP)/$(dir)/obj_import/$(OS_TYPE)/$(MCU_TYPE)/*.src)) 65HAL_IMPORT_OBJ = $(foreach file, $(notdir $(patsubst %.src, %.o, $(HAL_IMPORT_SRC))), $(OBJ_PATH)/$(file)) 66DRV_INCDIR = $(CURDIR) $(foreach dir,$(DRV_SUB),$(CURDIR)/$(dir)) $(foreach dir,$(HAL_DIR),$(DDIHAL)/$(CHIP)/$(dir)) 67DRV_CC_INCS = $(foreach dir,$(DRV_INCDIR),-I$(dir) -I$(PUBINC)) 68 69ifeq ($(MAKE_TYPE),lint) 70ifeq ($(shell uname -o),Cygwin) 71LINT_INC += $(foreach dir,$(shell cygpath -m $(DRV_INCDIR)),-i"$(dir)") 72else 73LINT_INC += $(foreach dir,$(DRV_INCDIR),-i"$(dir)") 74endif 75endif 76 77HAL_OBJ_T = $(HAL_OBJ:.o=.T) 78HAL_IMPORT_OBJ_T = $(HAL_IMPORT_OBJ:.o=.T) 79DRV_OBJ_T = $(DRV_OBJ:.o=.T) 80DRV_IMPORT_OBJ_T = $(DRV_IMPORT_OBJ:.o=.T) 81 82VPATH = $(DRV_SUB) $(foreach dir, $(HAL_DIR), $(DDIHAL)/$(CHIP)/$(dir)) 83 84ifeq ("$(UTOPIA_BSP_VERSION)", "") 85UTOPIA_BSP_VERSION = 000000 86else 87CC_DEFS += -DUTOPIA_BSP_VERSION=$(UTOPIA_BSP_VERSION) 88endif 89 90ifeq ("$(P4PORT)", "") 91SW_VERSION_HAL_$(DRV_NAME) = 0 92else 93HAL_SW_DIR = $(shell echo $(HAL_DIR) | sed 's/ vpu//g') 94SW_VERSION_HAL_$(DRV_NAME) = $(shell p4 changes -m1 ./../../hal/$(CHIP)/$(HAL_SW_DIR)/...\#have | egrep Change | awk '{print $$2}') 95ifeq ("$(SW_VERSION_HAL_$(DRV_NAME))", "") 96SW_VERSION_HAL_$(DRV_NAME) = 0 97endif 98endif 99CC_DEFS += -DSW_VERSION_HAL_$(DRV_NAME)=$(SW_VERSION_HAL_$(DRV_NAME)) 100 101ifeq ("$(P4PORT)", "") 102SW_VERSION_DRV_$(DRV_NAME) = 0 103else 104SW_VERSION_DRV_$(DRV_NAME) = $(shell p4 changes -m1 "./...\#have" | egrep Change | awk '{print $$2}') 105ifeq ("$(SW_VERSION_DRV_$(DRV_NAME))", "") 106SW_VERSION_DRV_$(DRV_NAME) = 0 107endif 108endif 109CC_DEFS += -DSW_VERSION_DRV_$(DRV_NAME)=$(SW_VERSION_DRV_$(DRV_NAME)) 110 111ifeq ("$(HAL_DIR)", "demod") 112CC_DEFS += -D$(CHIP) 113endif 114 115all : $(HAL_OBJ_T) $(HAL_IMPORT_OBJ_T) $(DRV_OBJ_T) $(DRV_IMPORT_OBJ_T) 116 117 118ifneq ($(MAKE_TYPE),lint) 119ifeq ($(LINK_TYPE),dynamic) 120ifneq ($(BUILDING_API),1) 121 ifeq ($(CONFIG_INCREMENTAL_BUILD),y) 122 @$(CC) $(CFG_CC_OPTS) $(LD_LIBS_INC) $(LD_OPTS) $(DRV_OBJ) $(DRV_IMPORT_OBJ) $(HAL_OBJ_S) $(HAL_OBJ) $(HAL_IMPORT_OBJ) $(MLOG_LIB_PATH) -s -o $(DDI_PATH)/lib$(LIB_NAME).$(LIB_EXT) 123 ifeq ($(CONFIG_VERSION_INFO_EMBADE), y) 124 @sh $(VERSION)/versionembadder.sh $(DDI_PATH)/lib$(LIB_NAME).$(LIB_EXT) $(DDI_PATH)/lib$(LIB_NAME).$(LIB_EXT).temp ./version_info 125 @rm -f $(DDI_PATH)/lib$(LIB_NAME).$(LIB_EXT) 126 @mv -f $(DDI_PATH)/lib$(LIB_NAME).$(LIB_EXT).temp $(DDI_PATH)/lib$(LIB_NAME).$(LIB_EXT) 127 endif 128 else 129 @$(CC) $(CFG_CC_OPTS) $(LD_OPTS) $(DRV_OBJ) $(DRV_IMPORT_OBJ) $(HAL_OBJ_S) $(HAL_OBJ) $(HAL_IMPORT_OBJ) $(MLOG_LIB_PATH) -o $(DDI_PATH)/lib$(LIB_NAME).$(LIB_EXT) 130 @$(OBJCOPY) --add-section .mmodule_version=./version_info $(DDI_PATH)/lib$(LIB_NAME).$(LIB_EXT) 131 ifeq ($(CONFIG_VERSION_INFO_EMBADE), y) 132 @sh $(VERSION)/versionembadder.sh $(DDI_PATH)/lib$(LIB_NAME).$(LIB_EXT) $(DDI_PATH)/lib$(LIB_NAME).$(LIB_EXT).temp ./version_info 133 @rm -f $(DDI_PATH)/lib$(LIB_NAME).$(LIB_EXT) 134 @mv -f $(DDI_PATH)/lib$(LIB_NAME).$(LIB_EXT).temp $(DDI_PATH)/lib$(LIB_NAME).$(LIB_EXT) 135 endif 136 endif 137endif 138else 139 @$(AR) cru $(DDI_PATH)/lib$(LIB_NAME).$(LIB_EXT) $(DRV_OBJ) $(DRV_IMPORT_OBJ) $(HAL_OBJ) $(HAL_IMPORT_OBJ) 140 ifeq ($(CONFIG_VERSION_INFO_EMBADE), y) 141 @sh $(VERSION)/versionembadder.sh $(DDI_PATH)/lib$(LIB_NAME).$(LIB_EXT) $(DDI_PATH)/lib$(LIB_NAME).$(LIB_EXT).temp ./version_info 142 @rm -f $(DDI_PATH)/lib$(LIB_NAME).$(LIB_EXT) 143 @mv -f $(DDI_PATH)/lib$(LIB_NAME).$(LIB_EXT).temp $(DDI_PATH)/lib$(LIB_NAME).$(LIB_EXT) 144 endif 145ifeq ($(BLT_TYPE),retail) 146 @$(STRIP) -S $(DDI_PATH)/lib$(LIB_NAME).$(LIB_EXT) 147endif 148endif 149endif 150 151ifeq ($(PARA), 1) 152 @if [ -f $(CURDIR)/cpptestscan.bdf ]; then \ 153 rm -f $(CURDIR)/cpptestscan.bdf; \ 154 fi 155endif 156 157 158ifeq ($(TOOLCHAIN),mips-linux-gnu) 159ifeq ($(OS_TYPE),nos) 160SW_MBOOT_FLOW = TRUE 161endif 162endif 163 164 165lib : setup all 166 167$(DRV_IMPORT_OBJ) : 168 echo find drv import_obj cp from $(filter %$(notdir $*).src,$(DRV_IMPORT_SRC)) to $@ 169 cp $(filter %$(notdir $*).src,$(DRV_IMPORT_SRC)) $@ 170 171$(HAL_IMPORT_OBJ): 172 echo find hal import_obj cp from $(filter %$(notdir $*).src,$(HAL_IMPORT_SRC)) to $@ 173 cp $(filter %$(notdir $*).src,$(HAL_IMPORT_SRC)) $@ 174 175$(HAL_OBJ_S) : $(OBJ_PATH)/%.o : %.s 176 @echo [AS] $(notdir $<) 177ifeq ($(MCU_TYPE),arm_ca12) 178 $(AS) -march=armv7-a -mfpu=neon -o $@ $<; 179endif 180ifeq ($(MCU_TYPE),arm9) 181 $(AS) -march=armv7-a -mfpu=neon -o $@ $<; 182endif 183ifeq ($(MCU_TYPE),arm_ca7) 184 $(AS) -march=armv7-a -mfpu=neon -o $@ $<; 185endif 186 187$(DRV_OBJ) $(HAL_OBJ) : $(OBJ_PATH)/%.o : %.c 188ifneq ($(MAKE_TYPE),lint) 189 @echo [CC] $(notdir $<) 190 @$(CC) $(CC_OPTS) $(CC_DEFS) $(CC_INCS) $(DRV_CC_INCS) -o $@ $<; 191ifeq ($(PARA), 1) 192 @if [ ! -f $(CURDIR)/cpptestscan.bdf ]; then \ 193 echo ERROR! No $(CURDIR)/cpptestscan.bdf; \ 194 fi 195 @if [ -f $(CURDIR)/cpptestscan.bdf ]; then \ 196 cat $(CURDIR)/cpptestscan.bdf >> $(PROJ)/cpptestscan.bdf; \ 197 rm -f $(CURDIR)/cpptestscan.bdf; \ 198 fi 199endif 200 201 202else 203 @echo [LINT] $(notdir $<) 204ifeq ($(shell uname -o),Cygwin) 205 @$(LINT_CMD) $(CC_DEFS) $(LINT_INC) $(shell cygpath -m $<) >>$(LINT_LOG) 206# @echo $< >>$(LINT_FILES) 207else 208 @$(LINT_CMD) $(CC_DEFS) $(LINT_INC) $< >>$(LINT_LOG) 209# @echo $< >>$(LINT_FILES) 210endif 211endif 212 213 214$(HAL_OBJ_T) $(HAL_IMPORT_OBJ_T) $(DRV_OBJ_T) $(DRV_IMPORT_OBJ_T): $(DRV_OBJ) $(DRV_IMPORT_OBJ) $(HAL_OBJ_S) $(HAL_OBJ) $(HAL_IMPORT_OBJ) 215ifeq ($(BUILDING_API),1) 216 @cp $(@:.T=.o) $@; \ 217 mkdir -p $(OBJ_PATH)/$(LIB_NAME)_T; \ 218 mv $@ $(OBJ_PATH)/$(LIB_NAME)_T; 219endif 220 221 222setup: 223ifeq ($(LINK_TYPE),dynamic) 224 @echo [drv_rule.mk][lib$(LIB_NAME).$(LIB_EXT)] 225else 226 @echo [drv_rule.mk][lib$(LIB_NAME).$(LIB_EXT)] 227endif 228 229clean : 230 @rm -f $(HAL_OBJ_S) 231 @rm -f $(HAL_OBJ) 232 @rm -f $(HAL_IMPORT_OBJ) 233 @rm -f $(DRV_OBJ) 234 @rm -f $(DRV_IMPORT_OBJ) 235 @rm -f $(DDI_PATH)/lib$(LIB_NAME).a 236 @rm -f $(DDI_PATH)/lib$(LIB_NAME).so 237 238 239 240