## makeTarget.bsd - common portion of makefile for config/<target>

## Extra modules to be included in VxWorks.  These modules are not referred
##   in the VxWorks code, so they will not be automatically linked in
##   unless they are defined here explicitly.  Each -u pulls in one 
##   extra library module.
##
##	_setjmp		cALib		C support routines

EXTRA_MODULES = -u _setjmp

## tools

CC = $(CC_`'DEFCPU)
AS = $(AS_`'DEFCPU)
LD = $(LD_`'DEFCPU)

LN = ln -s
RM = rm -f
CP = cp -p
MV = mv -f

## flags

REL_TEXT_FLAG = -t
REL_DATA_FLAG = -d

## alternate file directory

H0        = $(ALL)

## flags and defines

INCLUDES  = -I. -I$(H0) -I$(H1) -I$(H2)
CFLAGS    = $(HOST_CFLAGS_`'DEFCPU) $(INCLUDES)
CASFLAGS  = -E $(INCLUDES) $(EVEN)
LINTFLAGS = -bun $(INCLUDES)

## files

# NOTE: sysALib.o must come first!
MACH_DEP = sysALib.o sysLib.o tyCoDrv.o $(MACH_EXTRA)

HOST_LIB = $(HOST_LIB_`'DEFCPU)

LL = $(LIB_`'DEFCPU)
LIBS = $(LL)$(VX_LIB) $(LL)$(CONFIG_LIB) $(LL)$(NET_LIB) $(LL)$(RPC_LIB) \
       $(LL)$(VX_LIB) $(LL)$(<KERN>_LIB) $(HOST_LIB)
LIBS_WIND = $(LL)$(VX_LIB) $(LL)$(CONFIG_LIB) $(LL)$(NET_LIB) \
	    $(LL)$(RPC_LIB) $(LL)$(VX_LIB) $(LL)$(WIND_LIB) $(HOST_LIB)

LINT_LIBS = $(LIB_LINT)$(VX_LN) $(LIB_LINT)$(NET_LN) $(LIB_LINT)$(<KERN>_LN)


master	: vrtx psos wind			### <DELETE_ME> ###
default : vxWorks
aux	: tags lint.wind
lint	: lib.lint
tags	: *.c $(H1)*.h
	  \@ $(RM) $@
	  $(TAGS) *.c $(H1)*.h


####################### machine dependent modules ##########################

romInit.o  : @
sysLib.o   : @
sysALib.o  : @
tyCoDrv.o  : @

configVrtx.o : @($(ALL)configVrtx.c)
	\@ $(RM) $@
	$(CC) -c $(CFLAGS) $(ALL)configVrtx.c

configPsos.o : @($(ALL)configPsos.c)
	\@ $(RM) $@
	$(CC) -c $(CFLAGS) $(ALL)configPsos.c

usrConfig.o : @($(ALL)usrConfig.c)
	\@ $(RM) $@
	$(CC) -c $(CFLAGS) $(ALL)usrConfig.c

usrConfig_st.o : @($(ALL)usrConfig.c)
	\@ $(RM) $@
	$(CC) -c -o $@ $(CFLAGS) -DSTANDALONE $(ALL)usrConfig.c

bootConfig.o : @($(ALL)bootConfig.c)
	\@ $(RM) $@
	$(CC) -c $(CFLAGS) $(ALL)bootConfig.c

lib.lint : $(ALL)bootConfig.c $(ALL)usrConfig.c sysLib.c tyCoDrv.c
	\@ $(RM) lib.lint
	- lint $(LINTFLAGS) $(ALL)bootConfig.c $(ALL)usrConfig.c \
		sysLib.c tyCoDrv.c $(LINT_LIBS) | \
	    sed -e '/copyright/d' 	\
		-e '/^[^ ]*:$$/d' 	\
		-e '/slex\.c.*: warning: statement not reached/d' >  \
		   lib.lint

####################### vxWorks ###########################################

# vxWorks       - normal vxWorks system
# vxWorks.sym	- symbol table of vxWorks
# vxWorks.st    - standalone vxWorks w/symbol table linked-in

vxWorks vxWorks.sym : usrConfig.o -KERN_CONF- $(MACH_DEP) $(LIBS)
	\@ $(RM) version.c version.o vxWorks vxWorks.sym
	sh $(BIN)makeVersion >version.c
	$(CC) -c $(CFLAGS) version.c
	$(LD) -o vxWorks -N -X -T $(RAM_START_ADRS) $(EXTRA_MODULES) \
	    -e _sysInit $(MACH_DEP) usrConfig.o -KERN_CONF- version.o $(LIBS)
	$(BIN)xsym <vxWorks > vxWorks.sym
	\@ $(RM) version.c version.o

vxWorks.st : usrConfig_st.o -KERN_CONF- $(MACH_DEP) $(LIBS)
	\@ $(RM) vxWorks.st version.c version.o symTbl.c symTbl.o
	sh $(BIN)makeVersion > version.c
	$(CC) -c $(CFLAGS) version.c
	$(LD) -o tmp.o -X -r $(EXTRA_MODULES) \
	    $(MACH_DEP) usrConfig_st.o -KERN_CONF- version.o $(LIBS)
	sh $(BIN)makeSymTbl tmp.o >symTbl.c
	$(CC) -c $(CFLAGS) symTbl.c
	$(LD) -o vxWorks.st -N -X -T $(RAM_START_ADRS) -e _sysInit \
	    tmp.o symTbl.o
	\@ $(RM) tmp.o version.c version.o

vxWorks_rom : romInit.o usrConfig.o -KERN_CONF- $(MACH_DEP) $(LIBS)
	\@ $(RM) vxWorks_rom version.c version.o
	sh $(BIN)makeVersion > version.c
	$(CC) -c $(CFLAGS) version.c
	$(LD) -o vxWorks_rom -X -rd -e _romInit romInit.o \
		usrConfig.o -KERN_CONF- $(MACH_DEP) version.o $(LIBS)
	\@ $(RM) version.c version.o
	\@ $(BIN)romsize bootrom 

vxWorks_rom.hex : vxWorks_rom
	\@ $(RM) $@
	$(BIN)relseg $(REL_FLAGS) vxWorks_rom
	$(BIN)hex $(HEX_FLAGS) rel.out >vxWorks_rom.hex
	\@ $(RM) rel.out

####################### bootrom ###########################################

# bootrom	- relocatable bootrom module
# bootrom.hex	- absolute hex format bootrom
#
# Note: bootroms are always made with WIND kernel because of size constraints

bootrom : romInit.o bootConfig.o $(MACH_DEP) $(LIBS_WIND)
	\@ $(RM) $@ version.c version.o
	sh $(BIN)makeVersion >version.c
	$(CC) -c $(CFLAGS) version.c
	$(LD) -o bootrom -X -rd -e _romInit romInit.o bootConfig.o version.o\
	    $(MACH_DEP) $(LIBS_WIND)
	\@ $(RM) version.c version.o
	\@ $(BIN)romsize bootrom 

bootrom.hex : bootrom
	\@ $(RM) $@
	$(BIN)relseg $(REL_FLAGS) bootrom
	$(BIN)hex $(HEX_FLAGS) rel.out >bootrom.hex
	\@ $(RM) rel.out


## <DELETE_TO_END> ##

####################### VRTX version #############################

vrtx		: Makefile.vrtx
		  \@ $(RM) vxWorks vxWorks.sym
		  -\@ $(MV) vxWorks_vrtx vxWorks
		  -\@ $(MV) vxWorks_vrtx.sym vxWorks.sym
	 	  $(MAKE) -f Makefile.vrtx vxWorks
		  \@ $(MV) vxWorks vxWorks_vrtx
		  \@ $(MV) vxWorks.sym vxWorks_vrtx.sym
		  $(LN) vxWorks_vrtx.sym vxWorks.sym
		  $(LN) vxWorks_vrtx vxWorks

st.vrtx		: Makefile.vrtx
		  \@ $(RM) vxWorks.st
		  $(MAKE) -f Makefile.vrtx vxWorks.st

rom.vrtx	: Makefile.vrtx
		  \@ $(RM) vxWorks_rom
		  $(MAKE) -f Makefile.vrtx vxWorks_rom.hex

lint.vrtx	: Makefile.vrtx
		  $(MAKE) -f Makefile.vrtx lint


Makefile.vrtx	: Makefile
		  \@ $(RM) $@
		  sed -e "s/<KERN>/VRTX/g" \
		      -e "s/-KERN_CONF-/configVrtx\.o/g" \
		      -e '/<DELETE_ME>/d' \
		      -e '/<DELETE_TO_END>/,$$ d' Makefile > $@

####################### PSOS version #############################

psos		: Makefile.psos
		  \@ $(RM) vxWorks vxWorks.sym
		  -\@ $(MV) vxWorks_psos vxWorks
		  -\@ $(MV) vxWorks_psos.sym vxWorks.sym
	 	  $(MAKE) -f Makefile.psos vxWorks
		  \@ $(MV) vxWorks vxWorks_psos
		  \@ $(MV) vxWorks.sym vxWorks_psos.sym
		  $(LN) vxWorks_psos.sym vxWorks.sym
		  $(LN) vxWorks_psos vxWorks

st.psos		: Makefile.psos
		  \@ $(RM) vxWorks.st
		  $(MAKE) -f Makefile.psos vxWorks.st

rom.psos	: Makefile.psos
		  \@ $(RM) vxWorks_rom
		  $(MAKE) -f Makefile.psos vxWorks_rom.hex

lint.psos	: Makefile.psos
		  $(MAKE) -f Makefile.psos lint


Makefile.psos	: Makefile
		  \@ $(RM) $@
		  sed -e "s/<KERN>/PSOS/g" \
		      -e "s/-KERN_CONF-/configPsos\.o/g" \
		      -e '/<DELETE_ME>/ d' \
		      -e '/<DELETE_TO_END>/,$$ d' Makefile > $@

####################### WIND version #############################

wind		: Makefile.wind
		  \@ $(RM) vxWorks vxWorks.sym
		  -\@ $(MV) vxWorks_wind vxWorks
		  -\@ $(MV) vxWorks_wind.sym vxWorks.sym
	 	  $(MAKE) -f Makefile.wind vxWorks
		  \@ $(MV) vxWorks vxWorks_wind
		  \@ $(MV) vxWorks.sym vxWorks_wind.sym
		  $(LN) vxWorks_wind vxWorks
		  $(LN) vxWorks_wind.sym vxWorks.sym

st.wind		: Makefile.wind
		  \@ $(RM) vxWorks.st
		  $(MAKE) -f Makefile.wind vxWorks.st

rom.wind	: Makefile.wind
		  \@ $(RM) vxWorks_rom
		  $(MAKE) -f Makefile.wind vxWorks_rom.hex

lint.wind	: Makefile.wind
		  $(MAKE) -f Makefile.wind lint


Makefile.wind	: Makefile
		  \@ $(RM) $@
		  sed -e "s/<KERN>/WIND/g" \
		      -e "s/-KERN_CONF-//g" \
		      -e '/<DELETE_ME>/ d' \
		      -e '/<DELETE_TO_END>/,$$ d' Makefile > $@
