# Copyright 2008 Castle Technology Ltd
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Makefile fragment for C and C++ applications
#
# $Id$
#
# This makefile provides the following phony targets:
#
#    all  install  debug
#
#
# This fragment uses the following macros set by the master makefile.
#
#
# COMPONENT          (the name of the component)
# TARGET       (opt) (the leafname of the application - otherwise ${COMPONENT})
# DBG_TARGET   (opt) (debug application leafname - otherwise ${TARGET}-D)
# INSTDIR      (opt) (the target directory - otherwise <Install$Dir>.${TARGET})
# DIRS         (opt) (stamp object for directory creation - otherwise o._dirs)
# OBJS         (opt) (object files, no o. prefixes - otherwise ${TARGET})
# DBG_OBJS     (opt) (debug build object files, no prefixes - otherwise ${OBJS})
# LIBS         (opt) (extra libraries; CLib is always used)
# DBG_LIBS     (opt) (extra debug libraries - otherwsie ${LIBS};
#                     CLib and DEBUGLIBS always used)
# APP_OBJS     (opt) (object files for application version - otherwise derived
#                     from ${OBJS})
# APP_DBG_OBJS (opt) (object files for debug app version - otherwise derived
#                     from ${DBG_OBJS})
#
#
# It relies on the following generic tool macros from the StdTools makefile
#
#
#�C + CFLAGS       (C compiler; CDFLAGS also used in debug builds; -g implicit)
# CP + CPFLAGS     (copy, cp etc.)
# WIPE + WFLAGS    (recursive delete)
# RM               (non-recursive delete)
# AS + ASFLAGS     (assembler)
# LD + LDFLAGS     (linker; LDDFLAGS also used in debug builds; -d implicit)
# SQZ + SQZFLAGS   (binary compressor)
# MKDIR            (cdir/mkdir -p)
# ECHO
# TOUCH            (create/touch)
#
#
# It relies on the following from the StdRules makefile
#
#
# .c.o  .c++.o  .cpp.o  .s.o
#
#
# It relies on the following from the DbgRules makefile
#
#
# CDFLAGS  C++DFLAGS  ASDFLAGS  LDDFLAGS
# .c.od  .c++.od  .cpp.od  .s.od
#
#

INSTALLDIR    = <Install$Dir>

TARGET       ?= ${COMPONENT}
DBG_TARGET   ?= ${TARGET}-D
INSTDIR      ?= ${INSTALLDIR}.${TARGET}
DIRS         ?= o._dirs
OBJS         ?= ${TARGET}
DBG_OBJS     ?= ${OBJS}
DBG_LIBS     ?= ${LIBS}
LIBS         += ${CLIB}
DBG_LIBS     += ${DEBUGLIBS} ${CLIB}
APP_OBJS     ?= $(addprefix o.,${OBJS})
APP_DBG_OBJS ?= $(addprefix od.,${DBG_OBJS})

all: ${TARGET}
        @${ECHO} ${COMPONENT}: application built

${DIRS} ::
        ${MKDIR} o
        ${MKDIR} od
        ${TOUCH} $@

clean ::
        @IfThere o  Then ${ECHO} ${WIPE} o ${WFLAGS}
        @IfThere o  Then ${WIPE} o ${WFLAGS}
        @IfThere od Then ${ECHO} ${WIPE} od ${WFLAGS}
        @IfThere od Then ${WIPE} od ${WFLAGS}
        ${RM} ${TARGET}
        ${RM} ${DBG_TARGET}
        @${ECHO} ${COMPONENT}: cleaned

install: ${TARGET}
        ${MKDIR} ${INSTDIR}
        ${CP} ${TARGET} ${INSTDIR}.${TARGET} ${CPFLAGS}
        @${ECHO} ${COMPONENT}: application installation complete

debug: ${DBG_TARGET}
        @${ECHO} ${COMPONENT}: debug application built

${TARGET}: ${APP_OBJS} ${LIBS} ${DIRS}
        ${LD} ${LDFLAGS} -o ${TARGET} ${APP_OBJS} ${LIBS}
        ${SQZ} ${SQZFLAGS} $@

${DBG_TARGET}: ${APP_DBG_OBJS} ${DBG_LIBS} ${DIRS}
        ${LD} ${LDFLAGS} ${LDDFLAGS} -o ${DBG_TARGET} ${APP_DBG_OBJS} ${DBG_LIBS}

# EOF