# Common Makefile fragment for toolbox object modules
#
# $Id$
#

#
# Our aim if not known
#
TARGET ?= ${COMPONENT}

#
# Export Paths for Messages module
#
RESDIR = <resource$dir>.Resources2.${TARGET}

#
# Standard internal toolbox library and headers
#
TBOXINTLIBDIR = C:tboxlibint
TBOXINTLIB    = ${TBOXINTLIBDIR}.o.tboxlibm
TBOXINTHDR    = -I${TBOXINTLIBDIR}

#
# Build options
#
CFLAGS    += -zm -zps1 -ffah -D${SYSTEM}
CINCLUDES += ${TBOXINTHDR} -Itbox: -IC:
CDFLAGS   += -Ddebugging=1
ASDFLAGS  += -PD "debugging SETA 1"

#
# Libraries
#
include Makefiles:ModuleLibs
RAM_LIBS = ${TBOXINTLIB} ${EXTRARAMLIBS}
ROM_LIBS = ${TBOXINTLIB} ${EXTRAROMLIBS}

#
# Find the rest of the Makefile fragments for C modules
#
include Makefiles:StdTools
include Makefiles:DbgRules
include Makefiles:ModStdRule

#
# Toolbox modules hold just a Messages file, just a Res file or both.
# Thus we provide three rules, and the including makefile simply selects one
# or other of the rules as appropriate.
#
resources-messages: LocalRes:Messages
	${MKDIR} ${RESDIR}
	${CP} LocalRes:Messages ${RESDIR}.Messages ${CPFLAGS}

resources-res: LocalRes:Res
	${MKDIR} ${RESDIR}
	${CP} LocalRes:Res ${RESDIR}.Res ${CPFLAGS}

resources-both: LocalRes:Messages LocalRes:Res
	${MKDIR} ${RESDIR}
	${CP} LocalRes:Messages ${RESDIR}.Messages ${CPFLAGS}
	${CP} LocalRes:Res      ${RESDIR}.Res      ${CPFLAGS}


#
# Provide defaults so that the rules below are valid
#
RAMMESSAGES .= unused.ram.messages
RAMRES      .= unused.ram.resources
RAMBOTH     .= unused.ram.both

#
# RAM builds require the resources in a ResourceFS registerable area
#
${RAMMESSAGES}: LocalRes:Messages
	resgen messages_file $@ LocalRes:Messages Resources.${COMPONENT}.Messages

${RAMRES}: LocalRes:Res
	resgen res_file $@ LocalRes:Res Resources.${COMPONENT}.Res

${RAMBOTH}: LocalRes:Messages LocalRes:Res
	resgen messages_file $@ \
        LocalRes:Messages Resources.${COMPONENT}.Messages \
        LocalRes:Res Resources.${COMPONENT}.Res

#
# The clean rules are relatively similar too:
#
toolbox-clean:
	${WIPE} o.* ${WFLAGS}
	${WIPE} od ${WFLAGS}
	${WIPE} aof ${WFLAGS}
	${WIPE} rm ${WFLAGS}
	${WIPE} linked ${WFLAGS}
	${WIPE} map ${WFLAGS}

#
# Typically, the ROM and RAM modules will be identical except for main.c
# which will switch on the ROM symbol to not register resources.  We provide
# this rule generically here.
#
o.mainROM: main.c
	$(CC) ${CFLAGS} -DROM -o $@ main.c

#
# Builds of modules
#
DBG_MODULE .= rm.D${TARGET}
DBG_OBJS   .= ${RAM_OBJS}
DBG_LIBS   .= ${RAM_LIBS} C:tboxlibint.o.debuglibm ${DEBUGLIBS} ${NET4LIBS}
ROM_MODULE .= aof.${TARGET}
ABS_MODULE .= linked.${TARGET}
RAM_MODULE .= rm.${TARGET}
DIRS       .= o._dirs

${DBG_MODULE}: ${DBG_OBJS} ${DBG_LIBS} ${CLIB} ${RAM_DEPEND} ${DIRS}
	${LD} ${LDFLAGS} ${LDRAMFLAGS} -o $@ -rmf ${DBG_OBJS} ${DBG_LIBS} ${CLIB}

${RAM_MODULE}: ${RAM_OBJS} ${RAM_LIBS} ${CLIB} ${RAM_DEPEND} ${DIRS}
	${LD} ${LDFLAGS} ${LDRAMFLAGS} -o $@ -rmf ${RAM_OBJS} ${ROM_LIBS} ${CLIB}

${ROM_MODULE}: ${ROM_OBJS} ${ROM_LIBS} ${ROM_DEPEND} ${DIRS}
	${LD} ${LDFLAGS} ${LDLINKFLAGS} -o $@ -aof ${ROM_OBJS} ${ROM_LIBS} ${ROMCSTUBS}

trace: ${DBG_MODULE} ${DIRS}
	@echo ${COMPONENT}: debug module built

install: ${RAM_MODULE} ${DIRS}
	${MKDIR} ${INSTDIR}
	${CP} ${RAM_MODULE} ${INSTDIR}.${TARGET} ${CPFLAGS}
	@${ECHO} ${COMPONENT}: ram module installed

all: ${RAM_MODULE} ${DIRS}
	@${ECHO} ${COMPONENT}: ram module built

rom: ${ROM_MODULE} ${DIRS}
	@${ECHO} ${COMPONENT}: rom module built

rom_link: ${DIRS} ${ROM_MODULE} ${C_ABSSYM}
	${LD} ${LDFLAGS} ${LDLINKFLAGS} -o ${ABS_MODULE} -rmf -base ${ADDRESS} ${ROM_MODULE} ${C_ABSSYM} -Symbols ${ABS_MODULE}_sym
	${CP} ${ABS_MODULE} ${LINKDIR}.${TARGET} ${CPFLAGS}
	${CP} ${ABS_MODULE}_sym ${LINKDIR}.${TARGET}_sym ${CPFLAGS}
	@${ECHO} ${COMPONENT}: rom_link complete

${DIRS}:
	${MKDIR} od
	${MKDIR} o
	${MKDIR} rm
	${MKDIR} linked
	${MKDIR} aof
	${TOUCH} $@

EOFTboxMakefile=Common.TboxMake
# EOF