doit.mk
################################################
# #
# For Build Test #
# #
################################################
$(shell if [ ! -f .version ]; then echo 0001 > .version; cat .version; fi;)
BUILDNUM=$(shell cat .version)
$(shell echo `expr $(BUILDNUM) + 1` > .version)
$(shell if [ ! -d obj ]; then mkdir -p obj; fi;)
OBJDIR=obj
BRANCH=master
SRCNO=8888
ifeq ($(TARGET), exe)
T=$(TNAME)
else
T=$(TNAME).so
endif
vpath %.c $(INC)
vpath %.cpp $(INC)
OBJS+=version.o
TOBJS:=$(addprefix $(OBJDIR)/, $(OBJS))
OBJS:=$(TOBJS)
LDFLAGS=$(FLAGS) $(VOLDFLAGS) $(TLLDFLAGS)
DFLAGS+=-DMODULE_VERSION=\"$(VERSION)\" -DTARGET_CPUARCH=\"$(TCPU)$(TCPUV)\" -DMODULE_BRANCH=\"$(BRANCH)\" -DSOURCE_REVISIONNO=\"$(SRCNO)\" -DMODULE_BUILD=\"$(BUILDNUM)\" -DMODULE_NAME=\"$(T)\"
TFLAGS+=$(DFLAGS) $(FLAGS)
CPPFLAGS+=$(VOCPPFLAGS) $(TFLAGS)
CFLAGS+=$(VOCFLAGS) $(TFLAGS) $(CCTFLAGS)
ifeq ($(TARGET), exe)
$(T):$(OBJS)
@$(CC) $(LDFLAGS) -o $@ $^ $(addprefix -I, $(INC)) $(DLIBS) | sed '/DMODULE/d' | echo '$(CC) -o $@ $^ $(addprefix -I, $(INC)) $(DLIBS)'
$(OBJDIR)/%.o:%.c
@$(CC) $(CFLAGS) -o $@ -c $< $(addprefix -I, $(INC)) | sed '/DMODULE/d' | echo '$(CC) -o $@ -c $< $(addprefix -I, $(INC))'
else
$(T):$(OBJS)
@$(GG) -shared $(LDFLAGS) -o $@ $^ $(CCTCRTBEGIN) -Wl,--whole-archive $(VOSTCLIBS) -Wl,--no-whole-archive $(VOTLDEPS) $(DLIBS) | sed '/DMODULE/d' | echo '$(GG) -shared -o $@ $^ $(DLIBS)'
$(OBJDIR)/%.o:%.c
@$(CC) $(CFLAGS) -shared -fPIC -o $@ -c $< $(addprefix -I, $(INC)) $(CCTINC) #| sed '/DMODULE/d' #| echo '$(CC) -shared -fPIC -o $@ -c $< $(addprefix -I, $(INC)) $(CCTINC)'
$(OBJDIR)/%.o:%.cpp
@$(GG) $(CPPFLAGS) -shared -fPIC -o $@ -c $< $(addprefix -I, $(INC)) $(CCTINC) $(DLIBS) #| sed '/DMODULE/d' | echo '$(GG) -shared -fPIC -o $@ -c $< $(addprefix -I, $(INC)) $(CCTINC) $(DLIBS)'
endif
clean:
-rm -rf $(OBJS) $(OBJDIR) $T
source.mk
# the whole source file
OBJS=ab.o
# the place where source files locate at
INC=./inc/ \
./src/
# include the doit.mk
include mk/doit.mk
version.c
#include <stdio.h>
#define __VERINFO MODULE_NAME " - " TARGET_CPUARCH " - " TARGETOS " - " MODULE_BRANCH " - Rev." SOURCE_REVISIONNO " - Ver " MODULE_VERSION "." MODULE_BUILD " - " __TIME__ " " __DATE__ "\n"
int ShowVersion(void)
{
printf("voAbout> " __VERINFO);
}
toolchain.mk
# special macro definitions for building
EEPREDEF=-DLINUX -D_LINUX
EEPRJ ?=
EENJ ?= froyo
EETT ?= v7
# control the version to release out
# available: eva(evaluation), rel(release)
EEVER=
ifeq ($(EEVER), eva)
EEPREDEF+=-D__EEVER_EVA__
endif
# for debug or not: yes for debug, any other for release
EEDBG?=ye
# SDK version
EEVERSION:=3.0.0
# build number
EEBUILDNUM?=0000
# branch name
EEBRANCH?=master
# for detecting memory leak
EEDML=
ifeq ($(EEDML), yes)
EEPREDEF+=-DDMEMLEAK
endif
EEPREDEF+=-D__EETT_ARM__ -D__EENJ_FROYO__
TCROOTPATH:=/opt/myfroyo
GCCVER:=4.4.0
TCPATH:=$(TCROOTPATH)/prebuilt/linux-x86/toolchain/arm-eabi-$(GCCVER)
CCTPRE:=$(TCPATH)/bin/arm-eabi-
AS:=$(CCTPRE)as
AR:=$(CCTPRE)ar
NM:=$(CCTPRE)nm
CC:=$(CCTPRE)gcc
GG:=$(CCTPRE)g++
LD:=$(CCTPRE)ld
SIZE:=$(CCTPRE)size
STRIP:=$(CCTPRE)strip
RANLIB:=$(CCTPRE)ranlib
OBJCOPY:=$(CCTPRE)objcopy
OBJDUMP:=$(CCTPRE)objdump
READELF:=$(CCTPRE)readelf
STRINGS:=$(CCTPRE)strings
# target product dependcy
# available: dream, generic
EETP:=blaze
#EETP:=generic
CCTLIB:=$(TCROOTPATH)/out/target/product/$(EETP)/obj/lib
CCTINC:=-I$(TCROOTPATH)/system/core/include \
-I$(TCROOTPATH)/hardware/libhardware/include \
-I$(TCROOTPATH)/hardware/ril/include \
-I$(TCROOTPATH)/hardware/libhardware_legacy/include \
-I$(TCROOTPATH)/dalvik/libnativehelper/include \
-I$(TCROOTPATH)/dalvik/libnativehelper/include/nativehelper \
-I$(TCROOTPATH)/frameworks/base/include \
-I$(TCROOTPATH)/frameworks/base/core/jni \
-I$(TCROOTPATH)/frameworks/base/libs/audioflinger \
-I$(TCROOTPATH)/external/skia/include \
-I$(TCROOTPATH)/external/webkit/WebCore/bridge \
-I$(TCROOTPATH)/external/webkit/WebCore/plugins \
-I$(TCROOTPATH)/external/webkit/WebCore/platform/android \
-I$(TCROOTPATH)/external/webkit/WebKit/android/plugins \
-I$(TCROOTPATH)/out/target/product/$(EETP)/obj/include \
-I$(TCROOTPATH)/bionic/libc/arch-arm/include \
-I$(TCROOTPATH)/bionic/libc/include \
-I$(TCROOTPATH)/bionic/libstdc++/include \
-I$(TCROOTPATH)/bionic/libc/kernel/common \
-I$(TCROOTPATH)/bionic/libc/kernel/arch-arm \
-I$(TCROOTPATH)/bionic/libm/include \
-I$(TCROOTPATH)/bionic/libm/include/arm \
-I$(TCROOTPATH)/bionic/libthread_db/include \
-I$(TCROOTPATH)/bionic/libm/arm \
-I$(TCROOTPATH)/bionic/libm \
-I$(TCROOTPATH)/frameworks/base/include/android_runtime
CCTCFLAGS:=-msoft-float -mthumb-interwork -fno-exceptions -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -fmessage-length=0 -finline-functions -finline-limit=600 -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop
-frename-registers -fstrict-aliasing -funswitch-loops
#-fwide-exec-charset=charset=UTF-32
# for target exe
TELDFLAGS:=-nostdlib -Bdynamic -Wl,-T,$(TCROOTPATH)/build/core/armelf.x -Wl,-dynamic-linker,/system/bin/linker -Wl,--gc-sections -Wl,-z,nocopyreloc -Wl,--no-undefined -Wl,-rpath-link=$(CCTLIB) -L$(CCTLIB)
EETEDEPS:=$(CCTLIB)/crtbegin_dynamic.o $(CCTLIB)/crtend_android.o $(TCPATH)/lib/gcc/arm-eabi/$(GCCVER)/interwork/libgcc.a -lc -lm
# for target lib
TLLDFLAGS:=-nostdlib -Wl,-T,$(TCROOTPATH)/build/core/armelf.xsc -Wl,--gc-sections -Wl,-shared,-Bsymbolic -L$(CCTLIB) -Wl,--no-whole-archive -Wl,--no-undefined $(TCPATH)/lib/gcc/arm-eabi/$(GCCVER)/interwork/libgcc.a
EETLDEPS:=-lm -lc
ifeq ($(EETT), v4)
EECFLAGS:=-mtune=arm9tdmi -march=armv4t
EEASFLAGS:=-march=armv4t -mfpu=softfpa
endif
ifeq ($(EETT), v5)
EECFLAGS:=-march=armv5te
EEASFLAGS:=-march=armv5te -mfpu=vfp
endif
ifeq ($(EETT), v5x)
EECFLAGS:=-march=iwmmxt2 -mtune=iwmmxt2
EEASFLAGS:=-march=iwmmxt2 -mfpu=vfp
endif
ifeq ($(EETT), v6)
#EECFLAGS:=-march=armv6 -mtune=arm1136jf-s
#EEASFLAGS:=-march=armv6
EECFLAGS:=-march=armv6j -mtune=arm1136jf-s -mfpu=vfp -mfloat-abi=softfp -mapcs -mlong-calls
EEASFLAGS:=-march=armv6j -mcpu=arm1136jf-s -mfpu=arm1136jf-s -mfloat-abi=softfp -mapcs-float -mapcs-reentrant
endif
#
# global link options
EELDFLAGS:=-Wl,-x,-X,--as-needed
ifeq ($(EETT), v7)
EECFLAGS+=-march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp
EEASFLAGS+=-march=armv7-a -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp
EELDFLAGS+=-Wl,--fix-cortex-a8
endif
#global compiling options for ARM target
ifneq ($(EETT), pc)
EEASFLAGS+=--strip-local-absolute -R
endif
ifeq ($(EEDBG), yes)
EECFLAGS+=-D_DEBUG -g
else
EECFLAGS+=-DNDEBUG -O3
endif
EECFLAGS+=$(EEPREDEF) $(EEMM) -Wall -fsigned-char -fomit-frame-pointer -fno-leading-underscore -fpic -fPIC -pipe -ftracer -fforce-addr -fno-bounds-check #-fopenmp #-fvisibility=hidden -fvisibility-inlines-hidden #-ftree-loop-linear -mthumb -nostdinc -dD -fprefetch-loop-arrays
ifneq ($(EETT), pc)
EECFLAGS+=$(CCTCFLAGS) $(CCTINC)
EECPPFLAGS:=-fno-rtti $(EECFLAGS)
ifeq ($(EEMT), exe)
EELDFLAGS+=$(TELDFLAGS)
endif
ifeq ($(EEMT), lib)
EELDFLAGS+=$(TLLDFLAGS)
endif
else
EECPPFLAGS:=$(EECFLAGS)
ifeq ($(EEMT), lib)
EELDFLAGS+=-shared
endif
endif
ifeq ($(EEDBG), yes)
#EELDFLAGS:=
endif
# where to place object files
OBJDIR=obj