#{{{  File banner
# @(#)=====================================================
# @(#)  Project : PUMA ESPRIT P2701
# @(#)  Authors : Mark Debbage and Mark Hill
# @(#)            University of Southampton
#  
# @(#)    Title : VCR makefile
# @(#)   System : VCR
# @(#) Filename : makefile
# @(#)  Version : 1.11
# @(#)     Date : 11/12/92
# @(#)====================================================
#}}}

#{{{  Select these for UNIX
S=/
O=-
COPY=cp
ECHO=echo
TR=tr $Ocs '_./A-Za-z0-9' '\012'
VROOT.LNK=$(ECHO) $(VROOT) | $(TR) > $(LIBS)$(S)vroot.lnk
VNODE.LNK=$(ECHO) $(VNODE) | $(TR) > $(LIBS)$(S)vnode.lnk
UPRILIB.LNK=$(ECHO) $(UPRILIB) | $(TR) > $(LIBS)$(S)uprilib.lnk
VCRLIB.LNK=$(ECHO) $(VCRLIB) | $(TR) > $(LIBS)$(S)vcrlib.lnk
VPILIB.LNK=$(ECHO) $(VPILIB) | $(TR) > $(LIBS)$(S)vpilib.lnk
DELETE=rm
#}}}
#{{{  Select these for MSDOS
# Select these for MSDOS :
#S=\ # Pathname seperator (this comment is necessary!)
#O=/
#COPY=copy
#VROOT.LNK=ECHO.MACRO $(VROOT) > $(LIBS)$(S)vroot.lnk
#VNODE.LNK=ECHO.MACRO $(VNODE) > $(LIBS)$(S)vnode.lnk
#UPRILIB.LNK=ECHO.MACRO $(UPRILIB) > $(LIBS)$(S)uprilib.lnk
#VCRLIB.LNK=ECHO.MACRO $(VCRLIB) > $(LIBS)$(S)vcrlib.lnk
#VPILIB.LNK=ECHO.MACRO $(VPILIB) > $(LIBS)$(S)vpilib.lnk
#DELETE=del
#}}}
#{{{  Select Make Modes
# Select one of these MODEs on command-line to switch makefile functionality

MODE=dload        # Compile up dynamically loaded VCR, all versions (default)
#MODE=dload0       # Compile up dynamically loaded VCR, host link 0 only
#MODE=dload1       # Compile up dynamically loaded VCR, host link 1 only
#MODE=dload2       # Compile up dynamically loaded VCR, host link 2 only
#MODE=dload3       # Compile up dynamically loaded VCR, host link 3 only
#MODE=lib          # Compiles up library units only
#MODE=sload        # Compile up statically loaded VCR
#MODE=hpr          # Compile up an HPR topology

# Override these on command-line to specify a static topology
TARGET=unknown
HTARGET=hunknown
#}}}
#{{{  Select Extra modules
EXTRA=$ODCALLOTHERS  # Access point to compile up extra layers and call from vmain
EXTRAROOT= $(LIBS)$(S)vpi.tco $(LIBS)$(S)vpmain.tco $(LIBS)$(S)uchan.tco $(LIBS)$(S)schan.tax $(LIBS)$(S)threads.tax
EXTRANODE= $(LIBS)$(S)vpi.tco $(LIBS)$(S)vpmainrd.tco $(LIBS)$(S)uchan.tco $(LIBS)$(S)schan.tax $(LIBS)$(S)threads.tax
EXTRALIB=  $(LIBS)$(S)upri.lib $(LIBS)$(S)vpi.lib
#}}}

#{{{  Directories
DLOADER=..$(S)source$(S)dloader
SLOADER=..$(S)source$(S)sloader
ROUTER=..$(S)source$(S)router
VCRSRC=..$(S)source$(S)vcr
HPRSRC=..$(S)source$(S)hpr
VPISRC=..$(S)source$(S)vpi
LIBS=..$(S)libs
NETWORKS=..$(S)nets
TMP=.
#}}}
#{{{  File groupings
# Modules for VCR root node (kernel first for fast RAM)
VROOT=  $(LIBS)$(S)kernel.tco   $(LIBS)$(S)netload.tco 	$(LIBS)$(S)neterr.tco $(LIBS)$(S)transprt.tco\
	$(LIBS)$(S)netshow.tco  $(LIBS)$(S)input.tco 	$(LIBS)$(S)output.tco \
	$(LIBS)$(S)inputs.tco	$(LIBS)$(S)outputs.tco  $(LIBS)$(S)inputd.tco \
	$(LIBS)$(S)outputd.tco  $(LIBS)$(S)inputsd.tco  $(LIBS)$(S)outputsd.tco \
	$(LIBS)$(S)router.tco 	$(LIBS)$(S)pktio.tco	$(LIBS)$(S)port.tco \
	$(LIBS)$(S)uprctrl.tco 	$(LIBS)$(S)except.tco	$(LIBS)$(S)show.tco \
	$(LIBS)$(S)vchan.tco 	$(LIBS)$(S)vinit.tco	$(LIBS)$(S)vmain.tco \
	$(LIBS)$(S)vcrctrl.tco	$(LIBS)$(S)vserver.tco  $(LIBS)$(S)vparse.tco \
	$(LIBS)$(S)vshow.tco 	$(LIBS)$(S)vhost.tco 	$(LIBS)$(S)vmapping.tco \
	$(LIBS)$(S)vrpc.tco	$(LIBS)$(S)vcommon.tco	$(LIBS)$(S)vmove.tco \
	$(LIBS)$(S)vpktio.tco	$(LIBS)$(S)vlocal.tco	$(LIBS)$(S)dumper.tco \
	$(EXTRAROOT)

# Modules for VCR network node (kernel first for fast RAM)
VNODE=	$(LIBS)$(S)kernelrd.tco $(LIBS)$(S)netload.tco	$(LIBS)$(S)neterrrd.tco $(LIBS)$(S)transprt.tco\
	$(LIBS)$(S)input.tco	$(LIBS)$(S)output.tco	$(LIBS)$(S)router.tco \
	$(LIBS)$(S)inputs.tco	$(LIBS)$(S)outputs.tco  $(LIBS)$(S)inputd.tco \
	$(LIBS)$(S)outputd.tco  $(LIBS)$(S)inputsd.tco  $(LIBS)$(S)outputsd.tco \
	$(LIBS)$(S)pktio.tco	$(LIBS)$(S)port.tco	$(LIBS)$(S)uprctrl.tco 	\
	$(LIBS)$(S)exceptrd.tco	$(LIBS)$(S)vchan.tco	$(LIBS)$(S)vinitrd.tco \
	$(LIBS)$(S)vmainrd.tco	$(LIBS)$(S)vcrctrl.tco	$(LIBS)$(S)vserver.tco \
	$(LIBS)$(S)vparserd.tco $(LIBS)$(S)vrpc.tco	$(LIBS)$(S)vcommon.tco \
	$(LIBS)$(S)vmove.tco	$(LIBS)$(S)vpktio.tco	$(LIBS)$(S)vlocal.tco \
	$(LIBS)$(S)vmapping.tco	$(EXTRANODE)

# Modules for vcr.lib creation
VCRLIB= $(TMP)$(S)vcr_c.tax  $(TMP)$(S)vcr_c.t8x \
	$(TMP)$(S)vcr_oc.tax $(TMP)$(S)vcr_oc.t8x \
	$(TMP)$(S)vcommon.tax  $(TMP)$(S)vcommon.t8x \
	$(TMP)$(S)vmapping.tax $(TMP)$(S)vmapping.t8x

# All TCOFF library modules in VCR system
TCO=	$(VROOT) $(VNODE) 	$(LIBS)$(S)netnode.tco 	$(LIBS)$(S)netroot.tco \

# All library modules in VCR system
VIRTUAL= $(LIBS)$(S)virtual.lib
LIB=	$(VIRTUAL) $(LIBS)$(S)vcr.lib $(LIBS)$(S)hosthook.cax $(LIBS)$(S)hosthook.c8x $(EXTRALIB)
#}}}
#{{{  Tools and Options
LIBRARIAN=ilibr
OCCAM=voc
LINK=ilink
CONFIG=icconf
COLLECT=icollect
CC=icc
LIBOPT=
OCCOPT=$Ox
LINKOPT=$Ox
CONFOPT=$Ow
COLLECTOPT=
STATCONFOPT=$Ow $Og   # Default enables source-level debugging of sloading
HPROCOPT=$Ok
HPRCONFOPT=$Ow        # $Og  Include this to source-level debug HPR

# icc compile modes
CAF=$Ota$Owt$Og
C8F=$Ot8$Owt$Og
CAR=$Ota$Owt$Og$ODUPR_RD
C8R=$Ot8$Owt$Og$ODUPR_RD

SECURE=$ODUPR_SC
DFL=$ODDFL
DEBUG=$ODUPR_DEBUG
#}}}
#{{{  Top level switched by MODE
top:	$(MODE)

lib:	$(TCO) $(LIB)

dload:	$(NETWORKS)$(S)netroot0.btl $(NETWORKS)$(S)netroot1.btl \
	$(NETWORKS)$(S)netroot2.btl $(NETWORKS)$(S)netroot3.btl \
	$(NETWORKS)$(S)netnode.btl $(LIB)

dload0:	$(NETWORKS)$(S)netroot0.btl $(NETWORKS)$(S)netnode.btl $(LIB)

dload1:	$(NETWORKS)$(S)netroot1.btl $(NETWORKS)$(S)netnode.btl $(LIB)

dload2:	$(NETWORKS)$(S)netroot2.btl $(NETWORKS)$(S)netnode.btl $(LIB)

dload3:	$(NETWORKS)$(S)netroot3.btl $(NETWORKS)$(S)netnode.btl $(LIB)

sload:	$(NETWORKS)$(S)$(TARGET).btl $(LIB)

hpr:    $(NETWORKS)$(S)$(HTARGET).btl $(LIB)

.KEEP_STATE:
#}}}

#{{{  Dynamic bootables rules
# Boot root from link 0

$(NETWORKS)$(S)netroot0.btl:	netroot0.cfb 
	$(COLLECT) netroot0.cfb $Oo $(NETWORKS)$(S)netroot0.btl $(COLLECTOPT)

netroot0.cfb:	$(DLOADER)$(S)netroot0.cfs netroot.lku 
	$(CONFIG) $(DLOADER)$(S)netroot0.cfs $Oo netroot0.cfb $(CONFOPT)

# Boot root from link 1

$(NETWORKS)$(S)netroot1.btl:	netroot1.cfb 
	$(COLLECT) netroot1.cfb $Oo $(NETWORKS)$(S)netroot1.btl $(COLLECTOPT)

netroot1.cfb:	$(DLOADER)$(S)netroot1.cfs netroot.lku 
	$(CONFIG) $(DLOADER)$(S)netroot1.cfs $Oo netroot1.cfb $(CONFOPT)

# Boot root from link 2

$(NETWORKS)$(S)netroot2.btl:	netroot2.cfb 
	$(COLLECT) netroot2.cfb $Oo $(NETWORKS)$(S)netroot2.btl $(COLLECTOPT)

netroot2.cfb:	$(DLOADER)$(S)netroot2.cfs netroot.lku 
	$(CONFIG) $(DLOADER)$(S)netroot2.cfs $Oo netroot2.cfb $(CONFOPT)

# Boot root from link 3

$(NETWORKS)$(S)netroot3.btl:	netroot3.cfb 
	$(COLLECT) netroot3.cfb $Oo $(NETWORKS)$(S)netroot3.btl $(COLLECTOPT)

netroot3.cfb:	$(DLOADER)$(S)netroot3.cfs netroot.lku 
	$(CONFIG) $(DLOADER)$(S)netroot3.cfs $Oo netroot3.cfb $(CONFOPT)
#}}}
#{{{  Dynamic root and node rules 
# Root rule

netroot.lku: $(LIBS)$(S)vroot.lnk $(LIBS)$(S)netroot.tco
	$(LINK) netroot.tco $Of vroot.lnk $Of startup.lnk $Oo netroot.lku $Ota $(LINKOPT)

# Node rules 

$(NETWORKS)$(S)netnode.btl:	netnode.cfb 
	$(COLLECT) netnode.cfb $Oo $(NETWORKS)$(S)netnode.btl $(COLLECTOPT)

netnode.cfb:	$(DLOADER)$(S)netnode.cfs netnode.lku
	$(CONFIG) $(DLOADER)$(S)netnode.cfs $Oo netnode.cfb $(CONFOPT)

netnode.lku: $(LIBS)$(S)vnode.lnk $(LIBS)$(S)netnode.tco
	$(LINK) netnode.tco $Of vnode.lnk $Of startrd.lnk $Oo netnode.lku $Ota $(LINKOPT)

#}}}
#{{{  Static bootables rules
$(NETWORKS)$(S)$(TARGET).btl:	$(TARGET).cfb
	$(COLLECT) $(TARGET).cfb $Oo $(NETWORKS)$(S)$(TARGET).btl $(COLLECTOPT)
	$(DELETE) static.lku

$(TARGET).cfb:	$(SLOADER)$(S)static.cfs $(TARGET).lku staticrd.lku $(TARGET).inc
	$(COPY) $(TARGET).inc static.inc
	$(COPY) $(TARGET).lku static.lku        
	$(CONFIG) $(SLOADER)$(S)static.cfs $Oo $(TARGET).cfb $(STATCONFOPT)
	$(DELETE) static.inc

$(TARGET).inc:  $(NETWORKS)$(S)$(TARGET).ncf
	ncf2inc $Os <$(NETWORKS)$(S)$(TARGET).ncf >$(TARGET).inc

$(TARGET).lku: $(LIBS)$(S)vroot.lnk $(TARGET).tco
	$(LINK) $(TARGET).tco $Of vroot.lnk $Of startup.lnk $Oo $(TARGET).lku $Ota $(LINKOPT)

staticrd.lku: $(LIBS)$(S)vnode.lnk $(LIBS)$(S)staticrd.tco
	$(LINK) staticrd.tco $Of vnode.lnk $Of startrd.lnk $Oo staticrd.lku $Ota $(LINKOPT)
#}}}
#{{{  HPR bootables rules
$(NETWORKS)$(S)$(HTARGET).btl:	$(HTARGET).cfb
	$(COLLECT) $(HTARGET).cfb $Oo $(NETWORKS)$(S)$(HTARGET).btl $(COLLECTOPT)
	$(DELETE) static.lku

$(HTARGET).cfb:	$(HPRSRC)$(S)hprnet.cfs $(HTARGET).lku staticrd.lku $(LIBS)$(S)t2hpr.c2h $(HTARGET).inc
	$(COPY) $(HTARGET).inc  hprnet.inc
	$(COPY) $(HTARGET).lku  static.lku
	$(CONFIG) $(HPRSRC)$(S)hprnet.cfs $Oo $(HTARGET).cfb $(HPRCONFOPT)
	$(DELETE) hprnet.inc

$(HTARGET).lku: $(LIBS)$(S)vroot.lnk $(HTARGET).tco
	$(LINK) $(HTARGET).tco $Of vroot.lnk $Of startup.lnk $Oo $(HTARGET).lku $Ota $(LINKOPT)
#}}}
#{{{  Rules for linker indirect file creation
$(LIBS)$(S)vnode.lnk: $(VNODE)
	$(VNODE.LNK)

$(LIBS)$(S)vroot.lnk: $(VROOT)
	$(VROOT.LNK)
#}}}
#{{{  Header files dependencies
NET.H= $(LIBS)$(S)net.h $(LIBS)$(S)upr.h

ROUTER.H= $(LIBS)$(S)router.h $(LIBS)$(S)upri.h $(LIBS)$(S)upr.h $(LIBS)$(S)header.h $(LIBS)$(S)topology.h

VCR.H= $(LIBS)$(S)vcr.h $(LIBS)$(S)virtual.h $(LIBS)$(S)upri.h $(LIBS)$(S)upr.h $(LIBS)$(S)header.h $(LIBS)$(S)topology.h
#}}}

#{{{  SLOADER system rules
$(TARGET).tco: $(SLOADER)$(S)static.c $(NET.H) $(TARGET).h $(LIBS)$(S)topology.h
	$(COPY) $(TARGET).h static.h
	$(CC) $(SLOADER)$(S)static.c $Oo $(TARGET).tco $(CAF) $OJ.
	$(DELETE) static.h

$(LIBS)$(S)staticrd.tco:     $(SLOADER)$(S)static.c $(NET.H) $(LIBS)$(S)topology.h
	$(CC) $(SLOADER)$(S)static.c $Oo $(LIBS)$(S)staticrd.tco $(CAR)

$(TARGET).h:  $(NETWORKS)$(S)$(TARGET).ncf
	ncf2inc $Os $Oc <$(NETWORKS)$(S)$(TARGET).ncf >$(TARGET).h
#}}}

#{{{  DLOADER systems rules
$(LIBS)$(S)netroot.tco: $(DLOADER)$(S)netroot.c $(NET.H) $(DLOADER)$(S)netload.h $(LIBS)$(S)topology.h \
                     $(DLOADER)$(S)netshow.h $(DLOADER)$(S)neterr.h
	$(CC) $(DLOADER)$(S)netroot.c $Oo $(LIBS)$(S)netroot.tco $(CAF)
	
$(LIBS)$(S)netnode.tco: $(DLOADER)$(S)netnode.c $(NET.H) $(DLOADER)$(S)netload.h $(LIBS)$(S)topology.h \
                     $(DLOADER)$(S)neterr.h
	$(CC) $(DLOADER)$(S)netnode.c $Oo $(LIBS)$(S)netnode.tco $(CAF)
	
$(LIBS)$(S)netload.tco: $(DLOADER)$(S)netload.c $(NET.H) $(DLOADER)$(S)neterr.h
	$(CC) $(DLOADER)$(S)netload.c $Oo $(LIBS)$(S)netload.tco $(CAF)
	
$(LIBS)$(S)neterr.tco: $(DLOADER)$(S)neterr.c $(NET.H)
	$(CC) $(DLOADER)$(S)neterr.c $Oo $(LIBS)$(S)neterr.tco $(CAF)
	
$(LIBS)$(S)neterrrd.tco: $(DLOADER)$(S)neterr.c $(NET.H)
	$(CC) $(DLOADER)$(S)neterr.c $Oo $(LIBS)$(S)neterrrd.tco $(CAR)
	
$(LIBS)$(S)netshow.tco: $(DLOADER)$(S)netshow.c $(NET.H)
	$(CC) $(DLOADER)$(S)netshow.c $Oo $(LIBS)$(S)netshow.tco $(CAF)
#}}}

#{{{  HPR systems rules
$(LIBS)$(S)t2hpr.c2h:     $(LIBS)$(S)t2hpr.t2h 
	$(LINK) $(LIBS)$(S)t2hpr.t2h $Of occam2.lnk $Ot2 $Oh $Oy $Oo $(LIBS)$(S)t2hpr.c2h

$(LIBS)$(S)t2hpr.t2h:	$(HPRSRC)$(S)t2hpr.occ $(LIBS)$(S)t2lib.inc $(LIBS)$(S)t2opt.inc
	$(OCCAM) $(HPRSRC)$(S)t2hpr $Ot2 $(HPROCOPT) $Oh $Oo $(LIBS)$(S)t2hpr.t2h

$(HTARGET).tco:     $(SLOADER)$(S)static.c $(NET.H) $(HTARGET).h $(LIBS)$(S)topology.h
	$(COPY) $(HTARGET).h static.h
	$(CC) $(SLOADER)$(S)static.c $Oo $(HTARGET).tco $(CAF) $OJ.
	$(DELETE) static.h
#}}}

#{{{  UPR ROUTER system rules
$(LIBS)$(S)transprt.tco: $(ROUTER)$(S)transprt.c $(ROUTER.H)
	$(CC) $(ROUTER)$(S)transprt.c $Oo $(LIBS)$(S)transprt.tco $(CAF) $(EXTRA)

$(LIBS)$(S)kernel.tco: $(ROUTER)$(S)kernel.c $(ROUTER.H) \
                    $(ROUTER)$(S)except.h $(ROUTER)$(S)uprctrl.h $(ROUTER)$(S)input.h \
                    $(ROUTER)$(S)output.h $(ROUTER)$(S)show.h $(ROUTER)$(S)pktio.h
	$(CC) $(ROUTER)$(S)kernel.c $Oo $(LIBS)$(S)kernel.tco $(CAF)

$(LIBS)$(S)kernelrd.tco: $(ROUTER)$(S)kernel.c $(ROUTER.H) \
                    $(ROUTER)$(S)except.h $(ROUTER)$(S)uprctrl.h $(ROUTER)$(S)input.h \
                    $(ROUTER)$(S)output.h $(ROUTER)$(S)show.h
	$(CC) $(ROUTER)$(S)kernel.c $Oo $(LIBS)$(S)kernelrd.tco $(CAR)

$(LIBS)$(S)input.tco: $(ROUTER)$(S)input.c $(ROUTER.H) \
                    $(ROUTER)$(S)except.h $(ROUTER)$(S)pktio.h
	$(CC) $(ROUTER)$(S)input.c $Oo $(LIBS)$(S)input.tco $(CAF)

$(LIBS)$(S)inputs.tco: $(ROUTER)$(S)input.c $(ROUTER.H) \
                    $(ROUTER)$(S)except.h $(ROUTER)$(S)pktio.h
	$(CC) $(ROUTER)$(S)input.c $Oo $(LIBS)$(S)inputs.tco $(CAF)$(SECURE)

$(LIBS)$(S)inputd.tco: $(ROUTER)$(S)input.c $(ROUTER.H) \
                    $(ROUTER)$(S)except.h $(ROUTER)$(S)pktio.h
	$(CC) $(ROUTER)$(S)input.c $Oo $(LIBS)$(S)inputd.tco $(CAF)$(DFL)

$(LIBS)$(S)inputsd.tco: $(ROUTER)$(S)input.c $(ROUTER.H) \
                    $(ROUTER)$(S)except.h $(ROUTER)$(S)pktio.h
	$(CC) $(ROUTER)$(S)input.c $Oo $(LIBS)$(S)inputsd.tco $(CAF)$(SECURE) $(DFL)

$(LIBS)$(S)output.tco: $(ROUTER)$(S)output.c $(ROUTER.H) \
                    $(ROUTER)$(S)except.h $(ROUTER)$(S)pktio.h
	$(CC) $(ROUTER)$(S)output.c $Oo $(LIBS)$(S)output.tco $(CAF)

$(LIBS)$(S)outputs.tco: $(ROUTER)$(S)output.c $(ROUTER.H) \
                    $(ROUTER)$(S)except.h $(ROUTER)$(S)pktio.h
	$(CC) $(ROUTER)$(S)output.c $Oo $(LIBS)$(S)outputs.tco $(CAF)$(SECURE)

$(LIBS)$(S)outputd.tco: $(ROUTER)$(S)output.c $(ROUTER.H) \
                    $(ROUTER)$(S)except.h $(ROUTER)$(S)pktio.h
	$(CC) $(ROUTER)$(S)output.c $Oo $(LIBS)$(S)outputd.tco $(CAF)$(DFL)

$(LIBS)$(S)outputsd.tco: $(ROUTER)$(S)output.c $(ROUTER.H) \
                    $(ROUTER)$(S)except.h $(ROUTER)$(S)pktio.h
	$(CC) $(ROUTER)$(S)output.c $Oo $(LIBS)$(S)outputsd.tco $(CAF)$(SECURE) $(DFL)

$(LIBS)$(S)router.tco:  $(ROUTER)$(S)router.c $(ROUTER.H)
	$(CC) $(ROUTER)$(S)router.c $Oo $(LIBS)$(S)router.tco $(CAF)

$(LIBS)$(S)pktio.tco: $(ROUTER)$(S)pktio.c $(ROUTER.H) \
                   $(ROUTER)$(S)except.h $(ROUTER)$(S)pktio.h
	$(CC) $(ROUTER)$(S)pktio.c $Oo $(LIBS)$(S)pktio.tco $(CAF)

$(LIBS)$(S)port.tco: $(ROUTER)$(S)port.c $(ROUTER.H) $(ROUTER)$(S)except.h
	$(CC) $(ROUTER)$(S)port.c $Oo $(LIBS)$(S)port.tco $(CAF)

$(LIBS)$(S)uprctrl.tco: $(ROUTER)$(S)uprctrl.c $(ROUTER.H) $(ROUTER)$(S)except.h
	$(CC) $(ROUTER)$(S)uprctrl.c $Oo $(LIBS)$(S)uprctrl.tco $(CAF)

$(LIBS)$(S)except.tco: $(ROUTER)$(S)except.c $(ROUTER.H) $(ROUTER)$(S)except.h
	$(CC) $(ROUTER)$(S)except.c $Oo $(LIBS)$(S)except.tco $(CAF)

$(LIBS)$(S)exceptrd.tco: $(ROUTER)$(S)except.c $(ROUTER.H) $(ROUTER)$(S)except.h
	$(CC) $(ROUTER)$(S)except.c $Oo $(LIBS)$(S)exceptrd.tco $(CAR)

$(LIBS)$(S)show.tco: $(ROUTER)$(S)show.c $(ROUTER.H) $(ROUTER)$(S)show.h
	$(CC) $(ROUTER)$(S)show.c $Oo $(LIBS)$(S)show.tco $(CAF)

$(LIBS)$(S)dumper.tco: $(ROUTER)$(S)dumper.c $(ROUTER.H)
	$(CC) $(ROUTER)$(S)dumper.c $Oo $(LIBS)$(S)dumper.tco $(CAF)
#}}}

#{{{  UPRI library rules
UPRILIB= $(LIBS)$(S)portl.t8x $(LIBS)$(S)pktiol.t8x \
         $(LIBS)$(S)portl.tax $(LIBS)$(S)pktiol.tax

$(LIBS)$(S)upri.lib: $(LIBS)$(S)uprilib.lnk
	ilibr $Of $(LIBS)$(S)uprilib.lnk $Oo $(LIBS)$(S)upri.lib

$(LIBS)$(S)uprilib.lnk: $(UPRILIB)
	$(UPRILIB.LNK)

$(LIBS)$(S)pktiol.tax: $(ROUTER)$(S)pktio.c $(ROUTER.H) \
                   $(ROUTER)$(S)except.h $(ROUTER)$(S)pktio.h
	$(CC) $(ROUTER)$(S)pktio.c $Oo $(LIBS)$(S)pktiol.tax $(CAF) $ODLIBRAFY

$(LIBS)$(S)portl.tax: $(ROUTER)$(S)port.c $(ROUTER.H) $(ROUTER)$(S)except.h
	$(CC) $(ROUTER)$(S)port.c $Oo $(LIBS)$(S)portl.tax $(CAF) $ODLIBRAFY

$(LIBS)$(S)pktiol.t8x: $(ROUTER)$(S)pktio.c $(ROUTER.H) \
                   $(ROUTER)$(S)except.h $(ROUTER)$(S)pktio.h
	$(CC) $(ROUTER)$(S)pktio.c $Oo $(LIBS)$(S)pktiol.t8x $(C8F) $ODLIBRAFY

$(LIBS)$(S)portl.t8x: $(ROUTER)$(S)port.c $(ROUTER.H) $(ROUTER)$(S)except.h
	$(CC) $(ROUTER)$(S)port.c $Oo $(LIBS)$(S)portl.t8x $(C8F) $ODLIBRAFY
#}}}

#{{{  VCRSRC system rules
$(LIBS)$(S)vchan.tco: $(VCRSRC)$(S)vchan.c $(VCR.H) $(VCRSRC)$(S)vpktio.h
	$(CC) $(VCRSRC)$(S)vchan.c $Oo $(LIBS)$(S)vchan.tco $(CAF)

$(LIBS)$(S)vcrctrl.tco: $(VCRSRC)$(S)vcrctrl.c $(VCR.H) $(VCRSRC)$(S)vserver.h  $(VCRSRC)$(S)vchan.h $(VCRSRC)$(S)vmove.h $(VCRSRC)$(S)vpktio.h
	$(CC) $(VCRSRC)$(S)vcrctrl.c $Oo $(LIBS)$(S)vcrctrl.tco $(CAF)

$(LIBS)$(S)vinit.tco: $(VCRSRC)$(S)vinit.c $(VCR.H) $(VCRSRC)$(S)vchan.h $(VCRSRC)$(S)vcrctrl.h $(VCRSRC)$(S)vparse.h $(VCRSRC)$(S)vlocal.h $(VCRSRC)$(S)vmove.h
	$(CC) $(VCRSRC)$(S)vinit.c $Oo $(LIBS)$(S)vinit.tco $(CAF) 

$(LIBS)$(S)vinitrd.tco: $(VCRSRC)$(S)vinit.c $(VCR.H) $(VCRSRC)$(S)vchan.h $(VCRSRC)$(S)vcrctrl.h $(VCRSRC)$(S)vparse.h $(VCRSRC)$(S)vlocal.h $(VCRSRC)$(S)vmove.h
	$(CC) $(VCRSRC)$(S)vinit.c $Oo $(LIBS)$(S)vinitrd.tco $(CAR)

$(LIBS)$(S)vmain.tco: $(VCRSRC)$(S)vmain.c $(VCR.H) $(VCRSRC)$(S)vchan.h $(VCRSRC)$(S)vparse.h
	$(CC) $(VCRSRC)$(S)vmain.c $Oo $(LIBS)$(S)vmain.tco $(CAF) 

$(LIBS)$(S)vmainrd.tco: $(VCRSRC)$(S)vmain.c $(VCR.H) $(VCRSRC)$(S)vchan.h $(VCRSRC)$(S)vparse.h
	$(CC) $(VCRSRC)$(S)vmain.c $Oo $(LIBS)$(S)vmainrd.tco $(CAR) 

$(LIBS)$(S)vparse.tco: $(VCRSRC)$(S)vparse.c $(VCR.H) $(VCRSRC)$(S)vchan.h $(VCRSRC)$(S)tcoff.h $(VCRSRC)$(S)vshow.h
	$(CC) $(VCRSRC)$(S)vparse.c $Oo $(LIBS)$(S)vparse.tco $(CAF)

$(LIBS)$(S)vparserd.tco: $(VCRSRC)$(S)vparse.c $(VCR.H) $(VCRSRC)$(S)vchan.h $(VCRSRC)$(S)tcoff.h $(VCRSRC)$(S)vshow.h
	$(CC) $(VCRSRC)$(S)vparse.c $Oo $(LIBS)$(S)vparserd.tco $(CAR)

$(LIBS)$(S)vserver.tco: $(VCRSRC)$(S)vserver.c $(VCR.H) $(VCRSRC)$(S)vchan.h $(VCRSRC)$(S)vcrctrl.h $(VCRSRC)$(S)vparse.h $(VCRSRC)$(S)vmove.h $(VCRSRC)$(S)vrpc.h
	$(CC) $(VCRSRC)$(S)vserver.c $Oo $(LIBS)$(S)vserver.tco $(CAF)

$(LIBS)$(S)vshow.tco: $(VCRSRC)$(S)vshow.c $(VCR.H)
	$(CC) $(VCRSRC)$(S)vshow.c $Oo $(LIBS)$(S)vshow.tco $(CAF)

$(LIBS)$(S)vhost.tco: $(VCRSRC)$(S)vhost.c $(VCR.H) $(VCRSRC)$(S)vchan.h
	$(CC) $(VCRSRC)$(S)vhost.c $Oo $(LIBS)$(S)vhost.tco $(CAF)

$(LIBS)$(S)vmapping.tco: $(VCRSRC)$(S)vmapping.c $(VCR.H)
	$(CC) $(VCRSRC)$(S)vmapping.c $Oo $(LIBS)$(S)vmapping.tco $(CAF)

$(LIBS)$(S)vrpc.tco: $(VCRSRC)$(S)vrpc.c $(VCR.H) $(VCRSRC)$(S)vchan.h $(VCRSRC)$(S)vrpc.h $(VCRSRC)$(S)vmove.h
	$(CC) $(VCRSRC)$(S)vrpc.c $Oo $(LIBS)$(S)vrpc.tco $(CAF)

$(LIBS)$(S)vcommon.tco: $(VCRSRC)$(S)vcommon.c $(VCR.H)
	$(CC) $(VCRSRC)$(S)vcommon.c $Oo $(LIBS)$(S)vcommon.tco $(CAF)

$(LIBS)$(S)vmove.tco: $(VCRSRC)$(S)vmove.c $(VCR.H) $(VCRSRC)$(S)vchan.h $(VCRSRC)$(S)vmove.h $(VCRSRC)$(S)vpktio.h
	$(CC) $(VCRSRC)$(S)vmove.c $Oo $(LIBS)$(S)vmove.tco $(CAF)

$(LIBS)$(S)vpktio.tco: $(VCRSRC)$(S)vpktio.c $(VCR.H)
	$(CC) $(VCRSRC)$(S)vpktio.c $Oo $(LIBS)$(S)vpktio.tco $(CAF)

$(LIBS)$(S)vlocal.tco: $(VCRSRC)$(S)vlocal.c $(VCR.H)
	$(CC) $(VCRSRC)$(S)vlocal.c $Oo $(LIBS)$(S)vlocal.tco $(CAF)
#}}}

#{{{  C/occam library interface rules
# Rules for vcr.lib

$(LIBS)$(S)vcr.lib: $(LIBS)$(S)vcrlib.lnk
	$(LIBRARIAN) $Of $(LIBS)$(S)vcrlib.lnk $Oo $(LIBS)$(S)vcr.lib

$(LIBS)$(S)vcrlib.lnk: $(VCRLIB)
	$(VCRLIB.LNK)

$(TMP)$(S)vcommon.tax: $(VCRSRC)$(S)vcommon.c $(VCR.H)
	$(CC) $(VCRSRC)$(S)vcommon.c $Oo $(TMP)$(S)vcommon.tax $(CAF)

$(TMP)$(S)vcommon.t8x: $(VCRSRC)$(S)vcommon.c $(VCR.H)
	$(CC) $(VCRSRC)$(S)vcommon.c $Oo $(TMP)$(S)vcommon.t8x $(C8F)

$(TMP)$(S)vmapping.tax: $(VCRSRC)$(S)vmapping.c $(VCR.H)
	$(CC) $(VCRSRC)$(S)vmapping.c $Oo $(TMP)$(S)vmapping.tax $(CAF)

$(TMP)$(S)vmapping.t8x: $(VCRSRC)$(S)vmapping.c $(VCR.H)
	$(CC) $(VCRSRC)$(S)vmapping.c $Oo $(TMP)$(S)vmapping.t8x $(C8F)

$(TMP)$(S)vcr_c.tax: $(VCRSRC)$(S)vcr.c $(VCR.H)
	$(CC) $(VCRSRC)$(S)vcr.c $Oo $(TMP)$(S)vcr_c.tax $(CAF)

$(TMP)$(S)vcr_c.t8x: $(VCRSRC)$(S)vcr.c $(VCR.H)
	$(CC) $(VCRSRC)$(S)vcr.c $Oo $(TMP)$(S)vcr_c.t8x $(C8F)

$(TMP)$(S)vcr_oc.tax: $(VCRSRC)$(S)vcr.occ $(LIBS)$(S)vclib.inc
	$(OCCAM) $(VCRSRC)$(S)vcr.occ $Oo $(TMP)$(S)vcr_oc.tax $Ota $(OCCOPT)

$(TMP)$(S)vcr_oc.t8x: $(VCRSRC)$(S)vcr.occ $(LIBS)$(S)vclib.inc
	$(OCCAM) $(VCRSRC)$(S)vcr.occ $Oo $(TMP)$(S)vcr_oc.t8x $Ot8 $(OCCOPT)

# Rules for virtual.lib

$(LIBS)$(S)virtual.lib: $(TMP)$(S)virtual.tax $(TMP)$(S)virtual.t8x
	$(LIBRARIAN) $(TMP)$(S)virtual.tax $(TMP)$(S)virtual.t8x $Oo $(LIBS)$(S)virtual.lib

$(TMP)$(S)virtual.tax: $(VCRSRC)$(S)virtual.occ $(LIBS)$(S)vclib.inc
	$(OCCAM) $(VCRSRC)$(S)virtual.occ $Oo $(TMP)$(S)virtual.tax $Ota $(OCCOPT)

$(TMP)$(S)virtual.t8x: $(VCRSRC)$(S)virtual.occ $(LIBS)$(S)vclib.inc
	$(OCCAM) $(VCRSRC)$(S)virtual.occ $Oo $(TMP)$(S)virtual.t8x $Ot8 $(OCCOPT)

# Rules for hosthook.cax and hosthook.c8x

$(LIBS)$(S)hosthook.cax: $(TMP)$(S)hosthook.tax $(LIBS)$(S)vcr.lib $(VIRTUAL) $(LIBS)$(S)vcra.lnk
	$(LINK) $(TMP)$(S)hosthook.tax $Of vcra.lnk $Oo $(LIBS)$(S)hosthook.cax $Ota $(LINKOPT)

$(TMP)$(S)hosthook.tax: $(VCRSRC)$(S)hosthook.occ $(VIRTUAL)
	$(OCCAM) $(VCRSRC)$(S)hosthook.occ $Oo $(TMP)$(S)hosthook.tax $Ota $(OCCOPT)

$(LIBS)$(S)hosthook.c8x: $(TMP)$(S)hosthook.t8x $(LIBS)$(S)vcr.lib $(VIRTUAL) $(LIBS)$(S)vcr8.lnk
	$(LINK) $(TMP)$(S)hosthook.t8x $Of vcr8.lnk $Oo $(LIBS)$(S)hosthook.c8x $Ot8 $(LINKOPT)

$(TMP)$(S)hosthook.t8x: $(VCRSRC)$(S)hosthook.occ $(VIRTUAL)
	$(OCCAM) $(VCRSRC)$(S)hosthook.occ $Oo $(TMP)$(S)hosthook.t8x $Ot8 $(OCCOPT)
#}}}

#{{{  Virtual processor implementation : systems code rules
VPI.H= $(LIBS)$(S)vpi.h $(LIBS)$(S)threads.h
ASI.H= $(LIBS)$(S)asi.h $(LIBS)$(S)threads.h $(LIBS)$(S)convert.h

$(LIBS)$(S)vpi.tco: $(VPISRC)$(S)vpi.c $(VPISRC)$(S)vpmain.h $(VPI.H) $(VPISRC)$(S)uchan.h $(VPISRC)$(S)schan.h $(VCR.H)
	$(CC) $(VPISRC)$(S)vpi.c $Oo $(LIBS)$(S)vpi.tco $(CAF)

$(LIBS)$(S)vpmain.tco: $(VPISRC)$(S)vpmain.c $(VPISRC)$(S)vpmain.h $(VCRSRC)$(S)vchan.h $(VPISRC)$(S)uchan.h $(VCRSRC)$(S)vparse.h $(VPI.H) $(VCR.H)
	$(CC) $(VPISRC)$(S)vpmain.c $Oo $(LIBS)$(S)vpmain.tco $(CAF) $OJ$(VCRSRC)

$(LIBS)$(S)vpmainrd.tco: $(VPISRC)$(S)vpmain.c $(VPISRC)$(S)vpmain.h $(VCRSRC)$(S)vchan.h $(VPISRC)$(S)uchan.h $(VCRSRC)$(S)vparse.h $(VPI.H) $(VCR.H)
	$(CC) $(VPISRC)$(S)vpmain.c $Oo$(LIBS)$(S)vpmainrd.tco $(CAR) $OJ$(VCRSRC)

$(LIBS)$(S)uchan.tco: $(VPISRC)$(S)uchan.c $(VPISRC)$(S)vpmain.h $(VPISRC)$(S)uchan.h $(VPISRC)$(S)schan.h $(VPI.H) $(VCR.H)
	$(CC) $(VPISRC)$(S)uchan.c $Oo $(LIBS)$(S)uchan.tco $(CAF)

$(LIBS)$(S)schan.tax: $(VPISRC)$(S)schan.c $(VPISRC)$(S)vpmain.h $(VPISRC)$(S)schan.h $(VPI.H) $(VCR.H)
	$(CC) $(VPISRC)$(S)schan.c $Oo $(LIBS)$(S)schan.tax $(CAF)

$(LIBS)$(S)schan.t8x: $(VPISRC)$(S)schan.c $(VPISRC)$(S)vpmain.h $(VPISRC)$(S)schan.h $(VPI.H) $(VCR.H)
	$(CC) $(VPISRC)$(S)schan.c $Oo $(LIBS)$(S)schan.t8x $(C8F)

$(LIBS)$(S)threads.tax: $(VPISRC)$(S)threads.c $(LIBS)$(S)threads.h $(LIBS)$(S)upri.h $(LIBS)$(S)upr.h $(LIBS)$(S)header.h
	$(CC) $(VPISRC)$(S)threads.c $Oo $(LIBS)$(S)threads.tax $(CAF)

$(LIBS)$(S)threads.t8x: $(VPISRC)$(S)threads.c $(LIBS)$(S)threads.h $(LIBS)$(S)upri.h $(LIBS)$(S)upr.h $(LIBS)$(S)header.h
	$(CC) $(VPISRC)$(S)threads.c $Oo $(LIBS)$(S)threads.t8x $(C8F)
#}}}

#{{{  Virtual processor interface : library code rules
VPILIBA= $(LIBS)$(S)vpi.tax $(LIBS)$(S)schan.tax $(LIBS)$(S)threads.tax
VPILIB8= $(LIBS)$(S)vpi.t8x $(LIBS)$(S)schan.t8x $(LIBS)$(S)threads.t8x
VPILIB=  $(VPILIBA) $(VPILIB8)

$(LIBS)$(S)vpi.lib: $(LIBS)$(S)vpilib.lnk
	$(LIBRARIAN) $Of $(LIBS)$(S)vpilib.lnk $Oo $(LIBS)$(S)vpi.lib

$(LIBS)$(S)vpilib.lnk: $(VPILIB)
	$(VPILIB.LNK)

$(LIBS)$(S)vpi.tax: $(VPISRC)$(S)vpi.c $(VPISRC)$(S)vpmain.h $(VPI.H) $(VPISRC)$(S)uchan.h $(VPISRC)$(S)schan.h $(VCR.H)
	$(CC) $(VPISRC)$(S)vpi.c $Oo $(LIBS)$(S)vpi.tax $(CAF) $ODLIBRAFY

$(LIBS)$(S)vpi.t8x: $(VPISRC)$(S)vpi.c $(VPISRC)$(S)vpmain.h $(VPI.H) $(VPISRC)$(S)uchan.h $(VPISRC)$(S)schan.h $(VCR.H)
	$(CC) $(VPISRC)$(S)vpi.c $Oo $(LIBS)$(S)vpi.t8x $(C8F) $ODLIBRAFY
#}}}

