SOURCE_DIR=${BASE}..
IDENT=-DOSF -DOSF1_SERVER -DCOMPAT_43 -DMACH_DB -DOSF1_SERVER -DSUN_RPC
#
# Mach Operating System
# Copyright (c) 1989 Carnegie-Mellon University
# Copyright (c) 1988 Carnegie-Mellon University
# Copyright (c) 1987 Carnegie-Mellon University
# Copyright (c) 1986 Carnegie-Mellon University
# All rights reserved.  The CMU software License Agreement specifies
# the terms and conditions for use and redistribution.
#  
# HISTORY
# $Log:	Makefile.template,v $
# Revision 1.4  92/04/27  17:04:51  pha
# Grenoble update 3.6 merged.
# 
# Revision 1.3  92/03/17  15:08:17  pha
# 	change from absolute include path to release area
# 
# Revision 1.2  92/03/16  10:36:28  pha
# 	initial checkin
# 
# Revision 1.1.1.1  92/03/02  18:01:12  pha
# osf/1 server V3.5
# 
# Revision 1.1  92/03/02  18:01:09  pha
# Initial revision
# 
#	Revision 3.20  92/01/07  23:33:35  condict
#	Add missing target file mach/default_pager_object.h
#	
#	Revision 3.19  91/12/11  15:11:56  condict
#	Fix bug whereby absolute path names were going into the Makedep file.
#	
# Revision 1.5  92/02/27  12:00:37  pha
# 	numerous additional changes to compile/link server on osf/1
# 
# Revision 1.4  92/02/25  16:35:49  pha
# 	numerous changes to get it working...
# 
# Revision 1.3  92/02/11  11:39:52  pha
# 	added -DMACH to defines.  this doesn't seem to be needed in the
# 	i386 version, but here we need it so the include files for e.g.
# 	bsd/kern_descrip.c work correctly.  The problem is that MACH
# 	must be defined, but this source file doesn't include <mach.h>
# 	which sets it.  Rather than find out the slow painful way how
# 	many others aren't including it, I define it here.  It could
# 	potentially cause problems somewhere else, but I don't see
# 	how at the moment.
# 
# Revision 1.2  92/02/11  11:36:59  pha
# 	numerous changes, mostly centered around getting the include
# 	paths correct for osf/1 server.
# 
# Revision 1.1.1.1  92/01/14  11:39:38  pha
# OSF/1 V3.1 Unix Server
# 
# Revision 1.1  92/01/14  11:39:36  pha
# Initial revision
# 
#	Revision 3.18  91/11/15  15:31:35  condict
#	Get rid of unnecessary -I../include.  Change ${target_sys} to ${target_cpu}.
#	
#	Revision 3.17  91/11/07  15:15:20  condict
#	Add -I../include (unnecessary?) to C flags, for shadowing.
#	Added uxkern/bsd_types_gen.h to dependencies for BSD_2_FILES.
#	
#	Revision 3.16  91/10/09  18:36:05  emcmanus
#	Supply ${OPTIMIZE} when compiling for profiling.
#	
#	Revision 3.15  91/09/27  11:58:35  emcmanus
#	Compile bsd_types_gen without profiling even if profiling kernel.
#	
#	Revision 3.14  91/09/10  12:01:33  barbou
#	Added the required MK version number as an argument to newvers.sh.
#	
#	Revision 3.13  91/09/06  13:49:31  condict
#	Clean up the depend/Makedep/.EXIT rules.
#	
#	Revision 3.12  91/08/30  10:29:36  condict
#	Change @sys and "machine" refs to ${target_sys}.
#	
#	Revision 3.11  91/08/28  14:01:23  condict
#	Update to OSF 1.0.2.
#	
#	Revision 3.10  91/08/28  10:54:13  barbou
#	Upgrade to OSF/1.0.2.
#	
#	Revision 3.9  91/08/27  15:28:10  barbou
#	Upgrade to UX26.
#	
#	Revision 3.8  91/07/29  16:28:03  barbou
#	Modification to use the OSF/1 newvers.sh script.
#	
#	Revision 3.7  91/06/09  15:49:18  condict
#	Add C_RULE_1A_DBG, for use in compiling modules currently under test.
#	
#	Revision 3.6  91/05/31  11:21:39  condict
#	Remove -DKERNEL from list of mig DEFINES.  It breaks in mach/std_types.h.
#	
#	Revision 3.5  91/05/30  17:26:37  jose
#	Changed DEFINES and MIGFLAGS.
#	
#	Revision 3.4  91/05/15  17:44:47  barbou
#	Only one place to change -O into -g.
#	
#	Revision 3.3  91/05/07  15:39:14  condict
#	Turn off C compiler optimization (to make debugger work).
#	
#	Revision 3.2  91/03/08  16:01:57  condict
#	Modified to work with the OSF/1 header files
#	
# Revision 3.1  91/02/27  17:07:18  condict
#	Undefine built-in CMUCS symbol.
#
# Revision 3.0  91/01/17  12:06:39  condict
#	Unchanged copy from Mach 3.0 BSD UNIX server
#
# Revision 2.5  90/06/19  23:10:23  rpd
# 	Added uxkern/bsd_2.defs rules.
# 	[90/06/09            rpd]
# 
# 	Removed FORCE_VOLATILE, added VOLATILE to DEFINES.
# 	[90/06/06            rpd]
# 
# Revision 2.4  90/06/02  15:23:06  rpd
# 	Added rules for default_pager_object.defs.
# 	[90/05/03            rpd]
# 	Don't barf if xstrip fails.
# 	[90/05/02            rpd]
# 
# 	From jsb: don't rearrange symbols.
# 	Use xstrip instead of -x.
# 	[90/04/23            rpd]
# 
# 	Removed inode pager's dependency on memory_object_default_server.c.
# 	[90/03/28            rpd]
# 	Define DEFINES.  Compile everything with -DMACH_IPC_COMPAT=0.
# 	Added explicit rules for running mig.
# 	[90/03/26  19:43:40  rpd]
# 
# Revision 2.3  90/03/14  21:27:27  rwd
# 	Added rules for default_pager_object_user
# 	[90/01/22            rwd]
# 
# Revision 2.2  89/11/29  15:28:19  af
# 	Fix to build with standard kernel make scripts.  Add rules to
# 	build memory_object.c and memory_object_default.c.
# 	[89/05/24            dbg]
# 
# 	Add bsd_1.defs.
# 	[89/04/07            dbg]
# 
# 	Out-of-kernel version.  Remove locore.
# 	[89/01/03            dbg]
# 
# Revision 2.1  89/08/04  15:26:33  rwd
# Created.
# 
# Revision 2.25  89/02/25  17:39:48  gm0w
# 	Removed obsolete rules for links, tags, printing, etc.
# 	[89/02/19            rpd]
# 
# 	Added MIG_BOGUS_FILES and rules to create the bogus files.
# 	The Mig-generated files use these old names.
# 	[89/02/19            rpd]
# 
# 	Converted migfiles/migdebugfiles rules to new format.
# 	[89/02/18            rpd]
# 
# Revision 2.24  89/01/31  01:50:24  rpd
# 	Picked up dlb's migfiles/migdebugfiles changes, but flushed
# 	the mach_host additions.  (They will get merged later.)
# 	[89/01/31            rpd]
# 
# 	Add mach_host.defs and related files.
# 	Add intermediate targets to kick off interface mig runs early.
# 	[89/01/25            dlb]
# 
# Revision 2.23  89/01/24  17:00:55  af
# 	Fixed the broken set of rules for mach_debug.   No comment.
# 
# Revision 2.22  89/01/23  22:16:16  af
# 	The basic change is that locore.s and ioconf.c are no longer
# 	special cased.  ioconf.c is now specified in files.  If you need
# 	some special treatment for locore.s, then do it in the machine
# 	dependent Makefile rules.  These changes were necessary to be
# 	more general in order to accomodate mips.
# 	
# 	The %<foo> order was changed to have %MACHDEP last.  So
# 	that it could have rules that depended on SOBJS and COBJS.
# 	
# 	"makevariables" get emitted after the %MACHDEP expansion.
# 	This means that the %MACHDEP can have variables that overide the
# 	defaults in the Makefile.template and that a given configuration
# 	file can overide the variables in the %MACHDEP (local Makefile).
# 	This works wonderfully for gcc.
# 	
# 	The text following a "|" in the files file, will be
# 	emitted as part of the rule for the given file.
# 	
# 	Lastly, you might want to look at the comments in the src/config
# 	program, especially in mkmakefile.c
# 	[89/01/09            rvb]
# 
#
# Revision 2.21  89/01/15  16:19:56  rpd
# 	Moved interfaces from kern/ to mach/.
# 	Moved rules for the mach_debug_ca interface to Makefile.ca.
# 	[89/01/15  14:53:06  rpd]
# 
# Revision 2.20  89/01/12  07:42:30  rpd
# 	Updated for new Mig files in kern/, mach_debug/, ca/ directories.
# 	[89/01/12  04:34:35  rpd]
# 
# Revision 2.19  88/12/19  02:40:21  mwyoung
# 	Split out ALLOPTS from old LINTOPTS, and provide VOLATILE only
# 	for lint.  I'm not sure why it's not safe to always use
# 	VOLATILE, but Bob didn't set things up that way.
# 	[88/12/19            mwyoung]
# 	
# 	Add volatile definition for lint.  It should be machine-dependent,
# 	but all forms of lint are based on pcc currently.
# 	[88/12/17            mwyoung]
# 
# Revision 2.18  88/11/23  16:35:34  rpd
# 	Added comments explaining PRELDDEPS.
# 	[88/11/05  13:45:58  rpd]
# 
# Revision 2.17  88/10/20  18:19:42  mwyoung
# 	Move the "default" target ahead of .PRECIOUS.
# 	[88/10/18            mwyoung]
# 
# Revision 2.16  88/10/18  03:17:29  mwyoung
# 	Update Makefile (with "md") only upon exit.
# 	[88/10/17            mwyoung]
# 
# Revision 2.15  88/09/07  15:47:41  rpd
# 	Explicitly use generated make script when checking dependencies.
# 	[88/09/05  21:32:22  rpd]
# 
# Revision 2.14  88/08/06  18:07:21  rpd
# Convert to use new memory_object files.
# No longer need -I flags, because the generated make script
# does it all with CPATH.
# 
# Revision 2.13  88/07/17  20:38:52  mwyoung
# Fix typo in previous change.
# 
# Revision 2.12  88/07/17  20:28:25  mwyoung
# Add mach_types.defs to the list of things to get from kern/.
# 
# Revision 2.11  88/07/17  18:48:49  mwyoung
# Convert to use new memory_object files.
# 
# Revision 2.10  88/07/15  15:48:26  mja
# Don't reset CPATH here since it is now set in the calling
# ./make script to track VPATH;  pass ../conf/copyright to
# ../conf/newvers.sh for VPATH;  define MD variable;  correct
# dependencies on kern/* and replace wildcards with explicit
# names all for VPATH.
# 
# 20-Jun-88  Michael Young (mwyoung) at Carnegie-Mellon University
#	Always remove and rebuild kern/ when dependencies change.
#
# 17-Jun-88  Michael Young (mwyoung) at Carnegie-Mellon University
#	More dependencies on kern/ files.
#
# 11-Jun-88  Michael Young (mwyoung) at Carnegie-Mellon University
#	Simplify B_RULEs to decode directly from the source directory.
#
#  7-Jun-88  Michael Young (mwyoung) at Carnegie-Mellon University
#	Build MiG-generated interfaces in the build directory.
#	Unfortunately, the generated file "mach.h" conflicts with the
#	option file of the same name, so the interfaces get built in a
#	subdirectory.
#
#  7-Jun-88  Michael Young (mwyoung) at Carnegie-Mellon University
#	Decode binary (".b") files into object files.
#
#  2-Jun-88  Michael Young (mwyoung) at Carnegie-Mellon University
#	Temporarily added rules to make "strings.h" until MiG can be
#	convinced not to include it unless strings are being used.
#
# 18-May-88  Mike Accetta (mja) at Carnegie-Mellon University
#	Add .PRECIOUS target to prevent Makefile from ever being
#	deleted on interrupt.
#	[ V5.1(XF25) ]
#
# 09-Apr-88  Mike Accetta (mja) at Carnegie-Mellon University
#	Corrected object and binary rules to permit errors and remove
#	target before copying in new version (in case it is not
#	writeable);  added version file for patch level;  changed "md"
#	invocation to simply wildcard all files rather than only those
#	newer than "Makefile" since this can often cause files to be
#	overlooked if "Makefile" is touched before they are
#	incorporated.
#	[ V5.1(XF23) ]
#
# 31-Mar-88  Michael Young (mwyoung) at Carnegie-Mellon University
#	Allow source directory to be other than "..".
#
# 31-Mar-88  Robert Baron (rvb) at Carnegie-Mellon University
#	Need to have ${VOLATILE} for genassym
#
# 28-Mar-88  Robert Baron (rvb) at Carnegie-Mellon University
#	Add macros VOLATILE and FORCE_VOLATILE as per change in
#	conf/files.<machine> file:
#	VOLATILE	is included if the file contains the ansi C
#			 volatile keyword
#	FORCE_VOLATILE	is included if the file has volatile memory 
#			references, but does not use declare them
#			correctly.
#	(also see comment in config/mkmakefile.c)
#
# 29-Feb-88  Robert Baron (rvb) at Carnegie-Mellon University
#	Add VOLATILE macro which is fed to the preprocessor to macro define
#	the "keyword" volatile to an empty string.  On gcc builds, the
#	local Makefile will define VOLATILE= which lets the volatile
#	definitions show thru.
#
#  6-Jan-88  Michael Young (mwyoung) at Carnegie-Mellon University
#	Change references from h/ to sys/.
#	Remove all but the most pertinent history.
#
# 15-Dec-87  Robert Baron (rvb) at Carnegie-Mellon University
#	Add rules to profile a system as it is build.  The target is
#	gprof.
#
# 09-Nov-87  Mike Accetta (mja) at Carnegie-Mellon University
#	Update LDDEPS to include remaining files used by .swap.sys rule
#	in order to work with RCS; add CFILES dependency to "tags"
#	rule;  added new SYSDEPS definition;  change to create
#	symbols.sort in build directory;  fix to use explicit names in
#	version files to work with RCS;  add new "checkout" rule to
#	permit manual extraction of files from RCS when the
#	dependencies aren't current;  added KCC and KCPP definitions
#	for compiling kernel modules to clear the default search list
#	to prevent accidental inclusion of external include files
#	(especially important when working with header files in RCS
#	where this can easily occur from a missing dependency and a
#	checked-in source).
#	[ V5.1(XF21) ]
#
# 24-Oct-87  David Black (dlb) at Carnegie-Mellon University
#	Name version files explicitly to avoid .BAK .CKP etc.
#
# 10-Oct-87  Mike Accetta (mja) at Carnegie-Mellon University
#	Updated to pass all four version component files to the
#	"newvers.sh" script (which now includes them as kernel
#	variables and creates a version suffix) and changed SYS_RULE_4
#	to also link kernel images with the version suffix provided by
#	this script;  corrected "clean" rule to use new "LOAD" symbol
#	(provided by the "config" program) to remove all configured
#	kernel images related files;  revised symbols.sort rule to
#	use a new MACHINEDIR variable so that it can be overridden
#	for use with directories other than ../${target_cpu}
#	[ V5.1(XF18) ]
#
# 11-Mar-87  Mike Accetta (mja) at Carnegie-Mellon University
#	Flushed all the "features.h" stuff since this is now a machine
#	independent file.  The equivalent function is now performed by
#	the "doconf" script if an appropriate features file exists in
#	the "machine" directory.
#	[ V5.1(F6) ]
#
# 19-Jan-87  Mike Accetta (mja) at Carnegie-Mellon University
#	Created (from old Makefile.vax).
#	[ V5.1(F1) ]
#
# 01-Oct-86  Mike Accetta (mja) at Carnegie-Mellon University
#	Reorganized to support simplified config program:
#	- COPTS_P variable defines the options used differently when
#	  compiling profiled kernels
#	- LDOBJS is the set of special objects used by the kernel load(s)
#	- LDDEPS is the set of dependencies for the kernel load(s)
#	- SWAPDEPS is the set of dependencies for the swapping module(s)
#	- Kernel configurations are built from a default rule defined here
#	  instead of inside config;  an artificial .swap.sys rule is used 
#	  to trigger this for each swap configuration
#	- Standard rules for building objects in the various normal, driver,
#	  and profiling cases are also defined here instead of inside config.
#	
#	Removed special rules for param.c and replaced PARAM variable
#	with include of new "confdep.h" file now generated by config;
#	also changed ioconf.c to use standard rules.
#	
#	Revised version number processing to eliminate newvers.c program and
#	only increment the version number as part of the archival process
#       rather than on every build.
#
# 18-Apr-86  Robert V. Baron (rvb) at Carnegie-Mellon University
#	Introduce new make depend stuff.
#

#
# Copyright (c) 1980, 1986 Regents of the University of California.
# All rights reserved.  The Berkeley software License Agreement
# specifies the terms and conditions for redistribution.
#

#
#  This must be here before any rules are possibly defined by the
#  machine dependent makefile fragment so that a plain "make" command
#  always works.  The config program will emit an appropriate rule to
#  cause "all" to depend on every kernel configuration it generates.
#

default: all

#
#  In order to move the link commands out of config and back into the
#  template makefile, config has been changed to emit a dendency rule
#  of the form *vmunix.sys: *vmunix.swap for each configuration so that
#  the common commands for building each configuration can be placed
#  directly in the template in the default rule for the .sys.swap
#  dependency.
#
.SUFFIXES: .swap .sys

#
#  Make sure we don't remove this by accident if interrupted at the wrong
#  time.
#
.PRECIOUS: Makefile


#
#  Compilation components
#
CC=	cc -traditional
#CPP=	${CC} -ES
CPP=	cpp
C2=	/lib/c2
LD=	ld
MD=	/usr/mach/bin/md
ENCODE=	uuencode
DECODE=	uudecode

KCC=	${CC}
#KCPP=	${KCC} -ES
KCPP=	cpp

#
#  Pre-processor environment
#
DEPENDS=  -MD
#
# OSF original sources seem to have the following CPATH instead:
#       setenv CPATH ":..:${dirs}" : ${MKINC}:../include"
# so first come local directories, followed by mach kernel include,
# followed by our includes.  sorta makes sense, cause we can't
# take _any_ mach primitives from OSF/1, but only from microkernel
# following is from Makeconf top level:
# MKREL= $(MAKECONF:h)/../../../mk/release/${target_sys}/${BCSBBASE?$(BCSBBASE:t):
# MKINC= ${MKREL}/include
MKINC = ../../../../release/include
INCLUDES= -nostdinc -I. -I${SOURCE_DIR} -I${MKINC} -I${SOURCE_DIR}/../usr/include
DEFINES= -DMACH -UCMUCS -D_KERNEL -D_BSD -DMACH_IPC_COMPAT=0 $(VOLATILE)
ALLOPTS= ${INCLUDES} ${IDENT} -DKERNEL ${DEFINES}
LINTOPTS=${ALLOPTS}

#
#  Common C-compilation flags
#
COPTS_P=${DEPENDS} ${ALLOPTS}
COPTS=	${COPTS_P}
OPTIMIZE= -g
CFLAGS=	${OPTIMIZE} ${COPTS}

# MACHINEDIR=$(SOURCE_DIR)/${target_cpu}
MACHINEDIR=$(SOURCE_DIR)/m88k

#
#  Common assembly flags
#
SFLAGS=	${DEPENDS} ${ALLOPTS} -DASSEMBLER


#
#  Path name of the version identification file.
#
FEATURES=$(MACHINEDIR)/FEATURES.h
VERSION_FILES= \
	$(SOURCE_DIR)/conf/version.major \
	$(SOURCE_DIR)/conf/version.minor \
	$(SOURCE_DIR)/conf/version.variant \
	$(SOURCE_DIR)/conf/version.build \
	$(SOURCE_DIR)/conf/version.patch

#
#  LDOBJS is the set of object files which comprise the kernel.
#  It is used both in the dependency list for each *vmunix.swap
#  rule emitted by config and also in the .sys.swap rule
#  below which links the kernel from these objects.
#  
#  LDOBJS_PREFIX and LDOBJS_SUFFIX are defined in the machine
#  dependent Makefile (if necessary).
#
LDOBJS=${LDOBJS_PREFIX} ${OBJS} ${LDOBJS_SUFFIX}

#
#  LDDEPS is the set of extra dependencies associated with each
#  *vmunix.swap rule (in addition to $LDOBJS and the swap*.o file).
#
#  LDDEPS_PREFIX is defined in the machine dependent Makefile
#  (if necessary).
#
LDDEPS=${LDDEPS_PREFIX} ${VERSION_FILES} \
	$(SOURCE_DIR)/conf/version.banner \
	$(SOURCE_DIR)/conf/version.mk \
	$(SOURCE_DIR)/conf/newvers.sh \
	$(SOURCE_DIR)/conf/copyright \
	symbols.sort

#
#  PRELDDEPS is another set of extra dependencies associated with each
#  *vmunix.swap rule (in addition to $LDOBJS and the swap*.o file).
#  It is defined in the machine dependent Makefile (if necessary).
#
#  The generated rule looks like
#	vmunix.sys : ${PRELDDEPS} ${LDOBJS} ${LDDEPS}
#

#
#  SWAPDEPS is the set of extra dependencies associated with each
#  swap*.o rule emitted by config (in addition to the
#  ../${target_cpu}/swap*.c file).
#
#  SWAPDEPS_PREFIX is defined in the machine dependent Makefile
#  (if necessary).
#
SWAPDEPS=${SWAPDEPS_PREFIX} 

#
#  SYSDEPS is the set of extra dependencies associated with each
#  *vmunix rule (in addition to *vmunix.sys).
#
#  SYSDEPS_PREFIX is defined in the machine dependent Makefile
#  (if necessary).
#
SYSDEPS=${SYSDEPS_PREFIX}



#
#  Compilation rules to generate *vmunix from *vmunix.sys
#
SYS_RULE_1=@eval `awk 'NR==1{S=$$1;next;}\
END {\
  C = "ln $@.sys $@";\
  if (S != "") {\
    C = C "; ln $@ $@" S; \
    printf "rm -f $@%s; ", S; \
  }\
  printf "echo \"%s\"; %s\n", C, C; \
}' vers.suffix`
SYS_RULE_2=
SYS_RULE_3=
SYS_RULE_4=

#
# Compilation rules to generate .o from .b
#
B_RULE_1A=rm -f $*.o; ${DECODE} 
B_RULE_1B=$*.b

#
# Compilation rules to generate .o from .o
#
O_RULE_1A=rm -f $*.o; cp 
O_RULE_1B=$*.o .

#
# Compilation rules to generate .o from .s
#
S_RULE_1A=${KCPP} ${SFLAGS} 
S_RULE_1B=$*.s >$*.i 
S_RULE_2=${AS} -o $*.o $*.i
S_RULE_3=rm -f $*.i

#
# Compilation rules to generate .o from .c for normal files
#
C_RULE_1A=${KCC} -c ${OPTIMIZE} ${COPTS} 
C_RULE_1B=$*.c
C_RULE_2=
C_RULE_3=
C_RULE_4=

C_RULE_1A_DBG=${KCC} -c -g ${COPTS} 

#
# Compilation rules to generate .o from .c for driver files
#
C_RULE_1A_D=${C_RULE_1A}
C_RULE_1B_D=${C_RULE_1B}
C_RULE_2_D=${C_RULE_2}
C_RULE_3_D=${C_RULE_3}
C_RULE_4_D=${C_RULE_4}

#
# Compilation rules to generate .o from .c for profiling routine files
#
C_RULE_1A_P=${KCC} -c -S ${OPTIMIZE} ${COPTS_P} 
C_RULE_1B_P=${C_RULE_1B}
C_RULE_2_P=ex - $*.s < ${GPROF.EX}
C_RULE_3_P=${AS} -o $*.o $*.s
C_RULE_4_P=rm -f $*.s



gprof: kgmon_on all kgmon_off

kgmon_on:
	kgmon -r -b

kgmon_off:
	kgmon -h -p
	gprof /mach >GPROF


#
#  These macros are filled in by the config program depending on the
#  current configuration.  The MACHDEP macro is replaced by the
#  contents of the machine dependent makefile template and the others
#  are replaced by the corresponding symbol definitions for the
#  configuration.
#

OBJS=syscalls.o init_sysent.o cmu_syscalls.o init_main.o kern_acct.o \
	kern_descrip.o kern_devsw.o kern_mman.o kern_proc.o kern_prot.o \
	kern_resource.o kern_sig.o kern_xxx.o mach_clock.o mach_core.o \
	kern_exec.o ldr_exec.o ldr_kload.o kern_exit.o kern_fork.o \
	kern_kmodcall.o kern_time.o kern_utctime.o mach_process.o \
	mach_signal.o kern_synch.o subr_log.o subr_prf.o subr_xxx.o \
	subr_select.o sys_generic.o sys_socket.o tty.o tty_compat.o \
	tty_conf.o tty_pty.o tty_subr.o tty_tty.o uipc_domain.o \
	uipc_mbuf.o uipc_proto.o uipc_socket.o uipc_socket2.o \
	uipc_syscalls.o uipc_usrreq.o svipc_ipc.o svipc_msg.o \
	svipc_sem.o svipc_shm.o nfs_config.o nfs_syscalls.o nfs_vfsops.o \
	nfs_vnops.o nfs_node.o nfs_hooks.o nfs_subs.o nfs_bio.o \
	nfs_socket.o nfs_serv.o nfs_srvcache.o s5fs_alloc.o \
	s5fs_config.o s5fs_inode.o s5fs_lookup.o s5fs_bmap.o \
	s5fs_vfsops.o s5fs_vnops.o inode_pager.o param.o event.o \
	kalloc.o zalloc.o lock.o sched_prim.o threadcall.o xpr.o if.o \
	if_ethersubr.o if_loop.o netisr.o raw_cb.o raw_usrreq.o route.o \
	if_ether.o in.o in_pcb.o in_proto.o ip_icmp.o ip_input.o \
	ip_output.o raw_ip.o tcp_debug.o tcp_input.o tcp_output.o \
	tcp_subr.o tcp_timer.o tcp_usrreq.o udp_usrreq.o mfs_vfsops.o \
	mfs_vnops.o ufs_vfsops.o ufs_vnops.o ufs_lookup.o ufs_alloc.o \
	ufs_disksubr.o ufs_physio.o ufs_inode.o ufs_bmap.o ufs_tables.o \
	ufs_subr.o block_io.o bsd_server.o bsd_server_side.o cons.o \
	device_misc.o device_reply_hdlr.o device_utils.o disk_io.o \
	ether_io.o inittodr.o mfs_prim.o misc.o port_hash.o \
	proc_to_task.o stubs.o server_init.o syscall.o syscall_subr.o \
	tty_io.o user_copy.o user_reply_msg.o ux_exception.o \
	ux_server_loop.o vm_unix.o dead_vfsops.o dead_vnops.o \
	fifo_vnops.o spec_vnops.o vfs_bio.o vfs_cache.o vfs_conf.o \
	vfs_flock.o vfs_kdb.o vfs_lookup.o vfs_syscalls.o vfs_subr.o \
	vfs_vnops.o in_cksum.o bsd_machdep.o conf.o m88k_exception.o \
	libc.o misc_routines.o m88k.o queue.o 

CFILES=\
	./syscalls.c \
	./init_sysent.c \
	$(SOURCE_DIR)/bsd/cmu_syscalls.c \
	$(SOURCE_DIR)/bsd/init_main.c \
	$(SOURCE_DIR)/bsd/kern_acct.c \
	$(SOURCE_DIR)/bsd/kern_descrip.c \
	$(SOURCE_DIR)/bsd/kern_devsw.c \
	$(SOURCE_DIR)/bsd/kern_mman.c \
	$(SOURCE_DIR)/bsd/kern_proc.c \
	$(SOURCE_DIR)/bsd/kern_prot.c \
	$(SOURCE_DIR)/bsd/kern_resource.c \
	$(SOURCE_DIR)/bsd/kern_sig.c \
	$(SOURCE_DIR)/bsd/kern_xxx.c \
	$(SOURCE_DIR)/bsd/mach_clock.c \
	$(SOURCE_DIR)/bsd/mach_core.c \
	$(SOURCE_DIR)/bsd/kern_exec.c \
	$(SOURCE_DIR)/bsd/ldr_exec.c \
	$(SOURCE_DIR)/bsd/ldr_kload.c \
	$(SOURCE_DIR)/bsd/kern_exit.c \
	$(SOURCE_DIR)/bsd/kern_fork.c \
	$(SOURCE_DIR)/bsd/kern_kmodcall.c \
	$(SOURCE_DIR)/bsd/kern_time.c \
	$(SOURCE_DIR)/bsd/kern_utctime.c \
	$(SOURCE_DIR)/bsd/mach_process.c \
	$(SOURCE_DIR)/bsd/mach_signal.c \
	$(SOURCE_DIR)/bsd/kern_synch.c \
	$(SOURCE_DIR)/bsd/subr_log.c \
	$(SOURCE_DIR)/bsd/subr_prf.c \
	$(SOURCE_DIR)/bsd/subr_xxx.c \
	$(SOURCE_DIR)/bsd/subr_select.c \
	$(SOURCE_DIR)/bsd/sys_generic.c \
	$(SOURCE_DIR)/bsd/sys_socket.c \
	$(SOURCE_DIR)/bsd/tty.c \
	$(SOURCE_DIR)/bsd/tty_compat.c \
	$(SOURCE_DIR)/bsd/tty_conf.c \
	$(SOURCE_DIR)/bsd/tty_pty.c \
	$(SOURCE_DIR)/bsd/tty_subr.c \
	$(SOURCE_DIR)/bsd/tty_tty.c \
	$(SOURCE_DIR)/bsd/uipc_domain.c \
	$(SOURCE_DIR)/bsd/uipc_mbuf.c \
	$(SOURCE_DIR)/bsd/uipc_proto.c \
	$(SOURCE_DIR)/bsd/uipc_socket.c \
	$(SOURCE_DIR)/bsd/uipc_socket2.c \
	$(SOURCE_DIR)/bsd/uipc_syscalls.c \
	$(SOURCE_DIR)/bsd/uipc_usrreq.c \
	$(SOURCE_DIR)/bsd/svipc_ipc.c \
	$(SOURCE_DIR)/bsd/svipc_msg.c \
	$(SOURCE_DIR)/bsd/svipc_sem.c \
	$(SOURCE_DIR)/bsd/svipc_shm.c \
	$(SOURCE_DIR)/nfs/nfs_config.c \
	$(SOURCE_DIR)/nfs/nfs_syscalls.c \
	$(SOURCE_DIR)/nfs/nfs_vfsops.c \
	$(SOURCE_DIR)/nfs/nfs_vnops.c \
	$(SOURCE_DIR)/nfs/nfs_node.c \
	$(SOURCE_DIR)/nfs/nfs_hooks.c \
	$(SOURCE_DIR)/nfs/nfs_subs.c \
	$(SOURCE_DIR)/nfs/nfs_bio.c \
	$(SOURCE_DIR)/nfs/nfs_socket.c \
	$(SOURCE_DIR)/nfs/nfs_serv.c \
	$(SOURCE_DIR)/nfs/nfs_srvcache.c \
	$(SOURCE_DIR)/s5fs/s5fs_alloc.c \
	$(SOURCE_DIR)/s5fs/s5fs_config.c \
	$(SOURCE_DIR)/s5fs/s5fs_inode.c \
	$(SOURCE_DIR)/s5fs/s5fs_lookup.c \
	$(SOURCE_DIR)/s5fs/s5fs_bmap.c \
	$(SOURCE_DIR)/s5fs/s5fs_vfsops.c \
	$(SOURCE_DIR)/s5fs/s5fs_vnops.c \
	$(SOURCE_DIR)/builtin/inode_pager.c \
	$(SOURCE_DIR)/conf/param.c \
	$(SOURCE_DIR)/kern/event.c \
	$(SOURCE_DIR)/kern/kalloc.c \
	$(SOURCE_DIR)/kern/zalloc.c \
	$(SOURCE_DIR)/kern/lock.c \
	$(SOURCE_DIR)/kern/sched_prim.c \
	$(SOURCE_DIR)/kern/threadcall.c \
	$(SOURCE_DIR)/kern/xpr.c \
	$(SOURCE_DIR)/net/if.c \
	$(SOURCE_DIR)/net/if_ethersubr.c \
	$(SOURCE_DIR)/net/if_loop.c \
	$(SOURCE_DIR)/net/netisr.c \
	$(SOURCE_DIR)/net/raw_cb.c \
	$(SOURCE_DIR)/net/raw_usrreq.c \
	$(SOURCE_DIR)/net/route.c \
	$(SOURCE_DIR)/netinet/if_ether.c \
	$(SOURCE_DIR)/netinet/in.c \
	$(SOURCE_DIR)/netinet/in_pcb.c \
	$(SOURCE_DIR)/netinet/in_proto.c \
	$(SOURCE_DIR)/netinet/ip_icmp.c \
	$(SOURCE_DIR)/netinet/ip_input.c \
	$(SOURCE_DIR)/netinet/ip_output.c \
	$(SOURCE_DIR)/netinet/raw_ip.c \
	$(SOURCE_DIR)/netinet/tcp_debug.c \
	$(SOURCE_DIR)/netinet/tcp_input.c \
	$(SOURCE_DIR)/netinet/tcp_output.c \
	$(SOURCE_DIR)/netinet/tcp_subr.c \
	$(SOURCE_DIR)/netinet/tcp_timer.c \
	$(SOURCE_DIR)/netinet/tcp_usrreq.c \
	$(SOURCE_DIR)/netinet/udp_usrreq.c \
	$(SOURCE_DIR)/ufs/mfs_vfsops.c \
	$(SOURCE_DIR)/ufs/mfs_vnops.c \
	$(SOURCE_DIR)/ufs/ufs_vfsops.c \
	$(SOURCE_DIR)/ufs/ufs_vnops.c \
	$(SOURCE_DIR)/ufs/ufs_lookup.c \
	$(SOURCE_DIR)/ufs/ufs_alloc.c \
	$(SOURCE_DIR)/ufs/ufs_disksubr.c \
	$(SOURCE_DIR)/ufs/ufs_physio.c \
	$(SOURCE_DIR)/ufs/ufs_inode.c \
	$(SOURCE_DIR)/ufs/ufs_bmap.c \
	$(SOURCE_DIR)/ufs/ufs_tables.c \
	$(SOURCE_DIR)/ufs/ufs_subr.c \
	$(SOURCE_DIR)/uxkern/block_io.c \
	$(SOURCE_DIR)/uxkern/bsd_server.c \
	$(SOURCE_DIR)/uxkern/bsd_server_side.c \
	$(SOURCE_DIR)/uxkern/cons.c \
	$(SOURCE_DIR)/uxkern/device_misc.c \
	$(SOURCE_DIR)/uxkern/device_reply_hdlr.c \
	$(SOURCE_DIR)/uxkern/device_utils.c \
	$(SOURCE_DIR)/uxkern/disk_io.c \
	$(SOURCE_DIR)/uxkern/ether_io.c \
	$(SOURCE_DIR)/uxkern/inittodr.c \
	$(SOURCE_DIR)/uxkern/mfs_prim.c \
	$(SOURCE_DIR)/uxkern/misc.c \
	$(SOURCE_DIR)/uxkern/port_hash.c \
	$(SOURCE_DIR)/uxkern/proc_to_task.c \
	$(SOURCE_DIR)/uxkern/stubs.c \
	$(SOURCE_DIR)/uxkern/server_init.c \
	$(SOURCE_DIR)/uxkern/syscall.c \
	$(SOURCE_DIR)/uxkern/syscall_subr.c \
	$(SOURCE_DIR)/uxkern/tty_io.c \
	$(SOURCE_DIR)/uxkern/user_copy.c \
	$(SOURCE_DIR)/uxkern/user_reply_msg.c \
	$(SOURCE_DIR)/uxkern/ux_exception.c \
	$(SOURCE_DIR)/uxkern/ux_server_loop.c \
	$(SOURCE_DIR)/uxkern/vm_unix.c \
	$(SOURCE_DIR)/vfs/dead_vfsops.c \
	$(SOURCE_DIR)/vfs/dead_vnops.c \
	$(SOURCE_DIR)/vfs/fifo_vnops.c \
	$(SOURCE_DIR)/vfs/spec_vnops.c \
	$(SOURCE_DIR)/vfs/vfs_bio.c \
	$(SOURCE_DIR)/vfs/vfs_cache.c \
	$(SOURCE_DIR)/vfs/vfs_conf.c \
	$(SOURCE_DIR)/vfs/vfs_flock.c \
	$(SOURCE_DIR)/vfs/vfs_kdb.c \
	$(SOURCE_DIR)/vfs/vfs_lookup.c \
	$(SOURCE_DIR)/vfs/vfs_syscalls.c \
	$(SOURCE_DIR)/vfs/vfs_subr.c \
	$(SOURCE_DIR)/vfs/vfs_vnops.c \
	$(SOURCE_DIR)/m88k/in_cksum.c \
	$(SOURCE_DIR)/m88k/bsd_machdep.c \
	$(SOURCE_DIR)/m88k/conf.c \
	$(SOURCE_DIR)/m88k/m88k_exception.c \
	$(SOURCE_DIR)/m88k/libc.c \
	$(SOURCE_DIR)/m88k/misc_routines.c \
	$(SOURCE_DIR)/m88k/queue.c 
COBJS=syscalls.o init_sysent.o cmu_syscalls.o init_main.o kern_acct.o \
	kern_descrip.o kern_devsw.o kern_mman.o kern_proc.o kern_prot.o \
	kern_resource.o kern_sig.o kern_xxx.o mach_clock.o mach_core.o \
	kern_exec.o ldr_exec.o ldr_kload.o kern_exit.o kern_fork.o \
	kern_kmodcall.o kern_time.o kern_utctime.o mach_process.o \
	mach_signal.o kern_synch.o subr_log.o subr_prf.o subr_xxx.o \
	subr_select.o sys_generic.o sys_socket.o tty.o tty_compat.o \
	tty_conf.o tty_pty.o tty_subr.o tty_tty.o uipc_domain.o \
	uipc_mbuf.o uipc_proto.o uipc_socket.o uipc_socket2.o \
	uipc_syscalls.o uipc_usrreq.o svipc_ipc.o svipc_msg.o \
	svipc_sem.o svipc_shm.o nfs_config.o nfs_syscalls.o nfs_vfsops.o \
	nfs_vnops.o nfs_node.o nfs_hooks.o nfs_subs.o nfs_bio.o \
	nfs_socket.o nfs_serv.o nfs_srvcache.o s5fs_alloc.o \
	s5fs_config.o s5fs_inode.o s5fs_lookup.o s5fs_bmap.o \
	s5fs_vfsops.o s5fs_vnops.o inode_pager.o param.o event.o \
	kalloc.o zalloc.o lock.o sched_prim.o threadcall.o xpr.o if.o \
	if_ethersubr.o if_loop.o netisr.o raw_cb.o raw_usrreq.o route.o \
	if_ether.o in.o in_pcb.o in_proto.o ip_icmp.o ip_input.o \
	ip_output.o raw_ip.o tcp_debug.o tcp_input.o tcp_output.o \
	tcp_subr.o tcp_timer.o tcp_usrreq.o udp_usrreq.o mfs_vfsops.o \
	mfs_vnops.o ufs_vfsops.o ufs_vnops.o ufs_lookup.o ufs_alloc.o \
	ufs_disksubr.o ufs_physio.o ufs_inode.o ufs_bmap.o ufs_tables.o \
	ufs_subr.o block_io.o bsd_server.o bsd_server_side.o cons.o \
	device_misc.o device_reply_hdlr.o device_utils.o disk_io.o \
	ether_io.o inittodr.o mfs_prim.o misc.o port_hash.o \
	proc_to_task.o stubs.o server_init.o syscall.o syscall_subr.o \
	tty_io.o user_copy.o user_reply_msg.o ux_exception.o \
	ux_server_loop.o vm_unix.o dead_vfsops.o dead_vnops.o \
	fifo_vnops.o spec_vnops.o vfs_bio.o vfs_cache.o vfs_conf.o \
	vfs_flock.o vfs_kdb.o vfs_lookup.o vfs_syscalls.o vfs_subr.o \
	vfs_vnops.o in_cksum.o bsd_machdep.o conf.o m88k_exception.o \
	libc.o misc_routines.o queue.o 

SFILES=\
	$(SOURCE_DIR)/m88k/m88k.s 
SOBJS=m88k.o 

BFILES=
ORDERED=

#
# Mach Operating System
# Copyright (c) 1989 Carnegie-Mellon University
# All rights reserved.  The CMU software License Agreement specifies
# the terms and conditions for use and redistribution.
#  
#
# HISTORY
# $Log:	Makefile.delta88k,v $
# Revision 1.2  92/03/27  10:05:09  pha
#	add release area crt0.o to LDOBJS_PREFIX
#
# Revision 1.2  92/02/27  12:08:42  pha
#	temporarily changed the LDFLAGS to ignore __start.  need to
#	fix this, more than likely.
#
# Revision 1.1  92/02/11  11:44:04  pha
# Initial revision
#
# Revision 1.1.1.1  92/01/14  11:39:30  pha
# OSF/1 V3.1 Unix Server
# 

###############################################################################
#BEGIN	Machine dependent Makefile fragment for the m88k
###############################################################################

#tmp

SYS_RULE_2=-@
SYS_RULE_3=-@
SYS_RULE_4=-@
MD=md

#LIBS_P=-lc_p
LIBS= -lthreads -lmach_sa

LDOBJS_PREFIX=../../../../release/lib/crt0.o
# LDFLAGS= -x -e __start -L${MKLIB}
LDFLAGS= -x -e start -L${MKLIB}

###############################################################################
#END	Machine dependent Makefile fragment for the m88k
###############################################################################


#
#  Default rule used to build a *vmunix.sys configuration from the
#  object list and a particular *vmunix.swap module.  The *vmunix.swap
#  module is a normal object file compiled from the appropriate swap*.c
#  file and then copied to the *vmunix.swap name to trigger the full
#  kernel link using this default rule.
#

.swap.sys:
	@/bin/sh $(SOURCE_DIR)/conf/newvers.sh \
			 $(SOURCE_DIR)/conf/copyright \
			 `cat ${VERSION_FILES}` \
			 "`cat $(SOURCE_DIR)/conf/version.banner`" \
			 "`cat $(SOURCE_DIR)/conf/version.mk`" \
			 "`cat $(SOURCE_DIR)/conf/version.norma_mk`"
	@${CC} -c vers.c
	@rm -f $* $*.sys
	@echo link-editing $*.sys
	@${LD} ${LDFLAGS} ${LDOBJS} vers.o $*.swap ${LIBS}
	@echo stripping $*.sys
#	@-xstrip a.out
#	@size a.out
	@chmod 755 a.out
	@mv a.out $*.sys



#
#  OBJSDEPS is the set of files (defined in the machine dependent
#  template if necessary) which all objects depend on (such as an
#  in-line assembler expansion filter
#

${OBJS}: ${OBJSDEPS}



#
#  This macro is replaced by three rules per configuration, plus a
#  final definition for the LOAD symbol consisting of all configuration
#  names and a dependency of "all" on this symbol (so that the
#  "default" rule above will build everything).  The three rules in
#  each configuration are:
#
#  - a *vmunix from *vmunix.sys dependency using the SYS_RULE_* rules,
#  - a *vmunix.swap from LDDEPS, swap*.o, and LDDEPS dependency that
#    simply copies the swap file to the target name, and
#  - a swap*.o from swap*.c and SWAPDEPS dependency using the C_RULE_* rules.
#

vmunix .ORDER: vmunix.sys ${SYSDEPS}
	${SYS_RULE_1}
	${SYS_RULE_2}
	${SYS_RULE_3}
	${SYS_RULE_4}

vmunix.sys:${P} ${PRELDDEPS} ${LDOBJS} ${LDDEPS}

vmunix.swap: swapgeneric.o
	@cp swapgeneric.o $@

swapgeneric.o: $(SOURCE_DIR)/machine/swapgeneric.c ${SWAPDEPS}
	${C_RULE_1A}$(SOURCE_DIR)/machine/${C_RULE_1B}
	${C_RULE_2}
	${C_RULE_3}
	${C_RULE_4}

LOAD = vmunix

all: ${LOAD}




#
#  Rules for components which are not part of the kernel proper or that
#  need to be built in a special manner.
#

genassym.o: $(MACHINEDIR)/genassym.c
	${KCC} -c ${COPTS_P} $(MACHINEDIR)/genassym.c

assym.s: genassym.o
	${KCC} genassym.o
	./a.out > assym.s; rm -f a.out

locore.o: assym.s ${LOCORE_HEADS}

#
#  Mach IPC-based interfaces
#

#  Explicit dependencies on generated files,
#  to ensure that Mig has been run by the time
#  these files are compiled.

bsd_server.o: uxkern/bsd_1_server.c uxkern/bsd_types_gen.h \
	uxkern/bsd_2_user.c uxkern/bsd_2_server.c

bsd_server_side.o: uxkern/bsd_types_gen.h

inode_pager.o: mach/memory_object_server.c

misc.o: mach/default_pager_object_user.c

mach_signal.o: uxkern/bsd_2.h

#  The Mig-generated files go into subdirectories.
#  These macros create the subdirectories as they are needed.

MAKE_MACH = [ -d mach ] || mkdir mach
MAKE_UXKERN = [ -d uxkern ] || mkdir uxkern

MIG = mig
MIGFLAGS = ${INCLUDES} ${IDENT} ${DEFINES}

BSD_1_FILES = uxkern/bsd_1_server.c

$(BSD_1_FILES): uxkern/bsd_types_gen.h $(SOURCE_DIR)/uxkern/bsd_1.defs
	-$(MAKE_UXKERN)
	$(MIG) -MD $(MIGFLAGS) -header /dev/null -user /dev/null -server uxkern/bsd_1_server.c $(SOURCE_DIR)/uxkern/bsd_1.defs

BSD_2_FILES = uxkern/bsd_2.h uxkern/bsd_2_user.c uxkern/bsd_2_server.c

$(BSD_2_FILES): $(SOURCE_DIR)/uxkern/bsd_2.defs	uxkern/bsd_types_gen.h 
	-$(MAKE_UXKERN)
	$(MIG) -MD $(MIGFLAGS) -header uxkern/bsd_2.h -user uxkern/bsd_2_user.c -server uxkern/bsd_2_server.c $(SOURCE_DIR)/uxkern/bsd_2.defs

uxkern/bsd_types_gen.h : bsd_types_gen
	-$(MAKE_UXKERN)
	./bsd_types_gen > uxkern/bsd_types_gen.h

bsd_types_gen : bsd_types_gen.o
	${KCC} -o bsd_types_gen bsd_types_gen.o

bsd_types_gen.o : $(SOURCE_DIR)/uxkern/bsd_types_gen.c
	${KCC} -c ${COPTS_P} $(SOURCE_DIR)/uxkern/bsd_types_gen.c
# Use COPTS_P because no need to optimize and don't want profiling.

MEMOBJ_FILES = mach/memory_object_server.c

$(MEMOBJ_FILES): $(MKINC)/mach/memory_object.defs
	-$(MAKE_MACH)
	$(MIG) -MD $(MIGFLAGS) -header /dev/null -user /dev/null -server mach/memory_object_server.c $(MKINC)/mach/memory_object.defs

MEMOBJ_DEFAULT_FILES = mach/memory_object_default_server.c

$(MEMOBJ_DEFAULT_FILES): $(MKINC)/mach/memory_object_default.defs
	-$(MAKE_MACH)
	$(MIG) -MD $(MIGFLAGS) -header /dev/null -user /dev/null -server mach/memory_object_default_server.c $(MKINC)/mach/memory_object_default.defs

DEFAULT_PAGER_OBJECT_FILES = mach/default_pager_object_user.c \
				mach/default_pager_object.h

$(DEFAULT_PAGER_OBJECT_FILES): $(MKINC)/mach/default_pager_object.defs
	-$(MAKE_MACH)
	$(MIG) -MD $(MIGFLAGS) -header mach/default_pager_object.h -user mach/default_pager_object_user.c -server /dev/null $(MKINC)/mach/default_pager_object.defs

#  N.B.  There is always an empty artificial dependency file M.d
#  (created by config) which will never be integrated and simply
#  prevents the wild-card expansion below from failing.
#
#  The default exit rule now brings Makedep up to date, so it
#  shouldn't be necessary to execute this rule manually.
#
#  NOTE: make optimizes occurrences of "../" out of the expanded path names
#  that result from catenating elements of VPATH with the names found in the
#  Makefile.  This prevents cc from translating them back to the same name
#  used in the Makefile when it writes the ".d" file.  The for loop fixes this.

Makedep: ./*.d
	@for f in ./*.d; do \
		for d in `echo "$$VPATH " | \
				sed -e 's?:? ?g' -e 's?/[^/ ]* ? ?g'`; do \
			sed 's?\([ 	]\)'$$d/'?\1../?g' $$f >$$f.NEW ; \
			mv $$f.NEW $$f; \
		done ; \
	 done
	${MD} -u Makedep -f -d *.d

#.EXIT:	Makedep

depend:	Makedep

#
#  Permit manually forced checkout of modules when the dependency
#  information is not current.
#

checkout:	${USE}



#
#  Clean up the current build directory.
#

clean:
	@for f in ${LOAD}; do echo rm -f $$f $$f.* && rm -f $$f $$f.*; done
	rm -f eddep tags *.[chos] locore.i \
		migfiles \
		errs linterrs makelinks *.log *LOG* ${CLEAN_EXTRA}


#
#  Run "lint" on the current build directory.  This will often be done
#  with a special configuration that defines the union of all options
#  used in all configurations so that all combinations are checked.
#  The LINTFILES variable allows lint to be easily run on an optional
#  sub-set of files specified on the make command line when this is
#  desired.
#

LINTFILES=$(MACHINEDIR)/Locore.c ${CFILES} $(MACHINEDIR)/swapgeneric.c ioconf.c

lint:	ALWAYS assym.s
	@lint -n -hbxn -DGENERIC ${LINTOPTS} ${LINTFILES} | \
	    egrep -v 'struct/union .* never defined' | \
	    egrep -v 'possible pointer alignment problem'

ALWAYS:

symbols.sort: $(MACHINEDIR)/symbols.raw
	-grep -v '^#' $(MACHINEDIR)/symbols.raw \
	    | sed 's/^	//' | sort -u > symbols.tmp
	-mv -f symbols.tmp symbols.sort

#
#  This macro is replaced by the set of rules which build everything in
#  OBJS.  The extra dependencies for each object file are inserted
#  following this by md which uses the keys on the sentinel line
#  below.
#

syscalls.o: syscalls.c
	${C_RULE_1A}${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

init_sysent.o: init_sysent.c
	${C_RULE_1A}${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

cmu_syscalls.o: $(SOURCE_DIR)/bsd/cmu_syscalls.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

init_main.o: $(SOURCE_DIR)/bsd/init_main.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

kern_acct.o: $(SOURCE_DIR)/bsd/kern_acct.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

kern_descrip.o: $(SOURCE_DIR)/bsd/kern_descrip.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

kern_devsw.o: $(SOURCE_DIR)/bsd/kern_devsw.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

kern_mman.o: $(SOURCE_DIR)/bsd/kern_mman.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

kern_proc.o: $(SOURCE_DIR)/bsd/kern_proc.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

kern_prot.o: $(SOURCE_DIR)/bsd/kern_prot.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

kern_resource.o: $(SOURCE_DIR)/bsd/kern_resource.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

kern_sig.o: $(SOURCE_DIR)/bsd/kern_sig.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

kern_xxx.o: $(SOURCE_DIR)/bsd/kern_xxx.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

mach_clock.o: $(SOURCE_DIR)/bsd/mach_clock.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

mach_core.o: $(SOURCE_DIR)/bsd/mach_core.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

kern_exec.o: $(SOURCE_DIR)/bsd/kern_exec.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

ldr_exec.o: $(SOURCE_DIR)/bsd/ldr_exec.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

ldr_kload.o: $(SOURCE_DIR)/bsd/ldr_kload.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

kern_exit.o: $(SOURCE_DIR)/bsd/kern_exit.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

kern_fork.o: $(SOURCE_DIR)/bsd/kern_fork.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

kern_kmodcall.o: $(SOURCE_DIR)/bsd/kern_kmodcall.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

kern_time.o: $(SOURCE_DIR)/bsd/kern_time.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

kern_utctime.o: $(SOURCE_DIR)/bsd/kern_utctime.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

mach_process.o: $(SOURCE_DIR)/bsd/mach_process.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

mach_signal.o: $(SOURCE_DIR)/bsd/mach_signal.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

kern_synch.o: $(SOURCE_DIR)/bsd/kern_synch.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

subr_log.o: $(SOURCE_DIR)/bsd/subr_log.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

subr_prf.o: $(SOURCE_DIR)/bsd/subr_prf.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

subr_xxx.o: $(SOURCE_DIR)/bsd/subr_xxx.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

subr_select.o: $(SOURCE_DIR)/bsd/subr_select.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

sys_generic.o: $(SOURCE_DIR)/bsd/sys_generic.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

sys_socket.o: $(SOURCE_DIR)/bsd/sys_socket.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

tty.o: $(SOURCE_DIR)/bsd/tty.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

tty_compat.o: $(SOURCE_DIR)/bsd/tty_compat.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

tty_conf.o: $(SOURCE_DIR)/bsd/tty_conf.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

tty_pty.o: $(SOURCE_DIR)/bsd/tty_pty.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

tty_subr.o: $(SOURCE_DIR)/bsd/tty_subr.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

tty_tty.o: $(SOURCE_DIR)/bsd/tty_tty.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

uipc_domain.o: $(SOURCE_DIR)/bsd/uipc_domain.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

uipc_mbuf.o: $(SOURCE_DIR)/bsd/uipc_mbuf.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

uipc_proto.o: $(SOURCE_DIR)/bsd/uipc_proto.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

uipc_socket.o: $(SOURCE_DIR)/bsd/uipc_socket.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

uipc_socket2.o: $(SOURCE_DIR)/bsd/uipc_socket2.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

uipc_syscalls.o: $(SOURCE_DIR)/bsd/uipc_syscalls.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

uipc_usrreq.o: $(SOURCE_DIR)/bsd/uipc_usrreq.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

svipc_ipc.o: $(SOURCE_DIR)/bsd/svipc_ipc.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

svipc_msg.o: $(SOURCE_DIR)/bsd/svipc_msg.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

svipc_sem.o: $(SOURCE_DIR)/bsd/svipc_sem.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

svipc_shm.o: $(SOURCE_DIR)/bsd/svipc_shm.c
	${C_RULE_1A}$(SOURCE_DIR)/bsd/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

nfs_config.o: $(SOURCE_DIR)/nfs/nfs_config.c
	${C_RULE_1A}$(SOURCE_DIR)/nfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

nfs_syscalls.o: $(SOURCE_DIR)/nfs/nfs_syscalls.c
	${C_RULE_1A}$(SOURCE_DIR)/nfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

nfs_vfsops.o: $(SOURCE_DIR)/nfs/nfs_vfsops.c
	${C_RULE_1A}$(SOURCE_DIR)/nfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

nfs_vnops.o: $(SOURCE_DIR)/nfs/nfs_vnops.c
	${C_RULE_1A}$(SOURCE_DIR)/nfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

nfs_node.o: $(SOURCE_DIR)/nfs/nfs_node.c
	${C_RULE_1A}$(SOURCE_DIR)/nfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

nfs_hooks.o: $(SOURCE_DIR)/nfs/nfs_hooks.c
	${C_RULE_1A}$(SOURCE_DIR)/nfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

nfs_subs.o: $(SOURCE_DIR)/nfs/nfs_subs.c
	${C_RULE_1A}$(SOURCE_DIR)/nfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

nfs_bio.o: $(SOURCE_DIR)/nfs/nfs_bio.c
	${C_RULE_1A}$(SOURCE_DIR)/nfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

nfs_socket.o: $(SOURCE_DIR)/nfs/nfs_socket.c
	${C_RULE_1A}$(SOURCE_DIR)/nfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

nfs_serv.o: $(SOURCE_DIR)/nfs/nfs_serv.c
	${C_RULE_1A}$(SOURCE_DIR)/nfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

nfs_srvcache.o: $(SOURCE_DIR)/nfs/nfs_srvcache.c
	${C_RULE_1A}$(SOURCE_DIR)/nfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

s5fs_alloc.o: $(SOURCE_DIR)/s5fs/s5fs_alloc.c
	${C_RULE_1A}$(SOURCE_DIR)/s5fs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

s5fs_config.o: $(SOURCE_DIR)/s5fs/s5fs_config.c
	${C_RULE_1A}$(SOURCE_DIR)/s5fs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

s5fs_inode.o: $(SOURCE_DIR)/s5fs/s5fs_inode.c
	${C_RULE_1A}$(SOURCE_DIR)/s5fs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

s5fs_lookup.o: $(SOURCE_DIR)/s5fs/s5fs_lookup.c
	${C_RULE_1A}$(SOURCE_DIR)/s5fs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

s5fs_bmap.o: $(SOURCE_DIR)/s5fs/s5fs_bmap.c
	${C_RULE_1A}$(SOURCE_DIR)/s5fs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

s5fs_vfsops.o: $(SOURCE_DIR)/s5fs/s5fs_vfsops.c
	${C_RULE_1A}$(SOURCE_DIR)/s5fs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

s5fs_vnops.o: $(SOURCE_DIR)/s5fs/s5fs_vnops.c
	${C_RULE_1A}$(SOURCE_DIR)/s5fs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

inode_pager.o: $(SOURCE_DIR)/builtin/inode_pager.c
	${C_RULE_1A}$(SOURCE_DIR)/builtin/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

param.o: $(SOURCE_DIR)/conf/param.c
	${C_RULE_1A}$(SOURCE_DIR)/conf/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

event.o: $(SOURCE_DIR)/kern/event.c
	${C_RULE_1A}$(SOURCE_DIR)/kern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

kalloc.o: $(SOURCE_DIR)/kern/kalloc.c
	${C_RULE_1A}$(SOURCE_DIR)/kern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

zalloc.o: $(SOURCE_DIR)/kern/zalloc.c
	${C_RULE_1A}$(SOURCE_DIR)/kern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

lock.o: $(SOURCE_DIR)/kern/lock.c
	${C_RULE_1A}$(SOURCE_DIR)/kern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

sched_prim.o: $(SOURCE_DIR)/kern/sched_prim.c
	${C_RULE_1A}$(SOURCE_DIR)/kern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

threadcall.o: $(SOURCE_DIR)/kern/threadcall.c
	${C_RULE_1A}$(SOURCE_DIR)/kern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

xpr.o: $(SOURCE_DIR)/kern/xpr.c
	${C_RULE_1A}$(SOURCE_DIR)/kern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

if.o: $(SOURCE_DIR)/net/if.c
	${C_RULE_1A}$(SOURCE_DIR)/net/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

if_ethersubr.o: $(SOURCE_DIR)/net/if_ethersubr.c
	${C_RULE_1A}$(SOURCE_DIR)/net/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

if_loop.o: $(SOURCE_DIR)/net/if_loop.c
	${C_RULE_1A}$(SOURCE_DIR)/net/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

netisr.o: $(SOURCE_DIR)/net/netisr.c
	${C_RULE_1A}$(SOURCE_DIR)/net/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

raw_cb.o: $(SOURCE_DIR)/net/raw_cb.c
	${C_RULE_1A}$(SOURCE_DIR)/net/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

raw_usrreq.o: $(SOURCE_DIR)/net/raw_usrreq.c
	${C_RULE_1A}$(SOURCE_DIR)/net/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

route.o: $(SOURCE_DIR)/net/route.c
	${C_RULE_1A}$(SOURCE_DIR)/net/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

if_ether.o: $(SOURCE_DIR)/netinet/if_ether.c
	${C_RULE_1A}$(SOURCE_DIR)/netinet/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

in.o: $(SOURCE_DIR)/netinet/in.c
	${C_RULE_1A}$(SOURCE_DIR)/netinet/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

in_pcb.o: $(SOURCE_DIR)/netinet/in_pcb.c
	${C_RULE_1A}$(SOURCE_DIR)/netinet/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

in_proto.o: $(SOURCE_DIR)/netinet/in_proto.c
	${C_RULE_1A}$(SOURCE_DIR)/netinet/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

ip_icmp.o: $(SOURCE_DIR)/netinet/ip_icmp.c
	${C_RULE_1A}$(SOURCE_DIR)/netinet/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

ip_input.o: $(SOURCE_DIR)/netinet/ip_input.c
	${C_RULE_1A}$(SOURCE_DIR)/netinet/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

ip_output.o: $(SOURCE_DIR)/netinet/ip_output.c
	${C_RULE_1A}$(SOURCE_DIR)/netinet/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

raw_ip.o: $(SOURCE_DIR)/netinet/raw_ip.c
	${C_RULE_1A}$(SOURCE_DIR)/netinet/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

tcp_debug.o: $(SOURCE_DIR)/netinet/tcp_debug.c
	${C_RULE_1A}$(SOURCE_DIR)/netinet/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

tcp_input.o: $(SOURCE_DIR)/netinet/tcp_input.c
	${C_RULE_1A}$(SOURCE_DIR)/netinet/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

tcp_output.o: $(SOURCE_DIR)/netinet/tcp_output.c
	${C_RULE_1A}$(SOURCE_DIR)/netinet/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

tcp_subr.o: $(SOURCE_DIR)/netinet/tcp_subr.c
	${C_RULE_1A}$(SOURCE_DIR)/netinet/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

tcp_timer.o: $(SOURCE_DIR)/netinet/tcp_timer.c
	${C_RULE_1A}$(SOURCE_DIR)/netinet/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

tcp_usrreq.o: $(SOURCE_DIR)/netinet/tcp_usrreq.c
	${C_RULE_1A}$(SOURCE_DIR)/netinet/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

udp_usrreq.o: $(SOURCE_DIR)/netinet/udp_usrreq.c
	${C_RULE_1A}$(SOURCE_DIR)/netinet/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

mfs_vfsops.o: $(SOURCE_DIR)/ufs/mfs_vfsops.c
	${C_RULE_1A}$(SOURCE_DIR)/ufs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

mfs_vnops.o: $(SOURCE_DIR)/ufs/mfs_vnops.c
	${C_RULE_1A}$(SOURCE_DIR)/ufs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

ufs_vfsops.o: $(SOURCE_DIR)/ufs/ufs_vfsops.c
	${C_RULE_1A}$(SOURCE_DIR)/ufs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

ufs_vnops.o: $(SOURCE_DIR)/ufs/ufs_vnops.c
	${C_RULE_1A}$(SOURCE_DIR)/ufs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

ufs_lookup.o: $(SOURCE_DIR)/ufs/ufs_lookup.c
	${C_RULE_1A}$(SOURCE_DIR)/ufs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

ufs_alloc.o: $(SOURCE_DIR)/ufs/ufs_alloc.c
	${C_RULE_1A}$(SOURCE_DIR)/ufs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

ufs_disksubr.o: $(SOURCE_DIR)/ufs/ufs_disksubr.c
	${C_RULE_1A}$(SOURCE_DIR)/ufs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

ufs_physio.o: $(SOURCE_DIR)/ufs/ufs_physio.c
	${C_RULE_1A}$(SOURCE_DIR)/ufs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

ufs_inode.o: $(SOURCE_DIR)/ufs/ufs_inode.c
	${C_RULE_1A}$(SOURCE_DIR)/ufs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

ufs_bmap.o: $(SOURCE_DIR)/ufs/ufs_bmap.c
	${C_RULE_1A}$(SOURCE_DIR)/ufs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

ufs_tables.o: $(SOURCE_DIR)/ufs/ufs_tables.c
	${C_RULE_1A}$(SOURCE_DIR)/ufs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

ufs_subr.o: $(SOURCE_DIR)/ufs/ufs_subr.c
	${C_RULE_1A}$(SOURCE_DIR)/ufs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

block_io.o: $(SOURCE_DIR)/uxkern/block_io.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

bsd_server.o: $(SOURCE_DIR)/uxkern/bsd_server.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

bsd_server_side.o: $(SOURCE_DIR)/uxkern/bsd_server_side.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

cons.o: $(SOURCE_DIR)/uxkern/cons.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

device_misc.o: $(SOURCE_DIR)/uxkern/device_misc.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

device_reply_hdlr.o: $(SOURCE_DIR)/uxkern/device_reply_hdlr.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

device_utils.o: $(SOURCE_DIR)/uxkern/device_utils.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

disk_io.o: $(SOURCE_DIR)/uxkern/disk_io.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

ether_io.o: $(SOURCE_DIR)/uxkern/ether_io.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

inittodr.o: $(SOURCE_DIR)/uxkern/inittodr.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

mfs_prim.o: $(SOURCE_DIR)/uxkern/mfs_prim.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

misc.o: $(SOURCE_DIR)/uxkern/misc.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

port_hash.o: $(SOURCE_DIR)/uxkern/port_hash.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

proc_to_task.o: $(SOURCE_DIR)/uxkern/proc_to_task.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

stubs.o: $(SOURCE_DIR)/uxkern/stubs.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

server_init.o: $(SOURCE_DIR)/uxkern/server_init.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

syscall.o: $(SOURCE_DIR)/uxkern/syscall.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

syscall_subr.o: $(SOURCE_DIR)/uxkern/syscall_subr.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

tty_io.o: $(SOURCE_DIR)/uxkern/tty_io.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

user_copy.o: $(SOURCE_DIR)/uxkern/user_copy.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

user_reply_msg.o: $(SOURCE_DIR)/uxkern/user_reply_msg.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

ux_exception.o: $(SOURCE_DIR)/uxkern/ux_exception.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

ux_server_loop.o: $(SOURCE_DIR)/uxkern/ux_server_loop.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

vm_unix.o: $(SOURCE_DIR)/uxkern/vm_unix.c
	${C_RULE_1A}$(SOURCE_DIR)/uxkern/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

dead_vfsops.o: $(SOURCE_DIR)/vfs/dead_vfsops.c
	${C_RULE_1A}$(SOURCE_DIR)/vfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

dead_vnops.o: $(SOURCE_DIR)/vfs/dead_vnops.c
	${C_RULE_1A}$(SOURCE_DIR)/vfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

fifo_vnops.o: $(SOURCE_DIR)/vfs/fifo_vnops.c
	${C_RULE_1A}$(SOURCE_DIR)/vfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

spec_vnops.o: $(SOURCE_DIR)/vfs/spec_vnops.c
	${C_RULE_1A}$(SOURCE_DIR)/vfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

vfs_bio.o: $(SOURCE_DIR)/vfs/vfs_bio.c
	${C_RULE_1A}$(SOURCE_DIR)/vfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

vfs_cache.o: $(SOURCE_DIR)/vfs/vfs_cache.c
	${C_RULE_1A}$(SOURCE_DIR)/vfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

vfs_conf.o: $(SOURCE_DIR)/vfs/vfs_conf.c
	${C_RULE_1A}$(SOURCE_DIR)/vfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

vfs_flock.o: $(SOURCE_DIR)/vfs/vfs_flock.c
	${C_RULE_1A}$(SOURCE_DIR)/vfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

vfs_kdb.o: $(SOURCE_DIR)/vfs/vfs_kdb.c
	${C_RULE_1A}$(SOURCE_DIR)/vfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

vfs_lookup.o: $(SOURCE_DIR)/vfs/vfs_lookup.c
	${C_RULE_1A}$(SOURCE_DIR)/vfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

vfs_syscalls.o: $(SOURCE_DIR)/vfs/vfs_syscalls.c
	${C_RULE_1A}$(SOURCE_DIR)/vfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

vfs_subr.o: $(SOURCE_DIR)/vfs/vfs_subr.c
	${C_RULE_1A}$(SOURCE_DIR)/vfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

vfs_vnops.o: $(SOURCE_DIR)/vfs/vfs_vnops.c
	${C_RULE_1A}$(SOURCE_DIR)/vfs/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

in_cksum.o: $(SOURCE_DIR)/m88k/in_cksum.c
	${C_RULE_1A}$(SOURCE_DIR)/m88k/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

bsd_machdep.o: $(SOURCE_DIR)/m88k/bsd_machdep.c
	${C_RULE_1A}$(SOURCE_DIR)/m88k/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

conf.o: $(SOURCE_DIR)/m88k/conf.c
	${C_RULE_1A}$(SOURCE_DIR)/m88k/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

m88k_exception.o: $(SOURCE_DIR)/m88k/m88k_exception.c
	${C_RULE_1A}$(SOURCE_DIR)/m88k/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

libc.o: $(SOURCE_DIR)/m88k/libc.c
	${C_RULE_1A}$(SOURCE_DIR)/m88k/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

misc_routines.o: $(SOURCE_DIR)/m88k/misc_routines.c
	${C_RULE_1A}$(SOURCE_DIR)/m88k/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}

m88k.o: $(SOURCE_DIR)/m88k/m88k.s
	${S_RULE_1A}$(SOURCE_DIR)/m88k/${S_RULE_1B}; \
	${S_RULE_2}; \
	${S_RULE_3}

queue.o: $(SOURCE_DIR)/m88k/queue.c
	${C_RULE_1A}$(SOURCE_DIR)/m88k/${C_RULE_1B}; \
	${C_RULE_2}; \
	${C_RULE_3}; \
	${C_RULE_4}


-include Makedep
