Source to conf/Makefile


Enter a symbol's name here to quickly find it.

##
# Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
#
# @APPLE_LICENSE_HEADER_START@
# 
# "Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
# Reserved.  This file contains Original Code and/or Modifications of
# Original Code as defined in and that are subject to the Apple Public
# Source License Version 1.0 (the 'License').  You may not use this file
# except in compliance with the License.  Please obtain a copy of the
# License at http://www.apple.com/publicsource and read it before using
# this file.
# 
# The Original Code and all software distributed under the License are
# distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
# EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
# INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
# License for the specific language governing rights and limitations
# under the License."
# 
# @APPLE_LICENSE_HEADER_END@
##

#
# Release build parameters
#
# installhdrs parameters
#
# Machine-dependent headers to install
# (The first of the list is the arch that is used to source the
# machine independent headers.)
#
HEADER_ARCHS = PPC I386

#
# install parameters
#
# Kernel type to install
#
INSTALL_TYPE = RELEASE

#
# Location of tftpboot directory to link kernel to.
#
TFTPDIR = /private/tftpboot

#
# "Post new_vers" parameters
#
BUILD_ARCHS = PPC I386
BUILD_TYPES = RELEASE

# TAG_ARCHS = PPC I386
# TAG_TYPE = RELEASE

#
# Defaults for build all
# Host machine -- Default architecture
#
DEFAULT_TYPE = RELEASE
DEFAULT_ARCH= `arch | awk '/ppc/ { printf("PPC") } /i386/ { printf("I386") }'`

#
# Type and architecture for this build -- often overridden from
# command line on recursive makes
#
TYPE = $(DEFAULT_TYPE)
ARCH = $(DEFAULT_ARCH)
BUILD_DIR= $(TYPE)_$(ARCH)

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

#
# Build all architectures for TYPE
#
all: tools ALWAYS
	@for arch in $(BUILD_ARCHS);					\
	do								\
		echo Making mach_kernel for $(TYPE)_$$arch;		\
		${MAKE} ARCH=$$arch TYPE=$(TYPE) mach_kernel.kernel	\
		  OBJROOT=${OBJROOT} SYMROOT=${SYMROOT};		\
	done

#
# Easy way to build all architectures for a particular type
#
debug release profile DEBUG RELEASE PROFILE: tools ALWAYS
	@for arch in $(BUILD_ARCHS);					\
	do								\
		type=`echo $@ | tr a-z A-Z`;				\
		${MAKE} ARCH=$$arch TYPE=$$type mach_kernel.kernel	\
		  OBJROOT=${OBJROOT} SYMROOT=${SYMROOT};		\
	done

#
# Easy way to build all types for a particular architecture
#
ppc PPC i386 I386 : tools ALWAYS
	@for type in $(BUILD_TYPES);					\
	do								\
		arch=`echo $@ | tr a-z A-Z`;				\
		${MAKE} ARCH=$$arch TYPE=$$type mach_kernel.kernel	\
		  OBJROOT=${OBJROOT} SYMROOT=${SYMROOT};		\
	done

#
# Somethings to say after a new_vers (but say it from ..)
#
kernels: tools ALWAYS
	@for type in $(BUILD_TYPES);					\
	do								\
		${MAKE} -k TYPE=$$type all				\
		  OBJROOT=${OBJROOT} SYMROOT=${SYMROOT};		\
	done
	$(MAKE) tags OBJROOT=${OBJROOT} SYMROOT=${SYMROOT}

tags: tools ALWAYS
	-@for arch in $(TAG_ARCHS);					\
	do								\
		${MAKE} ARCH=$$arch TYPE=$(TAG_TYPE) tags.kernel	\
		  OBJROOT=${OBJROOT} SYMROOT=${SYMROOT};		\
	done


#
# Clean the world
#
clean: ALWAYS
	-@for arch in $(BUILD_ARCHS);					\
	do								\
	    for type in $(BUILD_TYPES);					\
	    do								\
		echo make clean for $${type}_$${arch};			\
	        rm -rf $(OBJROOT)/$${type}_$${arch};			\
	        rm -rf $(OBJROOT)/config.$${type}_$${arch};		\
	        rm -rf $(OBJROOT)/config.$${type}_$${arch}.old;		\
		rm -f $${type}_$${arch} $${type}_$${arch}.old;		\
	    done;							\
	done
	@CWD=`pwd`; \
	cd ${OBJROOT}; OBJROOT=`pwd`; cd $$CWD;				\
	cd ${SYMROOT}; SYMROOT=`pwd`; cd $$CWD;				\
	cd ${VERSDIR}; VERSDIR=`pwd`; cd $$CWD;				\
	(								\
		cd tools;						\
		${MAKE} clean						\
		  OBJROOT=`relpath -d $$VERSDIR . $$OBJROOT`		\
		  SYMROOT=`relpath -d $$VERSDIR . $$SYMROOT`		\
	)

#
# Clobber the world, rm tag files, too
#
clobber: clean ALWAYS
	-@for arch in $(BUILD_ARCHS);					\
	do								\
		rm -f ../tags.$$arch ../TAGS.$$arch;			\
	done;								\
	rm -rf $(OBJROOT)						\
	rm -f ../tags ../TAGS

#
# Install kernel based on RC_ARCHS for all INSTALL_TYPES
# Install kernel header files based on RC_ARCHS
#
install: tools DSTROOT installhdrs mach_kernel
	rm -f ${DSTROOT}/mach_kernel
	$(MKDIRS) ${DSTROOT}${TFTPDIR}
	install -c -m 444 ${SYMROOT}/mach_kernel ${DSTROOT}/mach_kernel
	ln -f ${DSTROOT}/mach_kernel ${DSTROOT}${TFTPDIR}/mach_kernel
	@for arch in $(RC_ARCHS);					\
	do								\
		ARCH=`echo $$arch | tr a-z A-Z`;			\
		${MAKE} ARCH=$$ARCH TYPE=$(INSTALL_TYPE)		\
		  install_md.kernel					\
		  OBJROOT=${OBJROOT} SYMROOT=${SYMROOT}			\
		  DSTROOT=${DSTROOT};					\
	done
#
# Build FAT kernel based on RC_ARCHS for INSTALL_TYPE
#
mach_kernel: tools
	@lipo_args="";							\
	for arch in $(RC_ARCHS);					\
	do								\
		ARCH=`echo $$arch | tr a-z A-Z`;			\
		$(MAKE) ARCH=$$ARCH TYPE=$(INSTALL_TYPE)		\
		  mach_kernel.kernel					\
		  OBJROOT=${OBJROOT} SYMROOT=${SYMROOT}			\
		  DSTROOT=${DSTROOT};					\
		lipo_args="$$lipo_args ${OBJROOT}/$(INSTALL_TYPE)_$$ARCH/mach_kernel"; \
	done;								\
	$(MKDIRS) $(SYMROOT);						\
	echo rm -f $(SYMROOT)/mach_kernel;				\
	rm -f $(SYMROOT)/mach_kernel;					\
	if [ "`echo $(RC_ARCHS) | wc -w`" -eq 1 ]; then			\
	    echo cp ${OBJROOT}/$(INSTALL_TYPE)_$$ARCH/mach_kernel 	\
		$(SYMROOT)/mach_kernel; 				\
	    cp ${OBJROOT}/$(INSTALL_TYPE)_$$ARCH/mach_kernel 		\
		$(SYMROOT)/mach_kernel; 				\
	else								\
	    echo lipo -create -o $(SYMROOT)/mach_kernel $$lipo_args;	\
	    lipo -create -o $(SYMROOT)/mach_kernel $$lipo_args;		\
	fi

#
# Install kernel header files based on HEADER_ARCHS
#
installhdrs: pre_install DSTROOT
	@set $(HEADER_ARCHS);						\
	ARCH=`echo $$1 | tr a-z A-Z`;					\
	${MAKE} ARCH=$$ARCH TYPE=$(INSTALL_TYPE) DSTROOT=$$DSTROOT	\
	  install_mi_hdrs.kernel					\
	  OBJROOT=${OBJROOT} SYMROOT=${SYMROOT}				\
	  DSTROOT=${DSTROOT}
	for arch in $(HEADER_ARCHS);					\
	do								\
		ARCH=`echo $$arch | tr a-z A-Z`;			\
		${MAKE} ARCH=$$ARCH TYPE=$(INSTALL_TYPE) DSTROOT=$$DSTROOT \
		  install_md_hdrs.kernel				\
		  OBJROOT=${OBJROOT} SYMROOT=${SYMROOT}			\
		  DSTROOT=${DSTROOT};					\
	done

#
# Internal rules
#
VERSDIR=..

OBJROOT=$(VERSDIR)/BUILD
SYMROOT=$(VERSDIR)/BUILD

#
# Get a usable version of doconf for the installhdrs target.
#
pre_install:	ALWAYS OBJROOT
	@CWD=`pwd`;							    \
	cd ${OBJROOT}; OBJROOT=`pwd`; cd $$CWD;				    \
	cd ${SYMROOT}; SYMROOT=`pwd`; cd $$CWD;				    \
	cd ${VERSDIR}; VERSDIR=`pwd`; cd $$CWD;				    \
	echo '#################' make $@ for tools '###################';   \
	(								    \
		cd tools;						    \
		${MAKE} pre_install					    \
		  OBJROOT=`relpath -d $$VERSDIR . $$OBJROOT`		    \
		  SYMROOT=`relpath -d $$VERSDIR . $$SYMROOT`		    \
		  DSTROOT=`relpath -d $$VERSDIR . $$OBJROOT`		    \
	)

tools:	ALWAYS
	@CWD=`pwd`;							\
	cd ${OBJROOT}; OBJROOT=`pwd`; cd $$CWD;				\
	cd ${SYMROOT}; SYMROOT=`pwd`; cd $$CWD;				\
	cd ${VERSDIR}; VERSDIR=`pwd`; cd $$CWD;				\
	(								\
		cd tools;						\
		${MAKE} install						\
		  OBJROOT=`relpath -d $$VERSDIR . $$OBJROOT`		\
		  SYMROOT=`relpath -d $$VERSDIR . $$SYMROOT`		\
		  DSTROOT=`relpath -d $$VERSDIR . $$OBJROOT`		\
	)

#
# Build something in the build directory making sure that the
# build directory exists!
#
install.kernel install_kernel.kernel install_md.kernel \
installhdrs.kernel install_mi_hdrs.kernel install_md_hdrs.kernel: ALWAYS
	${MAKE} ARCH=$(ARCH) TYPE=$(TYPE) arch=`echo $(ARCH) | tr A-Z a-z` \
	  builddir OBJROOT=${OBJROOT} SYMROOT=${SYMROOT}
	@CWD=`pwd`;							\
	cd ${DSTROOT}; DSTROOT=`pwd`; cd $$CWD;				\
	cd ${OBJROOT}; OBJROOT=`pwd`; cd $$CWD;				\
	cd ${SYMROOT}; SYMROOT=`pwd`; cd $$CWD;				\
	cd ${VERSDIR}; VERSDIR=`pwd`; cd $$CWD;				\
	echo cd $(OBJROOT)/$(BUILD_DIR);				\
	cd $(OBJROOT)/$(BUILD_DIR);					\
	echo ${MAKE} ${@:.kernel=}					\
	  OBJROOT=`relpath -d $$VERSDIR . $$OBJROOT`			\
	  SYMROOT=`relpath -d $$VERSDIR . $$SYMROOT`			\
	  DSTROOT=$$DSTROOT;						\
	${MAKE} ${@:.kernel=}						\
	  OBJROOT=`relpath -d $$VERSDIR . $$OBJROOT`			\
	  SYMROOT=`relpath -d $$VERSDIR . $$SYMROOT`			\
	  DSTROOT=$$DSTROOT

tags.kernel: ALWAYS
	${MAKE} ARCH=$(ARCH) TYPE=$(TYPE) arch=`echo $(ARCH) | tr A-Z a-z` \
	  builddir OBJROOT=${OBJROOT} SYMROOT=${SYMROOT}
	@CWD=`pwd`;							\
	cd ${OBJROOT}; OBJROOT=`pwd`; cd $$CWD;				\
	cd ${SYMROOT}; SYMROOT=`pwd`; cd $$CWD;				\
	cd ${VERSDIR}; VERSDIR=`pwd`; cd $$CWD;				\
	echo cd $(OBJROOT)/$(BUILD_DIR);				\
	cd $(OBJROOT)/$(BUILD_DIR);					\
	echo ${MAKE} ${@:.kernel=}					\
	  OBJROOT=`relpath -d $$VERSDIR . $$OBJROOT`			\
	  SYMROOT=`relpath -d $$VERSDIR . $$SYMROOT`;			\
	${MAKE} ${@:.kernel=}						\
	  OBJROOT=`relpath -d $$VERSDIR . $$OBJROOT`			\
	  SYMROOT=`relpath -d $$VERSDIR . $$SYMROOT`

mach_kernel.kernel: ALWAYS
	${MAKE} ARCH=$(ARCH) TYPE=$(TYPE) arch=`echo $(ARCH) | tr A-Z a-z` \
	  builddir OBJROOT=${OBJROOT} SYMROOT=${SYMROOT}
	@CWD=`pwd`;							\
	cd ${OBJROOT}; OBJROOT=`pwd`; cd $$CWD;				\
	cd ${SYMROOT}; SYMROOT=`pwd`; cd $$CWD;				\
	cd ${VERSDIR}; VERSDIR=`pwd`; cd $$CWD;				\
	echo cd $(OBJROOT)/$(BUILD_DIR);				\
	cd $(OBJROOT)/$(BUILD_DIR);					\
	echo ${MAKE} ${@:.kernel=}					\
	  OBJROOT=`relpath -d $$VERSDIR . $$OBJROOT`			\
	  SYMROOT=`relpath -d $$VERSDIR . $$SYMROOT`;			\
	${MAKE} ${@:.kernel=}						\
	  OBJROOT=`relpath -d $$VERSDIR . $$OBJROOT`			\
	  SYMROOT=`relpath -d $$VERSDIR . $$SYMROOT`;			\
	if [ $(SYMROOT) != $(OBJROOT) ];				\
	then								\
		$(MKDIRS) $$SYMROOT;					\
		echo cp mach_kernel.sys $$SYMROOT/mach_kernel.$(BUILD_DIR); \
		cp mach_kernel.sys $$SYMROOT/mach_kernel.$(BUILD_DIR);	\
	fi

boot: ALWAYS
	${MAKE} ARCH=$(ARCH) TYPE=$(TYPE) arch=`echo $(ARCH) | tr A-Z a-z` \
	  builddir OBJROOT=${OBJROOT} SYMROOT=${SYMROOT}
	@CWD=`pwd`;							\
	cd ${OBJROOT}; OBJROOT=`pwd`; cd $$CWD;				\
	cd ${SYMROOT}; SYMROOT=`pwd`; cd $$CWD;				\
	cd ${VERSDIR}; VERSDIR=`pwd`; cd $$CWD;				\
	echo cd $(OBJROOT)/$(BUILD_DIR);				\
	cd $(OBJROOT)/$(BUILD_DIR);					\
	echo ${MAKE} $@							\
	  OBJROOT=`relpath -d $$VERSDIR . $$OBJROOT`			\
	  SYMROOT=`relpath -d $$VERSDIR . $$SYMROOT`;			\
	${MAKE} $@							\
	  OBJROOT=`relpath -d $$VERSDIR . $$OBJROOT`			\
	  SYMROOT=`relpath -d $$VERSDIR . $$SYMROOT`

#
# Make sure the "build directory" for TYPE and ARCH exists
# and the kernel is configured
#
builddir: $(OBJROOT)/$(BUILD_DIR)/Makefile

$(OBJROOT)/$(BUILD_DIR)/Makefile: MASTER MASTER.$(arch)			\
		Makefile.template Makefile.$(arch) files.$(arch) files
	-rm -f $(OBJROOT)/$(BUILD_DIR) $(OBJROOT)/$(BUILD_DIR).old
	-rm -f $(OBJROOT)/$(BUILD_DIR)/Makefile
	$(OBJROOT)/doconf -c -cpu $(arch) -d $(OBJROOT) $(TYPE)

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

ALWAYS: