COMPILER = GNU_CC
SHELL=/bin/sh
DEPTOOL = gcc -MM
RM = rm -f
ifeq ($(origin PROJECT_NAME), undefined)
PROJECT_NAME=bm
endif
ifndef PROJECT_DIR
PROJECT_DIR=$(HOME)/$(PROJECT_NAME)
endif
DEBUGDIR=Debug/
RELDIR=Release/
ifeq ($(DEBUG), YES)
BUILDDIR=$(DEBUGDIR)
else
BUILDDIR=$(RELDIR)
endif
ifndef OSNAME
TARGETNAME = $(shell $(PROJECT_DIR)/config.guess)
OSNAME = $(shell $(PROJECT_DIR)/canon-system $(TARGETNAME))
endif
PLATFORM-MK = $(PROJECT_DIR)/platforms/$(OSNAME).mk
include $(PLATFORM-MK)
ifndef LDD
LDD=ldd
endif
ifeq ($(FACCMODE), )
FACCMODE=750
endif
DESTDIR = $(PROJECT_DIR)
ifdef DESTINATIONDIR
ifeq ($(DEBUG), YES)
OUTDIR:=$(PROJECT_DIR)/$(DESTINATIONDIR)/$(DEBUGDIR)
BASICLIBDIR:=$(addprefix -L$(PROJECT_DIR)/, $(addsuffix /$(DEBUGDIR), $(ADDLIBDIR))) $(addprefix -L$(PROJECT_DIR)/, $(addsuffix /$(DEBUGDIR), $(BASICLIBS)))
ifeq ($(COMPILER) ,GNU_CC)
DBGFLAGS:=-ggdb -D_DEBUG
else
DBGFLAGS:=-g -D_DEBUG
endif
else
OUTDIR:=$(PROJECT_DIR)/$(DESTINATIONDIR)/$(RELDIR)
BASICLIBDIR:=$(addprefix -L$(PROJECT_DIR)/, $(addsuffix /$(RELDIR), $(ADDLIBDIR))) $(addprefix -L$(PROJECT_DIR)/, $(addsuffix /$(RELDIR), $(BASICLIBS)))
DBGFLAGS:=$(OPT_FLAGS)
endif
else
ifeq ($(DEBUG), YES)
OUTDIR:=$(PROJECT_DIR)/$(DEBUGDIR)
ifeq ($(COMPILER) ,GNU_CC)
DBGFLAGS:=-ggdb -D_DEBUG -DDBG_NEW
else
DBGFLAGS:=-g -D_DEBUG
endif
else
OUTDIR:=$(PROJECT_DIR)/$(RELDIR)
DBGFLAGS:=$(OPT_FLAGS)
endif
endif
BASICINCDIR:=$(addprefix -I$(PROJECT_DIR)/, $(ADDLIBDIR)) $(addprefix -I$(PROJECT_DIR)/, $(BASICINCS))
BASICLIBS:=-L$(PROJECT_DIR)/src/$(BUILDDIR)
ifeq ($(DEBUG), YES)
DEPFILE=depend.dDebug
else
DEPFILE=depend.dRelease
endif
SOURCES = $(CXXSOURCES) $(CSOURCES)
CXXOBJECTS1:=$(CXXSOURCES:.cpp=.o)
CXXOBJECTS:=$(CXXOBJECTS1:.cc=.o)
COBJECTS:=$(CSOURCES:.c=.o)
CXXOBJECTS:=$(addprefix $(OUTDIR), $(CXXOBJECTS))
COBJECTS:=$(addprefix $(OUTDIR), $(COBJECTS))
.PHONY : clean init check-platform rebuild
.SILENT : clean init dep
$(OUTDIR)%.o: %.cpp
@echo \< $*.cpp \>
$(CXX) -c $(CXXFLAGS) $*.cpp -o $@ $(DBGFLAGS)
$(OUTDIR)%.o : %.c
$(CC) -c $(CFLAGS) $< -o $@ $(DBGFLAGS)
LDFLAGS = $(COMMON_LDFLAGS)
CXXFLAGS = $(BMOPTFLAGS) $(COMMON_CXXFLAGS) $(DB_INCL) $(EXTERNINCDIR) $(BASICINCDIR) $(CXX_INCLUDE_FLAGS)
CFLAGS = $(BMOPTFLAGS) $(COMMON_CFLAGS)
ifdef DEPCOMMAND
DEPCOMMAND:=$(DEPCOMMAND)$(DB_INCL) $(PLATFORM_CXXFLAGS) $(EXTERNINCDIR) $(BASICINCDIR) $(CXX_INCLUDE_FLAGS) $(EXTERNINCDIR) $(SOURCES)
else
DEPCOMMAND:=$(DEPTOOL) $(PLATFORM_CXXFLAGS) $(DB_INCL) $(EXTERNINCDIR) $(BASICINCDIR) $(CXX_INCLUDE_FLAGS) $(EXTERNINCDIR) $(SOURCES) > depend.d~
endif
CATCOMMAND=cat depend.d~ | awk '{if ( index($$0,".o:" ) !=0 ) print "$(OUTDIR)"$$0; else print $$0}' > $(DEPFILE)
ifeq ($(DESTTYPE), LIB)
DESTDEP=$(CXXOBJECTS) $(COBJECTS)
DESTINATION:=$(OUTDIR)lib$(DESTINATION).a
DESTCOMMAND=$(AR) $(ARFLAGS) $(DESTINATION) $(CXXOBJECTS) $(COBJECTS)
CXX_TEMPL_MERGE = @if [ x$(CXX_REPOSITORY) != x ]; then \
if [ -d $(CXX_REPOSITORY) ]; then \
$(AR) r $(DESTINATION) $(CXX_REPOSITORY)/*; \
fi; \
fi
else
ifeq ($(DESTTYPE), )
DESTDEP=$(CXXOBJECTS) $(COBJECTS) $(BASICOBJS)
ifdef CXX_REPOSITORY
TEMPL_LIST=$(wildcard $(CXX_REPOSITORY)/*)
endif
DESTCOMMAND=$(LD) -o $(DESTINATION) $(LDFLAGS) $(CXXOBJECTS) $(COBJECTS) $(TEMPL_LIST) $(BASICOBJS) \
$(BASICLIBDIR) $(BASICLIBS) $(EXTERNLIBS) \
$(SYS_LIBS)
else
DEPCOMMAND=
CATCOMMAND=
ifeq ($(DESTTYPE), COPYONLY)
DESTDEP=
DESTCOMMAND=echo File(s) $(DESTINATION) do(es) not require to be build
else
DESTCOMMAND=
MERGE_SCR=merge_scr.sh
DESTDEP:=$(DESTDEP) $(addsuffix .src, $(DESTINATION))
endif
endif
endif
ifndef INSTALL_LIST
INSTALL_LIST=$(DESTINATION)
endif
all: init banner $(DESTINATION) $(OUTDIR)
check-platform: $(PLATFORM-MK)
@echo Platform : $(PLATFORM-MK)
banner:
@echo ======= Building : $(PROJECTNAME) $(OSNAME) $(COMPILER)
debug:
$(MAKE) DEBUG=YES
release:
$(MAKE) COMMON_DFLAGS="$(OPT_FLAGS)" LINKER_DFLAGS= all
$(DESTINATION): $(DESTDEP)
@echo ======== Linking : $(PROJECTNAME) $(OSNAME) $(COMPILER) $(DESTTYPE) $(DESTCOMMAND)
@echo ======== $(DESTINATION)
@if [ x$(MERGE_SCR) != x ] ; then \
for fnm in $(DESTINATION); do \
$(MERGE_SCR) $$fnm.src >$$fnm; done \
fi
$(DESTCOMMAND)
$(CXX_TEMPL_MERGE)
rebuild:
$(MAKE) --no-print-directory clean
$(MAKE) --no-print-directory dep
$(MAKE) --no-print-directory all
relink:
$(RM) $(DESTINATION)
$(MAKE) all
clean:
@echo ====== Clean Up directories
$(RM) core *.a *.o *~ depend.d* $(DESTINATION) $(DESTINATION).exe
$(RM) $(DEBUGDIR)*.o $(DEBUGDIR)*.a core *.stackdump
$(RM) $(RELDIR)*.o $(RELDIR)*.a
$(RM) -Rf $(DEBUGDIR)/$(CXX_CACHE)
$(RM) -Rf $(RELDIR)/$(CXX_CACHE)
$(RM) -Rf $(CXX_CACHE)
$(RM) -Rf *__Win32_Debug *__Win32_Release *.bak *.plg
$(RM) -Rf warn.log cvsenv.sh
relprep: clean
@echo ====== Release preparation
$(RM) -r CVS *.plg *.opt opt.txt $(PROJECT_DIR)/*.opt *.ncb *.opt *.dsp *vcproj.*
dos2unix $(SOURCES) $(wildcard *.h*) $(wildcard *.hpp)
dos2unix $(SOURCES) $(wildcard *.sh) $(wildcard *.cpp) $(wildcard ?akefile*) $(wildcard *.txt)
chmod -x $(SOURCES) $(wildcard *.h*) $(wildcard *.cpp) $(wildcard ?akefile*) $(wildcard *.txt) $(wildcard *.vcproj)
chmod a+rw $(SOURCES) $(wildcard *.h*) $(wildcard *.cpp) $(wildcard ?akefile*) $(wildcard *.txt) $(wildcard *.vcproj)
chmod a-x $(SOURCES) $(wildcard *.h*) $(wildcard *.cpp) $(wildcard ?akefile*) $(wildcard *.txt) $(wildcard *.vcproj)
init:
[ x$(DESTTYPE) = xCOPYONLY ] && exit 0;\
if [ ! -d $(DEBUGDIR) ]; then \
mkdir $(DEBUGDIR) 2>/dev/null; \
fi;\
if [ ! -d $(RELDIR) ]; then \
mkdir $(RELDIR) 2>/dev/null; \
fi;\
exit 0;\
dep:
@echo ====== Dependencies regeneration
$(RM) depend.d*
echo $(DEPCOMMAND)
$(DEPCOMMAND)
$(CATCOMMAND)
$(RM) depend.d~
-include $(DEPFILE)