#*********************************************************************************
#      Copyright:  (C) 2012 Guo Wenxue<Email:guowenxue@gmail.com>
#                  All rights reserved.
#
#       Filename:  Makefile
#    Description:  This Makefile used to call function to compile all the C source
#                  in current folder and links all the objects file into a excutable
#                  binary file.
#                      
#        Version:  1.0.0(10/08/2011~)
#                  Author:  Guo Wenxue <guowenxue@gmail.com>
#      ChangeLog:  1, Release initial version on "10/08/2011 01:29:33 AM"
#                       
#********************************************************************************/

PWD=$(shell pwd)
INSTPATH=/tftp

APP_BINARY_NAME = comport
#ARCH?=i386
ARCH?=arm1176jzfs

MODE=PRODUCTION
LINK_MODE=STATIC
#DEBUG=1

#LDFLAGS+=-lpthread
CFLAGS+=-Wall -Werror

ifeq ("${MODE}", "PRODUCTION")
    CFLAGS+=-DPRODUCTION_MODE
endif
ifdef DEBUG
    CFLAGS+=-g -DDEBUG
endif

COMPILE_DATE=$(shell date -u +"%Y-%m-%d %H:%M")
VPATH= .
SRCS = $(wildcard ${VPATH}/*.c)
OBJS = $(patsubst %.c,%.o,$(SRCS))

TMP=$(shell echo $(ARCH) | tr "[A-Z]" "[a-z]")
ifneq (,$(filter i386,$(TMP)))
    CROSS_COMPILE=
else
    CROSS_COMPILE=/opt/buildroot-2012.08/$(ARCH)/usr/bin/arm-linux-
endif

CFLAGS+=-I${PWD}

export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export AR=${CROSS_COMPILE}ar
export AS=${CROSS_COMPILE}as
export RANLIB=${CROSS_COMPILE}ranlib
export STRIP=${CROSS_COMPILE}strip
export CFLAGS
export LDFLAGS
export ARCH
export LINK_MODE

ifeq ("${LINK_MODE}", "STATIC")
	CFLAGS+=--static
	LDFLAGS+=-static
else
	LDFLAGS+=-ldl
endif

all: entry version $(APP_BINARY_NAME)

entry: 
	@echo " ";
	@echo " =========================================================";
	@echo " **        Compile ${APP_BINARY_NAME} for ${ARCH}         ";
	@echo " =========================================================";

version:
	@echo "/* Generated by makefile, don't Edit it by hand */" > version.h 
	@echo "#define DATE \"$(COMPILE_DATE)\"" >> version.h 
	@echo "#define MAJOR 1" >>version.h 
	@echo "#define MINOR 0" >>version.h 
	@echo "#define REVER 0" >>version.h 
	@if [ -f .svn/entries ] ; then \
        echo "#define SVNVER `sed -n -e 11p .svn/entries`" >>version.h; \
    else \
        echo "#define SVNVER 0" >>version.h; \
    fi;
	@echo "" >> version.h 
	@echo '#define version(progname) printf("%s Version %d.%d.%d Build @%05d (%s)\n", progname, MAJOR, MINOR, REVER,SVNVER, DATE)'  >> version.h
	@echo '#define copyright() printf("Copyright:  (C) 2012 Guo Wenxue<Email:guowenxue@gmail.com\n")' >>version.h
	@echo '#define banner(progname) {version(progname); copyright(); printf("\n");}' >>version.h
	@echo "" >> version.h

$(APP_BINARY_NAME):	$(OBJS) 
	$(CC)  -o $@ *.c
	$(STRIP) $(APP_BINARY_NAME)

tag: 
	@ctags --c-kinds=+defglmnstuvx --langmap=c:.c.h.ho.hem.het.hec.hev.him.hit.hic.hiv -R .  
	@cscope -Rbq

install:
	@cp $(APP_BINARY_NAME) ${INSTPATH}

clean: 
	@rm -f version.h 
	@rm -f *.o $(APP_BINARY_NAME) 
	@rm -rf *.gdb *.a *.so *.elf*

distclean: clean
	@rm -f  tags cscope*

.PHONY: clean entry
