351 lines
8.3 KiB
Makefile
351 lines
8.3 KiB
Makefile
|
|
##----------------------------------------------------------##
|
|
## ##
|
|
## Universal Makefile Rules ##
|
|
## ##
|
|
## Created : Wei Liu 07/03/07 ##
|
|
## Revision: [Last]Wei Liu 07/07/07 ##
|
|
## ##
|
|
##----------------------------------------------------------##
|
|
|
|
|
|
UMAKE_VERSION := V2.0
|
|
|
|
##-------------------------------------
|
|
##
|
|
## Work Directory : /usr/local/include
|
|
## Default Target : all
|
|
##
|
|
##-------------------------------------
|
|
default: all
|
|
.PHONY: all clean rebuild test indent splint doc \
|
|
dir config check bk lsbk rmbk unzip umakever usage\
|
|
FORCE
|
|
.SUFFIXES:
|
|
|
|
umakever:
|
|
@echo "Universal Makefile (UMake) Version: $(UMAKE_VERSION)"
|
|
|
|
##--------------------------------------
|
|
##
|
|
## Makefile CFG defination check
|
|
##
|
|
##--------------------------------------
|
|
|
|
ifeq "$(MODULE)" ""
|
|
$(error Please input the module name (MODULE = )in makefile. )
|
|
endif
|
|
|
|
ifeq "$(CFG)" ""
|
|
CFG=debug
|
|
$(warnning No configuration specified for CFG. Defaulting to $(MODULE) - debug. )
|
|
endif
|
|
|
|
ifeq "$(BUILD)" ""
|
|
BUILD=lib
|
|
$(warnning No configuration specified for BUILD. Defaulting to create lib$(MODULE).a. )
|
|
endif
|
|
|
|
ifeq "$(SRC_PATH)" ""
|
|
SRC_PATH=.
|
|
$(warnning No configuration specified for SRC_PATH. Defaulting to ./. )
|
|
endif
|
|
|
|
COVER_NEED ?= no
|
|
PLT_PATH ?= ../../plat
|
|
APP_PATH ?= ../../app
|
|
TYPE ?= plat
|
|
|
|
##--------------------------------------
|
|
##
|
|
## Gcc Flag for debug or release
|
|
##
|
|
##--------------------------------------
|
|
CC := gcc
|
|
GCC_CFLAGS := -Wall -MM
|
|
AR_LINK := ar -r
|
|
|
|
RELS_FLAGS_ADD += -DNDEBUG
|
|
RELEASE_CFLAGS += -g -Wall -I. $(RELS_FLAGS_ADD)
|
|
RELEASE_LINK_CFLAGS = -g $(RELS_FLAGS_ADD) -o
|
|
DEBUG_CFLAGS += -g -Wall -rdynamic -DDEBUG -I. $(DBUG_FLAGS_ADD)
|
|
DEBUG_LINK_CFLAGS = -g -rdynamic -DDEBUG -o
|
|
|
|
ifeq "$(COVER_NEED)" "yes"
|
|
DEBUG_CFLAGS += -fprofile-arcs -ftest-coverage -pg
|
|
endif
|
|
|
|
GCC_CFLAGS=$(DEBUG_CFLAGS)
|
|
GCC_LINK_CFLAGS=$(DEBUG_LINK_CFLAGS)
|
|
|
|
##--------------------------------------
|
|
##
|
|
## Project setting
|
|
##
|
|
##--------------------------------------
|
|
OBJDIR:=./obj
|
|
LIBDIR:=./lib
|
|
UTDIR :=./ut
|
|
DOCDIR:=./doc
|
|
DIRBUILD=$(OBJDIR)
|
|
|
|
ifeq "$(BUILD)" "lib"
|
|
BINDIR:=./bin
|
|
OUTFILE=$(LIBDIR)/lib$(MODULE).a
|
|
DIRNEED=$(UTDIR) $(DOCDIR)
|
|
DIRBUILD+=$(LIBDIR)
|
|
else
|
|
BINDIR:=.
|
|
OUTFILE=$(BINDIR)/$(MODULE)
|
|
DIRNEED=
|
|
DIRBUILD+=$(BINDIR)
|
|
endif
|
|
|
|
##--------------------------------------
|
|
##
|
|
## source , object and dependencies files
|
|
##
|
|
##--------------------------------------
|
|
|
|
SRC_SUBDIR := $(shell find $(SRC_PATH) -type d)
|
|
|
|
vpath %.c $(SRC_SUBDIR)
|
|
vpath %.o $(OBJDIR)
|
|
vpath %.d $(OBJDIR)
|
|
|
|
SRC_FULL_PATH = $(foreach dir,$(SRC_SUBDIR),$(wildcard $(dir)/*.c))
|
|
SRC_FILES = $(foreach file, $(notdir $(SRC_FULL_PATH)) ,$(OBJDIR)/$(file))
|
|
COMMON_OBJ = $(SRC_FILES:%.c=%.o)
|
|
|
|
TEST_OBJ_PATH ?= ../../obj
|
|
|
|
TEST_OBJ = $(foreach dir,$(TEST_OBJ_PATH),$(wildcard $(dir)/*.o))
|
|
|
|
OBJ=$(COMMON_OBJ) $(OBJ_ADD)
|
|
ALL_OBJ := $(OBJ) $(TEST_OBJ)
|
|
|
|
##--------------------------------------
|
|
##
|
|
## Lib setting
|
|
##
|
|
##--------------------------------------
|
|
|
|
ifeq "$(COVER_NEED)" "yes"
|
|
LIBCOVER=-lgcov
|
|
endif
|
|
|
|
MODULE_PLT_LIB=$(foreach lib,$(PLT_LIB), -L$(PLT_PATH)/$(lib)/lib/ -l$(lib) )
|
|
MODULE_PLT_LIB+=-lm
|
|
|
|
|
|
MODULE_APP_LIB=$(foreach lib,$(APP_LIB),-L$(APP_PATH)/$(lib)/lib -l$(lib))
|
|
|
|
ifneq (,$(findstring hlr,$(PLT_LIB)))
|
|
MODULE_APP_LIB=
|
|
##-L../app/ae/src/lib -lpubfunc
|
|
endif
|
|
|
|
ifneq (,$(findstring auceir,$(PLT_LIB)))
|
|
MODULE_APP_LIB=
|
|
##-L../app/ae/src/lib -lpubfunc -L../usr/lib -la3a8 -ldl -lpopt
|
|
endif
|
|
|
|
##--------------------------------------
|
|
##
|
|
## Rules
|
|
##
|
|
##--------------------------------------
|
|
CCFLAG_SWITCH ?= off
|
|
CC_COMPILE =$(CC) $(GCC_CFLAGS) -c $< -o $@
|
|
CC_PRG_LINK=$(CC) $(GCC_LINK_CFLAGS) $(OUTFILE) $(ALL_OBJ) $(LIBCOVER) $(MODULE_APP_LIB) $(MODULE_PLT_LIB) $(LIB_ADD)
|
|
CC_LIB_LINK=$(AR_LINK) $(OUTFILE) $(ALL_OBJ)
|
|
|
|
COMPILE=$(CC_COMPILE)
|
|
PRG_LINK=$(CC_PRG_LINK)
|
|
LIB_LINK=$(CC_LIB_LINK)
|
|
|
|
ifeq "$(BUILD)" "exef"
|
|
LINK=$(PRG_LINK)
|
|
else
|
|
LINK=$(LIB_LINK)
|
|
endif
|
|
|
|
# Build rules
|
|
|
|
all: preproc start dir $(ALL_OBJ) #prtdebug
|
|
@echo Linking :$(OUTFILE)
|
|
ifeq "$(CCFLAG_SWITCH)" "off"
|
|
@$(LINK)
|
|
else
|
|
$(LINK)
|
|
endif
|
|
@$(POSTPROC_CMD)
|
|
@echo -e "\n================================================================================\n"
|
|
|
|
sinclude $(DEPENDS)
|
|
|
|
release : CC_COMPILE =$(CC) $(RELEASE_CFLAGS) -c $< -o $@
|
|
release : CC_PRG_LINK=$(CC) $(RELEASE_LINK_CFLAGS) $(OUTFILE) $(ALL_OBJ) $(MODULE_APP_LIB) $(MODULE_PLT_LIB) $(LIB_ADD)
|
|
release : all
|
|
|
|
##--------------------------------------
|
|
##
|
|
## Make command to use for dependencies
|
|
##
|
|
##--------------------------------------
|
|
|
|
MAKE :=make
|
|
RM :=rm
|
|
MKDIR :=mkdir
|
|
|
|
preproc:
|
|
@$(PREPROC_CMD)
|
|
|
|
start:
|
|
@echo -e "\n================================================================================\n"
|
|
@echo "[Building Project]: $(notdir $(MODULE))"
|
|
ifeq "$(CCFLAG_SWITCH)" "off"
|
|
@echo "Show Gcc Flags switch = OFF"
|
|
endif
|
|
|
|
prtdebug:
|
|
@echo "$(MODULE)-$(BUILD)[$(CFG)] build source file:" "$(SRC_FULL_PATH)"
|
|
@echo SRC_SUBDIR: $(SRC_SUBDIR)
|
|
@echo SRC_FULL_PATH : $(SRC_FULL_PATH)
|
|
@echo SRC_FILES : $(SRC_FILES)
|
|
@echo ALL_OBJ : $(ALL_OBJ)
|
|
@echo LIB:$(MODULE_PLT_LIB)
|
|
@echo PLT_LIB: $(PLT_LIB)
|
|
@echo CCFLAG_SWITCH :$(CCFLAG_SWITCH)
|
|
|
|
config: dir
|
|
|
|
dir:
|
|
@$(foreach dir,$(DIRNEED),$(MKDIR) -p $(DIRNEED) --mode=0777; )
|
|
@$(foreach dir,$(DIRBUILD),$(MKDIR) -p $(dir) --mode=0777; )
|
|
|
|
##--------------------------------------
|
|
##
|
|
## Make Rebuild and clean
|
|
##
|
|
##--------------------------------------
|
|
|
|
ifneq "$(PROJ)" ""
|
|
FRIEND_PROJ := $(shell )
|
|
endif
|
|
|
|
jumprebuild:
|
|
ifneq "$(PROJ)" ""
|
|
@cd $(FRIEND_PROJ); mak rebuild ; cd -
|
|
endif
|
|
|
|
# Rebuild this project
|
|
rebuild: jumprebuild cleanall all
|
|
|
|
# Clean this project and all dependencies
|
|
cleanall: clean
|
|
|
|
# Clean this project
|
|
clean:
|
|
@echo -e "||--------------------------------------------------------------- "
|
|
@echo -e "|| Umake clean gcc , lcov, doxygen generated and temporary files. "
|
|
@echo -e "||--------------------------------------------------------------- "
|
|
@$(RM) -rf $(OBJDIR) $(OUTFILE) $(COVER_REPORT_PATH) ./doc/doxygen.conf ./doc/html ./doc/latex ./doc/rtf $(foreach dir,$(SRC_SUBDIR),$(dir)/*~)
|
|
|
|
|
|
##--------------------------------------
|
|
##
|
|
## indent Makefile.indent
|
|
##
|
|
##--------------------------------------
|
|
include $(MAKE_INCLUDE)/Makefile.indent
|
|
|
|
indent:
|
|
@chmod 777 $(SRC_FULL_PATH)
|
|
@echo ===================================Indent START=================================
|
|
@echo
|
|
@echo "[Indent source file ]: $(SRC_FULL_PATH)"
|
|
$(call MAKE_INDENT , $(SRC_FULL_PATH))
|
|
|
|
##--------------------------------------
|
|
##
|
|
## splint makefile.splint
|
|
##
|
|
##--------------------------------------
|
|
include $(MAKE_INCLUDE)/Makefile.splint
|
|
|
|
SPLINT_FLAG_SWITCH ?= off
|
|
|
|
splint:
|
|
@chmod 777 $(SRC_FULL_PATH)
|
|
@echo =================================Splint START==================================
|
|
@echo
|
|
ifeq "$(SPLINT_FLAG_SWITCH)" "on"
|
|
@echo "[Splint flags ]: $(SPLINT_FLAGS)"
|
|
endif
|
|
@echo "[Lint Clean Project]: $(notdir $(MODULE))"
|
|
$(call MAKE_SPLINT, $(SRC_FULL_PATH))
|
|
|
|
##--------------------------------------
|
|
##
|
|
## doc Makefile.doxygen
|
|
##
|
|
##--------------------------------------
|
|
include $(MAKE_INCLUDE)/Makefile.doxygen
|
|
|
|
doc:
|
|
@chmod 777 $(SRC_FULL_PATH)
|
|
@echo ==================================Doxygen START=================================
|
|
@echo
|
|
$(call MAKE_DOC, $(SRC_FULL_PATH))
|
|
|
|
|
|
##--------------------------------------
|
|
##
|
|
## backup Makefile.backup
|
|
##
|
|
##--------------------------------------
|
|
include $(MAKE_INCLUDE)/Makefile.backup
|
|
|
|
##--------------------------------------
|
|
##
|
|
## cov Makefile.cov
|
|
##
|
|
##--------------------------------------
|
|
include $(MAKE_INCLUDE)/Makefile.cov
|
|
|
|
##--------------------------------------
|
|
##
|
|
## usage Makefile.usage
|
|
##
|
|
##--------------------------------------
|
|
include $(MAKE_INCLUDE)/Makefile.usage
|
|
|
|
##--------------------------------------
|
|
##
|
|
## Make dependencies
|
|
##
|
|
##--------------------------------------
|
|
|
|
$(OBJDIR)/%.d:%.c
|
|
@$(CC) $< -MM -MD -o $@
|
|
|
|
$(OBJDIR)/%.o:%.c
|
|
|
|
ifeq "$(CCFLAG_SWITCH)" "off"
|
|
@echo -e "building: $(notdir $@) \t\t\t\t please wait ..."
|
|
@$(COMPILE)
|
|
else
|
|
$(COMPILE)
|
|
endif
|
|
|
|
DEPENDS=$(COMMON_OBJ:.o=.d)
|
|
|
|
##--------------------------------------
|
|
##
|
|
## Make force
|
|
##
|
|
##--------------------------------------
|
|
FORCE:
|
|
|