File:  [Apple Darwin 0.x] / driverkit / libDriver / Makefile
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 17:37:50 2018 UTC (8 years, 3 months ago) by root
Branches: MAIN, Apple
CVS tags: HEAD, Darwin03, Darwin02
Darwin 0.2 Driver Kit

#
# 	Makefile for libDriver.
#
#	Builds up to 32 targets:
#		i386 and ppc
#		both DEBUG and RELEASE
#		both kernel and user mode
#		both stripped and unstripped
#
# Currently the stripped versions are installed in /usr/local/lib/driverkit.
# Eventually they'll be installed in /usr/lib/driverkit.
#

MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles
include $(MAKEFILEDIR)/platform.make

BUILD_NAME=libDriver
BUILD_VERS=.A
COMPAT_VERS=122

ifneq "" "$(wildcard /bin/mkdirs)"
  MKDIRS = /bin/mkdirs
else
  MKDIRS = /bin/mkdir -p
endif

INSTALL_DIR= /usr/lib/
INSTALL_LOCAL_DIR= /usr/local/lib/
INSTALLHDRS_LOCAL_DIR=$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/Versions/B/PrivateHeaders/driverkit
AUDIOHDRS_LOCAL_DIR=$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/Versions/B/PrivateHeaders/audio

#
# OBJROOT and SYMROOT are overridden by RC tools for builds from read-only
# source. OBJDIR is where libraries are built. .o files are placed in
# OBJROOT/xxx, where xxx is something like 68kDebug or i386Release.
# 
#
OBJROOT= .
SYMROOT= .
OBJDIR=$(OBJROOT)/libs
SYMDIR=$(SYMROOT)/syms

#
# Directories containing 'mode-dependent' source.
#
SOURCE_DIRS= User Kernel ppc i386 eisa pci pcmcia

AR= ar
LD= ld
CC= cc
MIG= /usr/bin/mig

MACHINE=i386
MACHINE_LIST=ppc i386
BUS_LIST=eisa pci pcmcia

ARFLAGS= rucv
ARCHFULL_RC_CFLAGS = $(foreach X, $(RC_ARCHS),$(addprefix -arch , $(X)))
ARCHLESS_RC_CFLAGS = $(filter-out $(ARCHFULL_RC_CFLAGS), $(RC_CFLAGS))

#COMMON_CFLAGS = -g $(ARCHLESS_RC_CFLAGS) -fno-omit-frame-pointer -I.. -I. -MD -I$(LOCAL_DEVELOPER_DIR)/Headers -Wformat -Wno-precomp -D_POSIX_SOURCE -static

COMMON_CFLAGS = -g  -nostdinc $(ARCHLESS_RC_CFLAGS) -fno-omit-frame-pointer -I.. -I. -MD -I$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/PrivateHeaders   -I$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/Headers -I$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/PrivateHeaders/bsd -I$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/PrivateHeaders/machdep -I$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/Headers/bsd -F$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks -Wformat -Wno-precomp -traditional-cpp

DEBUG_CFLAGS=	-g -DDEBUG -DDDM_DEBUG
PROFILE_CFLAGS=	-pg
RELEASE_CFLAGS= -g -O2

#KERN_CFLAGS=	-D_KERNEL -DKERNEL -DMACH_USER_API -DDRIVER_PRIVATE
KERN_CFLAGS= -static -DNCPUS=1 -D_KERNEL -DKERNEL -DMACH_USER_API -DDRIVER_PRIVATE
USER_CFLAGS= 
ppc_CFLAGS=		-msoft-float -force_cpusubtype_ALL -mcpu=604 -finline -fno-keep-inline-functions -Wno-four-char-constants
i386_CFLAGS=	-force_cpusubtype_ALL 
MD_CFLAGS=	$(${MACHINE}_CFLAGS)

INSTALLFLAGS= -c -m 644
LIBINSTALLFLAGS= -c -m 555 -S "-S"
KERNLIBINSTALLFLAGS= -c -m 555
INSTALL= 	/usr/bin/install

#
# Source files common to all builds.
#
COMMON_MFILES=	IODevice.m
COMMON_CFILES=

#
# Debug-only source files.
#
DEBUG_MFILES= 
DEBUG_CFILES=

# 
# Kernel/user dependent, machine independent source files appearing in
# both User/ and Kernel/.
#
# 8-Nov-91 - NX*Lock now in libsys...
#
MODE_MFILES=	IOConfigTable.m generalFuncs.m
MODE_CFILES=	memcpy.c

#
# Kernel-only and User-only source files.
#
KERNEL_MFILES=	IODisk.m IOLogicalDisk.m IODiskPartition.m volCheck.m \
		IODeviceDescription.m IODirectDevice.m NXSpinLock.m \
		NXConditionLock.m NXLock.m generalFuncsPrivate.m IOBufDevice.m \
		IONetwork.m IONetbufQueue.m devswAndVfssw.m IOEthernet.m \
		IOEthernetDebugger.m IOSCSIController.m kernelDiskMethods.m \
		SCSIDisk.m SCSIDiskPrivate.m SCSIDiskThread.m SCSIGeneric.m \
		SCSIGlobals.m IODisplay.m IOMemoryContainer.m \
		IOMemoryDescriptor.m IOSimpleMemoryDescriptor.m EventDriver.m \
		EventInput.m EventIO.m IOEventSource.m KeyMap.m IOAudio.m \
		AudioChannel.m AudioStream.m InputStream.m OutputStream.m \
		AudioCommand.m audio_kern_server.m audio_server.m snd_server.m \
		IOBuffer.m
KERNEL_CFILES=	disk_label.c dma.c label_subr.c snd_reply.c audio_mix.c \
		audio_peak.c audio_mulaw.c

USER_MFILES=	IODeviceMaster.m NXConditionLock.m NXLock.m NXSpinLock.m
USER_CFILES=    

#
# MI bus files
#
eisa_BUS_MFILES=	IOEISADirectDevice.m IOEISADeviceDescription.m \
			IOEISADMATransferBuffer.m
eisa_BUS_CFILES=

pci_BUS_MFILES=		IOPCIDirectDevice.m IOPCIDeviceDescription.m
pci_BUS_CFILES=

pcmcia_BUS_MFILES=	IOPCMCIADirectDevice.m IOPCMCIADeviceDescription.m \
			IOPCMCIATuple.m
pcmcia_BUS_CFILES=


#
# User C files generated by mig.
#
CONFIG_CFILES=		ConfigUser.c
DRIVER_SERVER_CFILES=	driverServerUser.c
USER_MIG_CFILES= 	$(DRIVER_SERVER_CFILES)

#
# Kernel C files generated by mig
#
EVENT_CFILES=		EventServer.c
KERNEL_MIG_CFILES=	$(EVENT_CFILES)
AUDIO_SERVER_CFILES=	audioServer.c
AUDIO_REPLY_CFILES=	audioReplyUser.c
AUDIO_CFILES=		$(AUDIO_SERVER_CFILES) $(AUDIO_REPLY_CFILES)
KERNEL_MIG_CFILES=	$(EVENT_CFILES) $(AUDIO_CFILES)
  
#
# Force mig to run before audio source is compiled.
#
OTHER_KERN_DEPENDS=	$(AUDIO_CFILES)

#
# Mig source.
#
CONFIG_MIG_SOURCE=		Config.defs
DRIVER_SERVER_MIG_SOURCE=	driverServer.defs
EVENT_MIG_SOURCE=		Event.defs
AUDIO_SERVER_MIG_SOURCE=	audio.defs
AUDIO_REPLY_MIG_SOURCE=		audioReply.defs

#
# machine dependent source files - user, kernel, common.
#
i386_KERN_CFILES=	$(eisa_BUS_CFILES) $(pci_BUS_CFILES) $(pcmcia_BUS_CFILES)
i386_USER_CFILES=
i386_CFILES=
i386_KERN_MFILES=	$(eisa_BUS_MFILES) $(pci_BUS_MFILES) $(pcmcia_BUS_MFILES)\
			IOFrameBufferDisplay.m  \
			IOSVGADisplay.m IOVPCodeDisplay.m \
			IOMallocLow.m machdepFuncs.m
i386_USER_MFILES=
i386_MFILES=

ppc_USER_CFILES=
ppc_CFILES=
ppc_KERN_MFILES=	IOPPCDirectDevice.m IOPPCDeviceDescription.m IOPropertyTable.m		\
			IODeviceTreeBus.m IOTreeDevice.m IOFramebuffer.m IODBDMA.m		\
			IOMacRiscPCI.m IOPCIDevice.m						\
			IOSmartDisplay.m IONDRVFramebuffer.m IONDRVInterface.m IONDRVLibraries.m
ppc_KERN_CFILES=	IOPEFLoader.c IOPEFInternals.c
			  
ppc_USER_MFILES=
ppc_MFILES=		

MD_KERN_CFILES=	$(${MACHINE}_KERN_CFILES)
MD_USER_CFILES=	$(${MACHINE}_USER_CFILES)
MD_CFILES=	$(${MACHINE}_CFILES)
MD_KERN_MFILES=	$(${MACHINE}_KERN_MFILES)
MD_USER_MFILES=	$(${MACHINE}_USER_MFILES)
MD_MFILES=	$(${MACHINE}_MFILES)

#
# Other files to installsrc (in addition to *.[mch]).
#
OTHER_SOURCE=	Makefile $(DRIVER_SERVER_MIG_SOURCE)	\
		Kernel/$(EVENT_MIG_SOURCE)		\
		Kernel/$(AUDIO_SERVER_MIG_SOURCE)	\
		Kernel/$(AUDIO_REPLY_MIG_SOURCE)
#
# Common targets.
#
first debug:  	$(MACHINE)kernrelease
debug:		$(MACHINE)kerndebug
release:	$(MACHINE)release
profile:	$(MACHINE)profile
kerndebug: 	$(MACHINE)kerndebug 
kernrelease:	$(MACHINE)kernrelease
kernprofile:	$(MACHINE)kernprofile
libs:		libraries lipoize
all: 		libs
TARGET_LIST=	release kernrelease profile 

VPATH = $(BUILD_DIR):$(OBJDIR):$(SYMDIR):$(MODE_DIRS)

BUILD_DIRS =	ppcRelease i386Release \
		ppcProfile i386Profile \
		ppcDebug i386Debug \
		ppcKernRelease i386KernRelease \
		ppcKernDebug i386KernDebug

#
# Object files.
#
COMMON_OFILES=		$(COMMON_MFILES:.m=.o) \
			$(COMMON_CFILES:.c=.o) \
			$(MODE_MFILES:.m=.o) \
			$(MODE_CFILES:.c=.o)

DEBUG_OFILES=		$(DEBUG_MFILES:.m=.o) \
			$(DEBUG_CFILES:.c=.o) 

KERNEL_OFILES=		$(KERNEL_MFILES:.m=.o) \
			$(KERNEL_CFILES:.c=.o) \
			$(KERNEL_MIG_CFILES:.c=.o)

BUS_OFILES=    		$(BUS_MFILES:.m=.o) \
			$(BUS_CFILES:.c=.o)

USER_OFILES=		$(USER_MFILES:.m=.o) \
			$(USER_CFILES:.c=.o) \
			$(USER_MIG_CFILES:.c=.o)

MD_OFILES=		$(MD_MFILES:.m=.o) \
			$(MD_CFILES:.c=.o)

#
# Enumerate all object files for each target.
#
KERN_MD_OFILES= 	$(COMMON_OFILES) \
			$(KERNEL_OFILES) \
			$(BUS_OFILES) \
			$(MD_OFILES) \
			$(MD_KERN_MFILES:.m=.o) \
			$(MD_KERN_CFILES:.c=.o)


USER_MD_OFILES= 	$(COMMON_OFILES) \
			$(USER_OFILES) \
			$(MD_OFILES) \
			$(MD_USER_MFILES:.m=.o) \
			$(MD_USER_CFILES:.c=.o)


#
# Enumerate mode directories for each target. These get added to VPATH.
#
USER_DIRS=		User
KERNEL_DIRS=		Kernel:eisa:pci:pcmcia

#
# Recursive rules to invoke various target builds.
#
# $(MACHINE) must resolve to exactly one of {i386,ppc} 
# at this time.
#
#

$(MACHINE)release: $(SYMDIR) always
	@echo '********** Building $(BUILD_NAME)$(MACHINE).dylib **********'
	ARCH_DIR="$(MACHINE)"; \
	$(MAKE) $(SYMDIR)/$(BUILD_NAME)$(MACHINE).dylib \
		"BUILD_DIR=$(OBJROOT)/$(MACHINE)Release" \
		"MODE_DIRS=$(USER_DIRS):$$ARCH_DIR" \
		"OBJROOT=$(OBJROOT)" \
		"SYMROOT=$(SYMROOT)" \
		"MACHINE=$(MACHINE)" \
		"FRAMEWORK=System" \
		"OFILES=$(USER_MD_OFILES)" \
		"OTHER_CFLAGS=$(RELEASE_CFLAGS) $(USER_CFLAGS) \
		 $(MD_CFLAGS) -arch $(MACHINE)"

$(MACHINE)profile: $(SYMDIR) always
	@echo '********** Building $(BUILD_NAME)$(MACHINE)_profile.dylib **********'
	ARCH_DIR="$(MACHINE)"; \
	$(MAKE) $(SYMDIR)/$(BUILD_NAME)$(MACHINE)_profile.dylib \
		"BUILD_DIR=$(OBJROOT)/$(MACHINE)Profile" \
		"MODE_DIRS=$(USER_DIRS):$$ARCH_DIR" \
		"OBJROOT=$(OBJROOT)" \
		"SYMROOT=$(SYMROOT)" \
		"MACHINE=$(MACHINE)" \
		"FRAMEWORK=System,_profile" \
		"OFILES=$(USER_MD_OFILES)" \
		"OTHER_CFLAGS=$(PROFILE_CFLAGS) $(USER_CFLAGS) \
		 $(MD_CFLAGS) -arch $(MACHINE)"

$(MACHINE)debug: $(SYMDIR) always
	@echo '********** Building $(BUILD_NAME)$(MACHINE)_g.dylib ***********'
	ARCH_DIR="$(MACHINE)"; \
	$(MAKE) $(SYMDIR)/$(BUILD_NAME)$(MACHINE)_g.dylib \
		"BUILD_DIR=$(OBJROOT)/$(MACHINE)Debug" \
		"MODE_DIRS=$(USER_DIRS):$$ARCH_DIR" \
		"OBJROOT=$(OBJROOT)" \
		"SYMROOT=$(SYMROOT)" \
		"MACHINE=$(MACHINE)" \
		"FRAMEWORK=System" \
		"OFILES=$(USER_MD_OFILES) $(DEBUG_OFILES)" \
		"OTHER_CFLAGS=$(DEBUG_CFLAGS) $(USER_CFLAGS)  \
		 $(MD_CFLAGS) -arch $(MACHINE)"

$(MACHINE)kernrelease: $(SYMDIR) always
	@echo '********** Building $(BUILD_NAME)$(MACHINE)_kern.o **********'
	ARCH_DIR="$(MACHINE)"; \
	$(MAKE) $(SYMDIR)/$(BUILD_NAME)$(MACHINE)_kern.o \
		"BUILD_DIR=$(OBJROOT)/$(MACHINE)KernRelease" \
		"OFILES=$(KERN_MD_OFILES)" \
		"OBJROOT=$(OBJROOT)" \
		"SYMROOT=$(SYMROOT)" \
		"MACHINE=$(MACHINE)" \
		"MODE_DIRS=$(KERNEL_DIRS):$$ARCH_DIR" \
		"OTHER_CFLAGS=$(RELEASE_CFLAGS) $(KERN_CFLAGS) \
		 $(MD_CFLAGS) -arch $(MACHINE)"

$(MACHINE)kernprofile: $(SYMDIR) always
	@echo '********** Building $(BUILD_NAME)$(MACHINE)_kern.o **********'
	ARCH_DIR="$(MACHINE)"; \
	$(MAKE) $(SYMDIR)/$(BUILD_NAME)$(MACHINE)_kern.o \
		"BUILD_DIR=$(OBJROOT)/$(MACHINE)KernProfile" \
		"OFILES=$(KERN_MD_OFILES)" \
		"OBJROOT=$(OBJROOT)" \
		"SYMROOT=$(SYMROOT)" \
		"MACHINE=$(MACHINE)" \
		"MODE_DIRS=$(KERNEL_DIRS):$$ARCH_DIR" \
		"OTHER_CFLAGS=$(PROFILE_CFLAGS) $(KERN_CFLAGS) \
		 $(MD_CFLAGS) -arch $(MACHINE)"

$(MACHINE)kerndebug: $(SYMDIR) always
	@echo '********** Building $(BUILD_NAME)$(MACHINE)_kern_g.o **********'
	ARCH_DIR="$(MACHINE)"; \
	$(MAKE) $(SYMDIR)/$(BUILD_NAME)$(MACHINE)_kern_g.o \
		"BUILD_DIR=$(OBJROOT)/$(MACHINE)KernDebug" \
		"OFILES=$(KERN_MD_OFILES) $(DEBUG_OFILES)" \
		"OBJROOT=$(OBJROOT)" \
		"SYMROOT=$(SYMROOT)" \
		"MACHINE=$(MACHINE)" \
		"MODE_DIRS=$(KERNEL_DIRS):$$ARCH_DIR" \
		"OTHER_CFLAGS=$(DEBUG_CFLAGS) $(KERN_CFLAGS) \
		 $(MD_CFLAGS) -arch $(MACHINE)"

#
# Project management make rules.
#
# Note that this clean rule doesn't delete the build directories
# in OBJROOT, but I think that's OK; RC does that for us.
clean:	always
	rm -rf $(BUILD_DIRS) *.d *~ libs syms Makedep tags 
	
tags:	always
	rm -f tags
	ctags -o $(SYMROOT)/tags *.[hm]
	@for i in $(SOURCE_DIRS); \
	    do \
		    echo ================= make $@ for $$i =================; \
		    (cd $$i; ${MAKE}  $@) || exit $?; \
	    done

always:

installsrc: 	SRCROOT $(SRCROOT)
#	
# first install the common source (in this directory).
#
	gnutar cf - *.[mch] $(OTHER_SOURCE) | (cd $(SRCROOT); gnutar xpf -)	
#
# now install all of the mode-dependent source.
#
	@for i in $(SOURCE_DIRS); \
	    do \
		    echo ================= make $@ for $$i =================; \
		    (cd $$i; ${MAKE} SRCROOT=$(SRCROOT)/$$i $@) || exit $?; \
	    done


USER_EXPORT_LIB_SUFFIXES= .dylib _profile.dylib
USER_LOCAL_LIB_SUFFIXES=
KERN_LIB_SUFFIXES=  	  _kern.o
USER_LIB_SUFFIXES=  $(USER_EXPORT_LIB_SUFFIXES) $(USER_LOCAL_LIB_SUFFIXES)

#
# We only export release versions of the user library to /usr/lib. All 
# others go to /usr/local/lib.
#
EXPORT_LIB_SUFFIXES= $(USER_EXPORT_LIB_SUFFIXES) 
LOCAL_LIB_SUFFIXES= $(KERN_LIB_SUFFIXES) $(USER_LOCAL_LIB_SUFFIXES)

install:  DSTROOT $(DSTROOT)$(INSTALL_DIR) libraries lipoize install_only

#
# Target to just install, not build. Fat libraries must exist; this doesn't
# build them.
#
# FIXME - strip the archives on the way out to DSTROOT.
#
install_only:	installhdrs DSTROOT $(DSTROOT)$(INSTALL_DIR) \
		$(DSTROOT)$(INSTALL_LOCAL_DIR) ALWAYS
#
# Now our binaries. 
#
	@for libsuffix in $(EXPORT_LIB_SUFFIXES); do	    		\
	    libname=`echo $(BUILD_NAME)$$libsuffix | sed -e 's/\./$(BUILD_VERS)./'`;	\
	    liblinkname=$(BUILD_NAME)$$libsuffix;		   	\
	    CWD=`pwd`;						        \
	    echo cd $(SYMROOT)/syms;				    	\
	    cd $(SYMROOT)/syms;					   	\
	    echo install $(LIBINSTALLFLAGS) $$libname 			\
	    	$(DSTROOT)$(INSTALL_DIR); 				\
	    $(INSTALL) $(LIBINSTALLFLAGS) $$libname			\
		$(DSTROOT)$(INSTALL_DIR); 				\
	    echo cd $(DSTROOT)$(INSTALL_DIR);				\
	    cd $(DSTROOT)$(INSTALL_DIR);				\
	    echo ln -sf $$libname $$liblinkname;				\
	    ln -sf $$libname $$liblinkname; 				\
	    echo cd $$CWD;						\
	    cd $$CWD;							\
	done
	@for libsuffix in $(LOCAL_LIB_SUFFIXES); do		    	\
	    libname=$(BUILD_NAME)$$libsuffix;			    	\
	    CWD=`pwd`;						        \
	    echo cd $(SYMROOT)/syms;				    	\
	    cd $(SYMROOT)/syms;					   	\
	    echo install $(KERNLIBINSTALLFLAGS) $$libname $(DSTROOT)$(INSTALL_LOCAL_DIR); \
	    $(INSTALL) $(KERNLIBINSTALLFLAGS) $$libname 				\
	    	$(DSTROOT)$(INSTALL_LOCAL_DIR); 			\
	    echo cd $$CWD;						\
	    cd $$CWD;							\
	done

#
# Build all of the individual archives as appropriate.
#
libraries: 	ALWAYS 
	@if [ -n "$(RC_ARCHS)" ]; then					\
	    machines="$(RC_ARCHS)";					\
	elif [ -n "$(MACHINE_LIST)" ]; then				\
	    machines="$(MACHINE_LIST)";					\
	elif [ -n "$(MACHINE)" ]; then					\
	    machines="$(MACHINE)";					\
	else								\
	    echo no machine list found;					\
	    exit 1;							\
	fi;								\
	echo Building architecture-specific libraries for $$machines...; \
	for machine in $$machines; do					\
	    $(MAKE) $(TARGET_LIST)						\
	    	"MACHINE=$$machine"					\
	    	"OBJROOT=$(OBJROOT)"					\
	    	"SYMROOT=$(SYMROOT)"					\
	    	"DSTROOT=$(DSTROOT)";					\
	done
	
#
# Lipo the libraries for the various architectures together. This target
# assumes that the constituent libraries have already been built.
#
lipoize:	ALWAYS
	@if [ -n "$(RC_ARCHS)" ]; then					    \
	    machines="$(RC_ARCHS)";					    \
	elif [ -n "$(MACHINE_LIST)" ]; then				    \
	    machines="$(MACHINE_LIST)";					    \
	elif [ -n "$(MACHINE)" ]; then					    \
	    machines="$(MACHINE)";					    \
	else								    \
	    echo no machine list found;					    \
	    exit 1;							    \
	fi;								    \
	echo Building fat user archives...;				    \
	echo cd $(SYMROOT)/syms;				    	    \
	cd $(SYMROOT)/syms;						    \
	for libsuffix in $(USER_LIB_SUFFIXES); do			    \
	    args="";						    	    \
	    libname=`echo $(BUILD_NAME)$$libsuffix | sed -e 's/\./$(BUILD_VERS)./'`;	    \
	    for machine in $$machines; do				    \
		args="$$args $(BUILD_NAME)""$$machine""$$libsuffix";   	    \
	    done;							    \
	    echo lipo -create -o $$libname $$args;		    	    \
	    lipo -create -o $$libname $$args;				    \
	done;								    \
	echo Building fat kernel relocatables...;			    \
	for libsuffix in $(KERN_LIB_SUFFIXES); do			    \
	    args="";						    	    \
	    libname=$(BUILD_NAME)$$libsuffix;			    	    \
	    for machine in $$machines; do				    \
		args="$$args $(BUILD_NAME)""$$machine""$$libsuffix";   	    \
	    done;							    \
	    echo lipo -create -o $$libname $$args;		    	    \
	    lipo -create -o $$libname $$args;				    \
	    echo touch $$libname;					    \
	    touch $$libname;						    \
	done

installhdrs: $(DSTROOT)/$(INSTALLHDRS_LOCAL_DIR) \
	$(DSTROOT)/$(AUDIOHDRS_LOCAL_DIR)
#
# install mig source.
#
	$(INSTALL) $(INSTALLFLAGS) $(DRIVER_SERVER_MIG_SOURCE) $(DSTROOT)/$(INSTALLHDRS_LOCAL_DIR)
	$(INSTALL) $(INSTALLFLAGS) Kernel/$(EVENT_MIG_SOURCE) $(DSTROOT)/$(INSTALLHDRS_LOCAL_DIR)
	$(INSTALL) $(INSTALLFLAGS) Kernel/$(AUDIO_SERVER_MIG_SOURCE) $(DSTROOT)/$(INSTALLHDRS_LOCAL_DIR)
	$(INSTALL) $(INSTALLFLAGS) Kernel/$(AUDIO_REPLY_MIG_SOURCE) $(DSTROOT)/$(INSTALLHDRS_LOCAL_DIR)
	$(INSTALL) $(INSTALLFLAGS) Kernel/audio_msgs.h $(DSTROOT)$(AUDIOHDRS_LOCAL_DIR)

ALWAYS:

$(BUILD_DIR) $(SRCROOT) $(DSTROOT)$(HEADER_DIR) $(OBJDIR) \
	$(DSTROOT)/$(INSTALLHDRS_LOCAL_DIR) \
	$(DSTROOT)/$(AUDIOHDRS_LOCAL_DIR) \
	$(SYMDIR) $(DSTROOT)$(INSTALL_DIR) $(DSTROOT)$(INSTALL_LOCAL_DIR):
	$(MKDIRS) $@

SRCROOT DSTROOT:
	@if [ -n "${$@}" ]; \
	then \
		exit 0; \
	else \
		echo Must define $@; \
		exit 1; \
	fi

.c.o:
	$(CC) $(COMMON_CFLAGS) $(OTHER_CFLAGS) -c $< \
 		-I$(BUILD_DIR) \
		-dependency-file $(BUILD_DIR)/$(*F).d -o $(BUILD_DIR)/$(*F).o 
	md -u $(BUILD_DIR)/Makedep -f -d $(BUILD_DIR)/$(*F).d

.m.o:
	$(CC) $(COMMON_CFLAGS) $(OTHER_CFLAGS) -c $< \
 		-I$(BUILD_DIR) \
		-dependency-file $(BUILD_DIR)/$(*F).d -o $(BUILD_DIR)/$(*F).o 
	md -u $(BUILD_DIR)/Makedep -f -d $(BUILD_DIR)/$(*F).d

#
# Mig rules. We copy mig source down to the build directory because 
# mig writes its output to cwd.
#
$(DRIVER_SERVER_CFILES):	$(DRIVER_SERVER_MIG_SOURCE)
	rm -f $(BUILD_DIR)/$(DRIVER_SERVER_CFILES) 
	rm -f $(BUILD_DIR)/$(DRIVER_SERVER_MIG_SOURCE)
	cp $(DRIVER_SERVER_MIG_SOURCE) $(BUILD_DIR)
	(cd $(BUILD_DIR); \
	  ${MIG} -arch $(MACHINE) -server /dev/null \
	  $(DRIVER_SERVER_MIG_SOURCE))

$(CONFIG_CFILES):	../Config/$(CONFIG_MIG_SOURCE)
	rm -f $(BUILD_DIR)/$(CONFIG_CFILES)
	rm -f $(BUILD_DIR)/$(CONFIG_MIG_SOURCE)
	cp ../Config/$(CONFIG_MIG_SOURCE) $(BUILD_DIR)
	(cd $(BUILD_DIR); \
	  ${MIG} -arch $(MACHINE) -server /dev/null $(CONFIG_MIG_SOURCE))
	  
$(EVENT_CFILES):		Kernel/$(EVENT_MIG_SOURCE)
	rm -f $(BUILD_DIR)/$(EVENT_CFILES)
	rm -f $(BUILD_DIR)/$(EVENT_MIG_SOURCE)
	cp Kernel/$(EVENT_MIG_SOURCE) $(BUILD_DIR)
	(cd $(BUILD_DIR); \
	  ${MIG} -arch $(MACHINE) -user /dev/null \
	  $(EVENT_MIG_SOURCE))
  
$(AUDIO_SERVER_CFILES):		Kernel/$(AUDIO_SERVER_MIG_SOURCE)
	rm -f $(BUILD_DIR)/$(AUDIO_SERVER_CFILES)
	rm -f $(BUILD_DIR)/$(AUDIO_SERVER_MIG_SOURCE)
	cp Kernel/$(AUDIO_SERVER_MIG_SOURCE) $(BUILD_DIR)
	(cd $(BUILD_DIR); \
	  ${MIG} -arch $(MACHINE) -user /dev/null \
	  $(AUDIO_SERVER_MIG_SOURCE))

#
# FIXME: get rid of this sed hack to set timeout and SEND_SWITCH.
#
$(AUDIO_REPLY_CFILES):		Kernel/$(AUDIO_REPLY_MIG_SOURCE)
	rm -f $(BUILD_DIR)/$(AUDIO_REPLY_CFILES)
	rm -f $(BUILD_DIR)/$(AUDIO_REPLY_MIG_SOURCE)
	cp Kernel/$(AUDIO_REPLY_MIG_SOURCE) $(BUILD_DIR)
	(cd $(BUILD_DIR); \
	  ${MIG} -arch $(MACHINE) -server /dev/null \
	  $(AUDIO_REPLY_MIG_SOURCE))
	sed '/msg_send/s/MSG_OPTION_NONE, 0/SEND_TIMEOUT|SEND_SWITCH, 1000/' \
		$(BUILD_DIR)/audioReplyUser.c > $(BUILD_DIR)/tempr_user.c
	rm -f $(BUILD_DIR)/audioReplyUser.c
	sed '/msg_rpc/s/RCV_TIMEOUT, 0/RCV_TIMEOUT|SEND_SWITCH, 1000/' \
		$(BUILD_DIR)/tempr_user.c > $(BUILD_DIR)/audioReplyUser.c
	rm -f $(BUILD_DIR)/tempr_user.c

vers.o:	$(OFILES)
	rm -f $(BUILD_DIR)/vers.c
	vers_string -l $(BUILD_NAME) > $(BUILD_DIR)/vers.c
	$(CC) -arch $(MACHINE) $(ARCHLESS_RC_CFLAGS) -c $(BUILD_DIR)/vers.c \
	    -o $(BUILD_DIR)/vers.o 

#
# Rules to build the libraries. Kernel versions only build and install 
# unstripped .o's; the kernel project strips the end result when it 
# installs. (Note we build .o's for the kernel version to ensure that
# all object files are linked in, even those which might only be needed 
# by loadable modules.) User versions build stripped versions in OBJDIR and 
# unstripped in SYMDIR for debug. Stripped archives eventually get 
# installed in INSTALL_DIR.
#
# Kernel versions:
#
$(SYMDIR)/$(BUILD_NAME)$(MACHINE)_kern.o 	\
$(SYMDIR)/$(BUILD_NAME)$(MACHINE)_kern_g.o: $(BUILD_DIR) \
	$(OTHER_KERN_DEPENDS) $(OFILES) vers.o
	@echo ----building kernel library----
	$(LD) -r -o $@ $(OFILES) vers.o

#
# User versions:
#
$(SYMDIR)/$(BUILD_NAME)$(MACHINE).dylib 		\
$(SYMDIR)/$(BUILD_NAME)$(MACHINE)_profile.dylib 		\
$(SYMDIR)/$(BUILD_NAME)$(MACHINE)_g.dylib: $(BUILD_DIR) $(OFILES) vers.o
	@echo ----building user library----
	@if [ -z "`vers_string -n`" ]; then					\
	    echo libtool -o $@ $(OFILES) vers.o -dynamic -framework $(FRAMEWORK)\
		    -install_name $(INSTALL_DIR)$(BUILD_NAME)$(BUILD_VERS).dylib\
		    -compatibility_version $(COMPAT_VERS);			\
	    libtool -o $@ $(OFILES) vers.o -dynamic -framework $(FRAMEWORK)	\
		    -install_name $(INSTALL_DIR)$(BUILD_NAME)$(BUILD_VERS).dylib\
		    -seg1addr 0x66700000					\
		    -compatibility_version $(COMPAT_VERS);			\
	else									\
	    echo libtool -o $@ $(OFILES) vers.o -dynamic -framework $(FRAMEWORK)\
		    -install_name $(INSTALL_DIR)$(BUILD_NAME)$(BUILD_VERS).dylib\
		    -compatibility_version $(COMPAT_VERS)			\
		    -current_version "`vers_string -n`";			\
	    libtool -o $@ $(OFILES) vers.o -dynamic -framework $(FRAMEWORK)	\
		    -install_name $(INSTALL_DIR)$(BUILD_NAME)$(BUILD_VERS).dylib\
		    -compatibility_version $(COMPAT_VERS)			\
		    -seg1addr 0x66700000					\
		    -current_version "`vers_string -n`";			\
	fi

-include $(BUILD_DIR)/Makedep

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.