# 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 INCLUDED_CAPP = YES # # $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}) # LINK_TYPE (opt) (variant of linking command, eg C++ - defaults to C) # INSTTYPE (opt) (use "tool" or "app" to install executable vs application - defaults to "tool") # INSTALLAPPFILES (opt) (list of files to be installed in application directory - use InstRes specification rules) # INSTALLAPP_DEPEND (opt) (list of dependencies to be satisfied before doing application install - ${TARGET} assumed if in INSTALLAPPFILES) # CUSTOMLINK (opt) (set to "custom" to override the link rule) # CUSTOMINSTALLAPP (opt) (set to "custom" to override the install rule for resource files) # CUSTOMINSTALLTOOL (opt) (set to "custom" to override the install rule for target binary) # # # 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} APP_LIBS ?= ${LIBS} DBG_LIBS ?= ${LIBS} ifeq (C++,${LINK_TYPE}) APP_LIBS += ${C++LIB} DBG_LIBS += ${C++LIB} endif APP_LIBS += ${CLIB} DBG_LIBS += ${DEBUGLIBS} ${CLIB} APP_OBJS ?= $(addprefix o.,${OBJS}) APP_DBG_OBJS ?= $(addprefix od.,${DBG_OBJS}) ifeq ("${INCLUDED_STDTOOLS}","") ifeq ("${INCLUDED_HOSTTOOLS}","") include StdTools endif endif ifeq ("${INCLUDED_APPLIBS}","") include AppLibs endif ifeq ("${INCLUDED_APPSTDRULE}","") include AppStdRule endif ifeq ("${INCLUDED_DBGRULES}","") include DbgRules endif 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: install_${INSTTYPE} install_: install_tool ${NOP} INSTALLAPP_DEPEND += $(filter ${TARGET},${INSTALLAPPFILES}) install_app${CUSTOMINSTALLAPP}: ${INSTALLAPP_DEPEND} ${MKDIR} ${INSTAPP} ${INSTRES} -I Resources.${USERIF}.${LOCALE},Resources.${USERIF}.UK,Resources.${LOCALE},Resources.UK,Resources ${INSTAPP} ${INSTALLAPPFILES} ifneq (,$(filter Desc,${INSTALLAPPFILES})) ${CPREPRO} -I. ${INSTAPP}.Desc > ${INSTAPP}.DescTmp ${TIDYDESC} ${INSTAPP}.Desc ${INSTAPP}.DescTmp ${RM} ${INSTAPP}.DescTmp endif @${ECHO} ${COMPONENT}: application installation complete install_tool${CUSTOMINSTALLTOOL}: ${TARGET} ${MKDIR} ${INSTDIR} ${CP} ${TARGET} ${INSTDIR}.${TARGET} ${CPFLAGS} @${ECHO} ${COMPONENT}: tool installation complete debug: ${DBG_TARGET} @${ECHO} ${COMPONENT}: debug application built ${TARGET}${CUSTOMLINK}: ${APP_OBJS} ${APP_LIBS} ${DIRS} ${LD} ${LDFLAGS} -o ${TARGET} ${APP_OBJS} ${APP_LIBS} ${SQZ} ${SQZFLAGS} $@ ${DBG_TARGET}${CUSTOMLINK}: ${APP_DBG_OBJS} ${DBG_LIBS} ${DIRS} ${LD} ${LDFLAGS} ${LDDFLAGS} -o ${DBG_TARGET} ${APP_DBG_OBJS} ${DBG_LIBS} # EOF