Makefile.bootcd revision 1.8
11.8Sbouyer#	$NetBSD: Makefile.bootcd,v 1.8 2007/03/06 21:38:29 bouyer Exp $
21.1Shubertf#
31.1Shubertf# Makefile snipped to create a CD/DVD ISO
41.1Shubertf#
51.1Shubertf
61.1Shubertf# XXX TODO:
71.1Shubertf# 1) merge with src/distrib/cdrom
81.1Shubertf# 2) teach makefs to add data from more than 1 directory (see below)
91.1Shubertf
101.1Shubertf#
111.1Shubertf# Required variables:
121.1Shubertf#	CDBASE		Basename of the iso
131.1Shubertf#
141.1Shubertf# Optional variables:
151.1Shubertf#	CDRELEASE	Set to 'true' to include $RELEASEDIR/$MACHINE on the CD
161.7Shubertf#	CDRELEASE_NOISOS Excludes installation/cdrom directory if set
171.1Shubertf#	BOOT		Defaults to $DESTDIR/usr/mdec/boot
181.1Shubertf#	BOOTXX_CD9660	Defaults to $DESTDIR/usr/mdec/bootxx_cd9660
191.1Shubertf#	CDBOOTOPTIONS	Options for installboot, eg -o console=com0,speed=9600
201.8Sbouyer#	CDMAKEFSOPTIONS	Options for makefs, eg bootimage=i386;bootxx,no-emul-boot
211.1Shubertf#	CDROMS_RELEASEDIR Where to install ${CDBASE}.iso
221.8Sbouyer#	CDINSTKERNEL	instkernel directory (relative to ${.CURDIR})
231.8Sbouyer#	CDKERNELS	couples of the form:
241.8Sbouyer#				source	name_on_cd
251.8Sbouyer# source kernels are copied from ${CDINSTKENRNEL} (or it's obj dir)
261.8Sbouyer# note that as of yet, bootxx_cd9660 can't load kernel names  of more than
271.8Sbouyer# 8 chars.
281.1Shubertf#
291.1Shubertf
301.1ShubertfBOOT?=		${DESTDIR}/usr/mdec/boot
311.1ShubertfBOOTXX_CD9660?=	${DESTDIR}/usr/mdec/bootxx_cd9660
321.1ShubertfCDRELEASE?=	false
331.8Sbouyer.if ${CDRELEASE} == false
341.8SbouyerCDROMS_RELEASEDIR?=	${MACHINE}/installation/cdrom
351.8Sbouyer.else
361.8SbouyerCDROMS_RELEASEDIR?=	iso
371.8Sbouyer.endif
381.7Shubertf.if defined(CDRELEASE_NOISOS)
391.7ShubertfCDRELEASE_EXCLUDE=	-s ',./installation/cdrom.*,,gp'
401.7Shubertf.endif
411.1Shubertf
421.8Sbouyer.include <bsd.sys.mk>		# for HOST_SH
431.8Sbouyer.include <bsd.own.mk> 		# For PRINTOBJDIR
441.8Sbouyer.include <bsd.kernobj.mk>	# For KERNSRCDIR
451.8Sbouyer
461.8SbouyerDISTRIBREV!=	${HOST_SH} ${KERNSRCDIR}/conf/osrelease.sh -s
471.8SbouyerISO_VOLID!=	echo NETBSD_${DISTRIBREV} | tr a-z A-Z
481.8SbouyerPUBLISHER?= The_NetBSD_Project
491.8Sbouyer.if defined(CDMAKEFSOPTIONS)
501.8Sbouyer_CDMAKEFSOPTIONS=	rockridge,label=${ISO_VOLID},publisher=${PUBLISHER},${CDMAKEFSOPTIONS}
511.8Sbouyer.else
521.8Sbouyer_CDMAKEFSOPTIONS=	rockridge,label=${ISO_VOLID},publisher=${PUBLISHER}
531.8Sbouyer.endif
541.8Sbouyer
551.1Shubertf# Stuff that should come from elsewhere - XXX where? - HF
561.1ShubertfCP?=		cp
571.1ShubertfRM?=		rm
581.1ShubertfMKDIR?=		mkdir -p
591.1ShubertfCHMOD?=		chmod
601.1Shubertf
611.1Shubertf
621.1ShubertfCLEANFILES+=	${CDBASE}.iso
631.8SbouyerCLEANFILES+=	bootxx.${MACHINE}
641.1Shubertf
651.1Shubertf
661.1Shubertf.include "${NETBSDSRCDIR}/distrib/common/Makefile.distrib"
671.1Shubertf
681.8Sbouyer.if defined(CDINSTKERNEL)
691.8Sbouyer_INSTKERNELNOBJDIR!=	cd ${.CURDIR}/${CDINSTKERNEL} && ${PRINTOBJDIR}
701.8Sbouyer.endif
711.8Sbouyer.if exists(${DESTDIR}/usr/mdec/bootxx_cd9660)
721.8Sbouyer.if exists(${DESTDIR}/usr/mdec/boot.${MACHINE})
731.8SbouyerBOOT2=boot.${MACHINE}
741.8Sbouyer.else
751.8SbouyerBOOT2=boot
761.8Sbouyer.endif
771.8Sbouyer.endif
781.1Shubertf
791.1Shubertfprepare:
801.1Shubertf	${MKDIR} cdrom
811.8Sbouyer.if defined(CDKERNELS)
821.8Sbouyer.for kernel target in ${CDKERNELS}
831.8Sbouyer	${CP} ${_INSTKERNELNOBJDIR}/${kernel} cdrom/${target}
841.8Sbouyer.endfor
851.8Sbouyer.if exists(${DESTDIR}/usr/mdec/bootxx_cd9660)
861.8Sbouyer	${RM} -f cdrom/${BOOT2}
871.8Sbouyer	${CP} ${DESTDIR}/usr/mdec/${BOOT2} cdrom/${BOOT2}
881.8Sbouyer	${RM} -f bootxx.${MACHINE}
891.8Sbouyer	${CP} ${DESTDIR}/usr/mdec/bootxx_cd9660 bootxx.${MACHINE}
901.8Sbouyer	${CHMOD} +w bootxx.${MACHINE}
911.8Sbouyer.if defined(CDBOOTOPTIONS)
921.8Sbouyer	${TOOL_INSTALLBOOT} -m${MACHINE} -e ${CDBOOTOPTIONS} bootxx.${MACHINE}
931.8Sbouyer.endif
941.8Sbouyer.endif
951.8Sbouyer.endif
961.1Shubertf
971.1Shubertf# Copy $RELEASEDIR/${MACHINE} in the CDROM dir
981.1Shubertf#
991.1Shubertf# XXX This could be done a lot easier if makefs(8) could
1001.1Shubertf# XXX include more than one directory on the image - HF
1011.1Shubertf#
1021.1Shubertfcopy-releasedir:
1031.8Sbouyer	${RM} -f ${RELEASEDIR}/${CDROMS_RELEASEDIR}/${CDBASE}.iso
1041.1Shubertf	if ${CDRELEASE} ; then 						\
1051.1Shubertf		if [ ! -d ${RELEASEDIR}/${MACHINE} ]; then 		\
1061.1Shubertf			echo "No releasedir ${RELEASEDIR}/${MACHINE}, aborting" ; \
1071.1Shubertf			exit 1 ; 					\
1081.1Shubertf		fi ; 							\
1091.1Shubertf		${MKDIR} cdrom/${MACHINE} ; 				\
1101.1Shubertf		release_destdir=`pwd`/cdrom/${MACHINE} ; 		\
1111.1Shubertf		cd ${RELEASEDIR}/${MACHINE} ; 				\
1121.1Shubertf		echo Copying `pwd` to $$release_destdir ... ; 		\
1131.7Shubertf		${TOOL_PAX} 						\
1141.7Shubertf			-rw -pe -v 					\
1151.7Shubertf			${CDRELEASE_EXCLUDE}				\
1161.7Shubertf			. $$release_destdir ; 				\
1171.1Shubertf	fi
1181.1Shubertf
1191.1Shubertfimage:
1201.8Sbouyer	${TOOL_MAKEFS} -t cd9660 -o ${_CDMAKEFSOPTIONS:Q} ${CDBASE}.iso cdrom
1211.8Sbouyer
1221.8Sbouyer.if ${CDRELEASE} == false
1231.8Sbouyerrelease: prepare .WAIT prepare_md_post .WAIT copy-releasedir .WAIT image .WAIT image_md_post
1241.8Sbouyer	${MKDIR} ${RELEASEDIR}/${CDROMS_RELEASEDIR}
1251.8Sbouyer	${RELEASE_INSTALL} ${CDBASE}.iso ${RELEASEDIR}/${CDROMS_RELEASEDIR}
1261.1Shubertf
1271.8Sbouyeriso_image:
1281.8Sbouyer.else
1291.1Shubertfrelease:
1301.8Sbouyer
1311.8Sbouyeriso_image: prepare .WAIT prepare_md_post .WAIT copy-releasedir .WAIT image .WAIT image_md_post
1321.8Sbouyer	${MKDIR} ${RELEASEDIR}/${CDROMS_RELEASEDIR}
1331.8Sbouyer	${RELEASE_INSTALL} ${CDBASE}.iso ${RELEASEDIR}/${CDROMS_RELEASEDIR}
1341.8Sbouyer.endif
1351.1Shubertf
1361.1Shubertfclean:
1371.1Shubertf	${RM} -fr cdrom
1381.1Shubertf
1391.8Sbouyerprepare_md_post: .PHONY
1401.8Sbouyerimage_md_post: .PHONY
1411.8Sbouyer
1421.8Sbouyer
1431.1Shubertf.include <bsd.prog.mk>
144