# 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++ modules INCLUDED_CMODULE = YES # # $Id$ # # This makefile provides the following phony targets: # # all # export export_hdrs export_libs # resources # rom rom_link # standalone install # debug gpa_debug # prepro # clean # # # This fragment uses the following macros set by the master makefile. # # # COMPONENT (the name of the component) # TARGET (opt) (the leafname of the module - otherwise ${COMPONENT}) # ROM_TARGET (opt) (partially linked module leafname - otherwise ${TARGET} in aof) # LNK_TARGET (opt) (fixed-position module leafname - otherwise ${TARGET} in linked) # SA_TARGET (opt) (standalone module leafname - otherwise ${TARGET} in rm) # DBG_TARGET (opt) (debug module leafname - otherwise ${TARGET}D in rm) # AIF_TARGET (opt) (GPA-intermediate leafname - otherwise ${TARGET} in aif) # GPA_TARGET (opt) (GPA debug leafname - otherwise ${TARGET} in gpa) # INSTDIR (opt) (the target directory - otherwise <Install$Dir>) # C_EXP_HDR (opt) (C header target directory - otherwise <cexport$dir>.Interface.h) # EXP_HDR (opt) (assembly header target directory - otherwise <export$dir> # DIRS (opt) (stamp object for directory creation - otherwise o._dirs) # HDRS (opt) (C header files to export, no h. prefix - otherwise ${TARGET}) # ASMHDRS (opt) (assembly header files to export, no Hdr. prefix - otherwise none) # ASMCHDRS (opt) (C-from-assembly auto-generated header files to export, no Hdr. prefix - otherwise none) # INSTRES_FILES (opt) (extra resource files in addition to Messages - use InstRes specification rules) # INSTRAM_FILES (opt) (RAM build specific resources - otherwise ${INSTRES_FILES}) # INSTROM_FILES (opt) (ROM build specific resources - otherwise ${INSTRES_FILES}) # INSTR??_DEPENDS (opt) (any extra dependency to assert on INSTRES/INSTRAM/INSTROM_FILES) # MERGEDRDIR (r/o) (directory for generating exported resources, for information only) # MERGEDMSGS (r/o) (leafname of generated Messages file, for compatibility with AAsmModule) # RESFSDIR (opt) (actual directory to export resources to - otherwise ${RESDIR}.${TARGET}) # RES_AREA (opt) (area name to use for embedded messages in standalone build - otherwise Resources) # RES_OBJ (opt) (object file for embedded messages in standalone build, no o.prefix - otherwise ${TARGET}Msgs) # RES_PATH (opt) (path relative to ResourceFS root to be suffixed by ${TARGET} - otherwise Resources) # CMHGFILE (opt) (name of CMHG source file, no cmhg. prefix - otherwise ${TARGET}Hdr) # CMHGAUTOHDR (opt) (header file, if any, from HDRS or ASMCHDRS, to which to append the SWI defines from CMHG) # CMHGFILE_SWIPREFIX (opt) (name of SWI prefix used in CMHG file - otherwise ${TARGET}) # OBJS (opt) (object files, no o. prefixes - otherwise ${TARGET} ${CMHGFILE}) # ROM_OBJS (opt) (ROM build objects - otherwise ${OBJS}) # SA_OBJS (opt) (standalone build objects - otherwise ${OBJS}) # DBG_OBJS (opt) (debug build object files, no prefixes - otherwise ${OBJS}) # LIBS (opt) (extra libraries; ${CLIB} is always used) # ROM_LIBS (opt) (libraries to link for ROM targets - otherwise ${LIBS}) # SA_LIBS (opt) (libraries to link for standalone targets - otherwise ${LIBS}) # DBG_LIBS (opt) (extra debug libraries in addition to SA_LIBS and DEBUGLIBS) # ROM_DEPEND (opt) (any extra dependency to assert on ROM_TARGET) # SA_DEPEND (opt) (any extra dependency to assert on SA_TARGET and DBG_TARGET) # CUSTOMEXP (opt) (set to "custom" to override the export rules) # CUSTOMRES (opt) (set to "custom" to override the resources rules, or "no" for no resources) # CUSTOMROM (opt) (set to "custom" to override the rom rules) # CUSTOMSA (opt) (set to "custom" to override the standalone rules) # CUSTOMDBG (opt) (set to "custom" to override the debug rules) # CUSTOMGPA (opt) (set to "custom" to override the GPA rules) # RAMCDEFINES (opt) (additions to CDEFINES for RAM builds - requires ModStdRule to be included later) # ROMCDEFINES (opt) (additions to CDEFINES for ROM builds - requires ModStdRule to be included later) # RAMASMDEFINES (opt) (additions to ASMDEFINES for RAM builds - requires ModStdRule to be included later) # ROMASMDEFINES (opt) (additions to ASMDEFINES for ROM builds - requires ModStdRule to be included later) # CMHGDEPENDS (opt) (source files which need to include the .h file autogenerated from the CMHG file) # # # It relies on the following from the build system: # # # PHASE (export phase discriminator) # CMDHELP (whether star command help/syntax strings are included) # RESDIR (installation directory for resources - cf. RESFSDIR) # FORCEROMLINK (set to force a relink of the ROM target, used in BBE) # LINKDIR (installation directory for LNK_TARGET) # ADDRESS (base address for LNK_TARGET) # INSERTVERSION (awk script to substitute from VersionNum) # # # 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) # LDRAMFLAGS (more linker flags) # LDROMFLAGS (more linker flags) # LDLINKFLAGS (flags for the rom_link phase) # MODSQZ + MODSQZFLAGS (module binary compressor) # CHMOD # MKDIR (cdir/mkdir -p) # ECHO # TOUCH (create/touch) # TOKENCHECK # RESGEN # TOGPA # # # It relies on the following from the StdRules makefile # # # .c.o .c++.o .cpp.o .s.o # # # It relies on the following from the ModStdRule makefile # # # .cmhg.h .cmhg.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> EXPDIR = <export$dir> CEXPDIR = <cexport$dir> TARGET ?= ${COMPONENT} ROM_TARGET ?= ${TARGET} LNK_TARGET ?= ${TARGET} SA_TARGET ?= ${TARGET} DBG_TARGET ?= ${TARGET}D AIF_TARGET ?= ${TARGET} GPA_TARGET ?= ${TARGET} INSTDIR ?= ${INSTALLDIR} C_EXP_HDR ?= ${CEXPDIR}.Interface.h EXP_HDR ?= ${EXPDIR} DIRS ?= o._dirs HDRS ?= ${TARGET} ASMHDRS ?= ASMCHDRS ?= INSTRAM_FILES ?= ${INSTRES_FILES} INSTRAM_DEPENDS ?= ${INSTRES_DEPENDS} INSTROM_FILES ?= ${INSTRES_FILES} INSTROM_DEPENDS ?= ${INSTRES_DEPENDS} MERGEDRDIR ?= o._ResData_ MERGEDMSGS ?= ${MERGEDRDIR}.${TARGET}.Messages RES_AREA ?= Resources RES_OBJ ?= ${TARGET}Msgs RES_PATH ?= Resources RESFSDIR ?= ${RESDIR}.${TARGET} CMHGFILE ?= ${TARGET}Hdr CMHGFILE_SWIPREFIX ?= ${TARGET} OBJS ?= ${TARGET} ROM_OBJS ?= ${OBJS} SA_OBJS ?= ${OBJS} DBG_OBJS ?= ${OBJS} ROM_OBJS += ${CMHGFILE} SA_OBJS += ${CMHGFILE} DBG_OBJS += ${CMHGFILE} ifeq ($(filter no custom,${CUSTOMRES}),) RESDIR ?= ${MERGEDRDIR} # Place to internally collect up contents of RES_OBJ SA_OBJS += ${RES_OBJ} DBG_OBJS += ${RES_OBJ} endif ROM_LIBS ?= ${LIBS} SA_LIBS ?= ${LIBS} ROM_LIBS += ${ROMCSTUBS} ROM_SYMS = ${C_ABSSYM} SA_LIBS += ${CLIB} DBG_LIBS += ${DEBUGLIBS} ROM_OBJS_ = $(addprefix o.,${ROM_OBJS}) SA_OBJS_ = $(addprefix o.,${SA_OBJS}) DBG_OBJS_ = $(addprefix od.,${DBG_OBJS}) PP_OBJS_ = $(addprefix i.,$(filter-out ${CMHGFILE} ${RES_OBJ},${DBG_OBJS})) EXPORTING_HDRS = $(addprefix exphdr.,${HDRS}) EXPORTING_ASMHDRS = $(addprefix expasm.,${ASMHDRS}) EXPORTING_ASMCHDRS = $(addprefix expasmc.,${ASMCHDRS}) ifeq ($(filter rom%,${MAKECMDGOALS}),) CDEFINES += ${RAMCDEFINES} ASMDEFINES += ${RAMASMDEFINES} RES_FILES_ = ${INSTRAM_FILES} RES_DEPENDS_ = ${INSTRAM_DEPENDS} else CDEFINES += ${ROMCDEFINES} ASMDEFINES += ${ROMASMDEFINES} RES_FILES_ = ${INSTROM_FILES} RES_DEPENDS_ = ${INSTROM_DEPENDS} endif ifneq ($(filter debug%,${MAKECMDGOALS}),) CMHGFLAGS += ${CMHGDFLAGS} # Affects both object and header generation endif ifeq ("${INCLUDED_STDTOOLS}","") include StdTools endif ifeq ("${INCLUDED_MODULELIBS}","") include ModuleLibs endif CFLAGS := -zM -zps1 ${CFLAGS} ifeq ("${INCLUDED_MODSTDRULE}","") include ModStdRule endif ifeq ("${INCLUDED_DBGRULES}","") include DbgRules endif # # General rules # all: aof.${ROM_TARGET} rm.${SA_TARGET} rm.${DBG_TARGET} @${ECHO} ${COMPONENT}: all built ${DIRS} :: ${MKDIR} aif ${MKDIR} aof ${MKDIR} i ${MKDIR} linked ${MKDIR} gpa ${MKDIR} o ${MKDIR} od ${MKDIR} rm ${TOUCH} $@ # # Clean the module # clean :: @IfThere aif Then ${ECHO} ${WIPE} aif ${WFLAGS} @IfThere aif Then ${WIPE} aif ${WFLAGS} @IfThere aof Then ${ECHO} ${WIPE} aof ${WFLAGS} @IfThere aof Then ${WIPE} aof ${WFLAGS} @IfThere i Then ${ECHO} ${WIPE} i ${WFLAGS} @IfThere i Then ${WIPE} i ${WFLAGS} @IfThere linked Then ${ECHO} ${WIPE} linked ${WFLAGS} @IfThere linked Then ${WIPE} linked ${WFLAGS} @IfThere gpa Then ${ECHO} ${WIPE} gpa ${WFLAGS} @IfThere gpa Then ${WIPE} gpa ${WFLAGS} @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} @IfThere rm Then ${ECHO} ${WIPE} rm ${WFLAGS} @IfThere rm Then ${WIPE} rm ${WFLAGS} @IfThere h.${CMHGFILE} Then ${ECHO} ${RM} h.${CMHGFILE} @IfThere h.${CMHGFILE} Then ${RM} h.${CMHGFILE} @${ECHO} ${COMPONENT}: cleaned # # Export phases # export${CUSTOMEXP}: export_${PHASE} @${NOP} export_: export_libs export_hdrs @${NOP} create_exp_hdr_dirs: ${MKDIR} ${C_EXP_HDR} ${MKDIR} ${EXP_HDR} ifneq (${CMHGFILE},) o._h_${CMHGAUTOHDR}: h.${CMHGFILE} ${DIRS} ${DO} ${AWK} -- "/.ifndef ${CMHGFILE_SWIPREFIX}/,/endif/" h.${CMHGFILE} > o._h_${CMHGAUTOHDR} endif ifneq ($(findstring ${CMHGAUTOHDR},${HDRS}),) exphdr.${CMHGAUTOHDR}: h.${CMHGAUTOHDR} o._h_${CMHGAUTOHDR} ${FAPPEND} ${C_EXP_HDR}.${CMHGAUTOHDR} h.${CMHGAUTOHDR} o._h_${CMHGAUTOHDR} endif ifneq ($(findstring ${CMHGAUTOHDR},${ASMCHDRS}),) expasmc.${CMHGAUTOHDR}: hdr.${CMHGAUTOHDR} o._h_${CMHGAUTOHDR} ${HDR2H} hdr.${CMHGAUTOHDR} ${C_EXP_HDR}.${CMHGAUTOHDR} ${FAPPEND} ${C_EXP_HDR}.${CMHGAUTOHDR} ${C_EXP_HDR}.${CMHGAUTOHDR} o._h_${CMHGAUTOHDR} endif ifneq (${CMHGDEPENDS},) CMHGDEPENDS_ = $(addprefix o.,${CMHGDEPENDS}) $(addprefix od.,${CMHGDEPENDS}) $(addprefix i.,${CMHGDEPENDS}) ${CMHGDEPENDS_}: h.${CMHGFILE} endif .SUFFIXES: .exphdr .expasm .expasmc .h .hdr .h.exphdr:; @${ECHO} ${CP} $< ${C_EXP_HDR}.$(subst h.,,$<) ${CPFLAGS} ; ${CP} $< ${C_EXP_HDR}.$(subst h.,,$<) ${CPFLAGS} .hdr.expasm:; @${ECHO} ${CP} $< ${EXP_HDR}.$(subst hdr.,,$<) ${CPFLAGS} ; ${CP} $< ${EXP_HDR}.$(subst hdr.,,$<) ${CPFLAGS} .hdr.expasmc:; @${ECHO} ${HDR2H} $< ${C_EXP_HDR}.$(subst hdr.,,$<) ; ${HDR2H} $< ${C_EXP_HDR}.$(subst hdr.,,$<) export_hdrs${CUSTOMEXP}: ${EXPORTING_ASMCHDRS} ${EXPORTING_ASMHDRS} ${EXPORTING_HDRS} ${DIRS} create_exp_hdr_dirs @${ECHO} ${COMPONENT}: header export complete export_libs${CUSTOMEXP}: @${ECHO} ${COMPONENT}: no exported libraries # # Resources rules # resources${CUSTOMRES}:: resources-${CMDHELP} @${ECHO} ${COMPONENT}: resources copied to Messages module ifeq (${CUSTOMRES},no) resources: @${ECHO} ${COMPONENT}: no resources to export endif resources_extra: ${RES_DEPENDS_} ifneq (${RES_FILES_},) ${INSTRES} -I Resources.${USERIF}.${LOCALE},Resources.${USERIF}.UK,Resources.${LOCALE},Resources.UK,Resources ${RESFSDIR} ${RES_FILES_} endif ifneq (,$(filter Messages,${INSTRES_VERSION})) ${INSERTVERSION} ${RESFSDIR}.Messages > ${RESFSDIR}._Awk_ ${CP} ${RESFSDIR}._Awk_ ${RESFSDIR}.Messages ${CPFLAGS} ${RM} ${RESFSDIR}._Awk_ endif @${NOP} resources_common: ${MKDIR} ${RESFSDIR} ${TOKENCHECK} LocalRes:Messages ${CP} LocalRes:Messages ${RESFSDIR}.Messages ${CPFLAGS} resources_cmdhelp: IfThere LocalRes:CmdHelp Then ${TOKENCHECK} LocalRes:CmdHelp IfThere LocalRes:CmdHelp Then ${FAPPEND} ${RESFSDIR}.Messages LocalRes:Messages LocalRes:CmdHelp resources-None: resources_extra resources_common @${NOP} resources-: resources_extra resources_cmdhelp resources_common @${NOP} o.${RES_OBJ}: resources-${CMDHELP} ${DIRS} ${INSTVIARG} ${MERGEDRDIR} ${RES_PATH} o._ResGen_ ${RESGEN} ${RES_AREA} $@ -via o._ResGen_ od.${RES_OBJ}: o.${RES_OBJ} ${CP} o.${RES_OBJ} $@ ${CPFLAGS} # # ROM build rules # rom${CUSTOMROM}: aof.${ROM_TARGET} @${ECHO} ${COMPONENT}: rom module built rom_link${CUSTOMROM}: linked.${LNK_TARGET} ${CP} linked.${LNK_TARGET} ${LINKDIR}.${TARGET} ${CPFLAGS} ${CP} linked.${LNK_TARGET}_sym ${LINKDIR}.${TARGET}_sym ${CPFLAGS} @${ECHO} ${COMPONENT}: rom_link complete aof.${ROM_TARGET}: ${ROM_OBJS_} ${ROM_LIBS} ${DIRS} ${ROM_DEPEND} ${LD} -o $@ -aof ${ROM_OBJS_} ${ROM_LIBS} linked.${LNK_TARGET}: aof.${ROM_TARGET} ${ROM_SYMS} ${FORCEROMLINK} ${LD} ${LDFLAGS} ${LDLINKFLAGS} -o $@ -rmf -base ${ADDRESS} aof.${ROM_TARGET} ${ROM_SYMS} -Symbols linked.${LNK_TARGET}_sym # # Standalone rules # install${CUSTOMSA}: rm.${SA_TARGET} ${MKDIR} ${INSTDIR} ${CP} rm.${SA_TARGET} ${INSTDIR}.${TARGET} ${CPFLAGS} @${ECHO} ${COMPONENT}: ram module installed standalone${CUSTOMSA}: rm.${SA_TARGET} @${ECHO} ${COMPONENT}: ram module built debug${CUSTOMDBG}: rm.${DBG_TARGET} @${ECHO} ${COMPONENT}: debug module built gpa_debug${CUSTOMGPA}: gpa.${GPA_TARGET} @${ECHO} ${COMPONENT}: GPA debug built prepro: ${PP_OBJS_} ${DIRS} @${ECHO} ${COMPONENT}: sources preprocessed rm.${SA_TARGET}: ${SA_OBJS_} ${SA_LIBS} ${DIRS} ${SA_DEPEND} ${LD} ${LDFLAGS} ${LDRAMFLAGS} -o $@ -rmf ${SA_OBJS_} ${SA_LIBS} ${MODSQZ} ${MODSQZFLAGS} $@ ${CHMOD} -R a+rx rm rm.${DBG_TARGET}: ${DBG_OBJS_} ${DBG_LIBS} ${SA_LIBS} ${DIRS} ${SA_DEPEND} ${LD} ${LDFLAGS} ${LDRAMFLAGS} -o $@ -rmf ${DBG_OBJS_} ${DBG_LIBS} ${SA_LIBS} ${CHMOD} -R a+rx rm gpa.${GPA_TARGET}: aif.${AIF_TARGET} ${TOGPA} -s aif.${AIF_TARGET} $@ aif.${AIF_TARGET}: rm.${DBG_TARGET} ${LD} -aif -bin -d -o aif.${AIF_TARGET} ${DBG_OBJS_} ${DBG_LIBS} ${SA_LIBS} # EOF