# 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) # INSTAPP (opt) (the application target directory - otherwise ${INSTDIR}.!${COMPONENT}) # 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}) # APP_OBJS (opt) (release build object files, no prefixes - otherwise ${OBJS}) # DBG_OBJS (opt) (debug build object files, no prefixes - otherwise ${OBJS}) # LIBS (opt) (extra libraries; ${CLIB} is always used) # APP_LIBS (opt) (extra release libraries - otherwise ${LIBS}; ${CLIB} is always used) # DBG_LIBS (opt) (extra debug libraries - otherwise ${LIBS}; ${CLIB} and ${DEBUGLIBS} always used) # 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") # INSTAPP_FILES (opt) (list of files to be installed in application directory - use InstRes specification rules) # INSTAPP_DEPENDS (opt) (list of dependencies to be satisfied before doing application install - ${TARGET} assumed if in INSTAPP_FILES) # INSTAPP_VERSION (opt) (list of Messages/!Run/Desc files to insert app version from VersionNum - include in INSTAPP_FILES as well) # 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) # CUSTOMINSTALLDBGAPP (opt) (set to "custom" to override the install rule for debug resources) # # # 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) # INSERTVERSION (awk script to substitute from VersionNum) # CHMOD (file permission manipulation) # # # 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} INSTAPP ?= ${INSTDIR}.!${COMPONENT} DIRS ?= o._dirs OBJS ?= ${TARGET} APP_OBJS ?= ${OBJS} 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.,${APP_OBJS}) 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} INSTAPP_DEPENDS += $(filter ${TARGET},${INSTAPP_FILES}) install_app${CUSTOMINSTALLAPP}: ${INSTAPP_DEPENDS} ${MKDIR} ${INSTAPP} ${INSTRES} -I Resources.${USERIF}.${LOCALE},Resources.${USERIF}.UK,Resources.${LOCALE},Resources.UK,Resources ${INSTAPP} ${INSTAPP_FILES} ifneq (,$(filter Messages,${INSTAPP_VERSION})) ${CHMOD} +w ${INSTAPP}.Messages ${INSERTVERSION} LocalRes:Messages > ${INSTAPP}.Messages endif ifneq (,$(filter Desc,${INSTAPP_VERSION})) ${CHMOD} +w ${INSTAPP}.Desc ${INSERTVERSION} descmode=1 LocalRes:Desc > ${INSTAPP}.Desc endif ifneq (,$(filter !Run,${INSTAPP_VERSION})) ${CHMOD} +w ${INSTAPP}.!Run ${INSERTVERSION} obeymode=1 LocalRes:!Run > ${INSTAPP}.!Run ${SETTYPE} ${INSTAPP}.!Run Obey endif @${ECHO} ${COMPONENT}: application installation complete install_debug_app${CUSTOMINSTALLDBGAPP}: ${DBG_TARGET} install_app ${CP} ${DBG_TARGET} ${INSTAPP}.${TARGET} ${CPFLAGS} @${ECHO} ${COMPONENT}: ${TARGET} replaced with ${DBG_TARGET} 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}: ${DBG_OBJS_} ${DBG_LIBS} ${DIRS} ${LD} ${LDFLAGS} ${LDDFLAGS} -o ${DBG_TARGET} ${DBG_OBJS_} ${DBG_LIBS} # EOF