Makefile.bootcd revision 1.24
11.24Sdsl#	$NetBSD: Makefile.bootcd,v 1.24 2014/02/15 09:43:02 dsl 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.9Schristos#	CDSOURCE	Set to 'true' to include $RELEASEDIR/source on the CD
181.13Ssborrill#	CDEXTRA		Set to a list of files or directories containing extra
191.13Ssborrill#			stuff to put on CD (set by build.sh -C flag)
201.13Ssborrill#	CDBUILDEXTRA	Set to a list of files or directories containing extra
211.13Ssborrill#			stuff to put on CD (use in Makefiles)
221.13Ssborrill#	CDEXTRA_SKIP	A list of file exclusion paths to exclude when copying
231.13Ssborrill#			directories of extra stuff in CDEXTRA AND CDBUILDEXTRA
241.1Shubertf#	BOOT		Defaults to $DESTDIR/usr/mdec/boot
251.1Shubertf#	BOOTXX_CD9660	Defaults to $DESTDIR/usr/mdec/bootxx_cd9660
261.1Shubertf#	CDBOOTOPTIONS	Options for installboot, eg -o console=com0,speed=9600
271.8Sbouyer#	CDMAKEFSOPTIONS	Options for makefs, eg bootimage=i386;bootxx,no-emul-boot
281.1Shubertf#	CDROMS_RELEASEDIR Where to install ${CDBASE}.iso
291.8Sbouyer#	CDINSTKERNEL	instkernel directory (relative to ${.CURDIR})
301.8Sbouyer#	CDKERNELS	couples of the form:
311.8Sbouyer#				source	name_on_cd
321.15Sad#	CDRUNTIME	files/directories to copy from $DESTDIR onto the CD
331.12Ssborrill# source kernels are copied from ${CDINSTKERNEL} (or its obj dir)
341.12Ssborrill# note that as of yet, bootxx_cd9660 can't load kernel names of more than
351.12Ssborrill# 8 chars (though they can be in a sub-directory meaning the pathname is
361.12Ssborrill# longer than 8 chars)
371.1Shubertf#
381.1Shubertf
391.1ShubertfBOOT?=		${DESTDIR}/usr/mdec/boot
401.1ShubertfBOOTXX_CD9660?=	${DESTDIR}/usr/mdec/bootxx_cd9660
411.1ShubertfCDRELEASE?=	false
421.9SchristosCDSOURCE?=	false
431.8Sbouyer.if ${CDRELEASE} == false
441.8SbouyerCDROMS_RELEASEDIR?=	${MACHINE}/installation/cdrom
451.8Sbouyer.else
461.20SrizCDROMS_RELEASEDIR?=	images
471.8Sbouyer.endif
481.7Shubertf.if defined(CDRELEASE_NOISOS)
491.7ShubertfCDRELEASE_EXCLUDE=	-s ',./installation/cdrom.*,,gp'
501.7Shubertf.endif
511.19Stsutsui.if !defined(CDRELEASE_LIVEIMAGE)
521.19StsutsuiCDRELEASE_EXCLUDE+=	-s ',./installation/liveimage.*,,gp'
531.19Stsutsui.endif
541.19Stsutsui.if !defined(CDRELEASE_INSTALLIMAGE)
551.19StsutsuiCDRELEASE_EXCLUDE+=	-s ',./installation/installimage.*,,gp'
561.19Stsutsui.endif
571.1Shubertf
581.8Sbouyer.include <bsd.own.mk> 		# For PRINTOBJDIR
591.8Sbouyer.include <bsd.kernobj.mk>	# For KERNSRCDIR
601.8Sbouyer
611.18SjmcneillDISTRIBVER!=	${HOST_SH} ${KERNSRCDIR}/conf/osrelease.sh
621.8SbouyerDISTRIBREV!=	${HOST_SH} ${KERNSRCDIR}/conf/osrelease.sh -s
631.8SbouyerISO_VOLID!=	echo NETBSD_${DISTRIBREV} | tr a-z A-Z
641.8SbouyerPUBLISHER?= The_NetBSD_Project
651.8Sbouyer.if defined(CDMAKEFSOPTIONS)
661.22Schristos_CDMAKEFSOPTIONS=	rockridge,label=${ISO_VOLID},publisher=${PUBLISHER},${CDMAKEFSOPTIONS}
671.8Sbouyer.else
681.22Schristos_CDMAKEFSOPTIONS=	rockridge,label=${ISO_VOLID},publisher=${PUBLISHER}
691.8Sbouyer.endif
701.8Sbouyer
711.1Shubertf# Stuff that should come from elsewhere - XXX where? - HF
721.1ShubertfCP?=		cp
731.1ShubertfRM?=		rm
741.1ShubertfMKDIR?=		mkdir -p
751.1ShubertfCHMOD?=		chmod
761.17SchristosECHO?=		echo
771.1Shubertf
781.18Sjmcneill.if ${CDRELEASE} == false
791.18SjmcneillCDIMAGE=	${CDBASE}.iso
801.18Sjmcneill.else
811.18SjmcneillCDIMAGE=	NetBSD-${DISTRIBVER}-${CDBASE:S/cd$//}.iso
821.18Sjmcneill.endif
831.1Shubertf
841.18SjmcneillCLEANFILES+=	${CDIMAGE}
851.8SbouyerCLEANFILES+=	bootxx.${MACHINE}
861.1Shubertf
871.1Shubertf
881.1Shubertf.include "${NETBSDSRCDIR}/distrib/common/Makefile.distrib"
891.1Shubertf
901.8Sbouyer.if defined(CDINSTKERNEL)
911.8Sbouyer_INSTKERNELNOBJDIR!=	cd ${.CURDIR}/${CDINSTKERNEL} && ${PRINTOBJDIR}
921.8Sbouyer.endif
931.8Sbouyer.if exists(${DESTDIR}/usr/mdec/bootxx_cd9660)
941.8Sbouyer.if exists(${DESTDIR}/usr/mdec/boot.${MACHINE})
951.8SbouyerBOOT2=boot.${MACHINE}
961.8Sbouyer.else
971.8SbouyerBOOT2=boot
981.8Sbouyer.endif
991.8Sbouyer.endif
1001.1Shubertf
1011.1Shubertfprepare:
1021.1Shubertf	${MKDIR} cdrom
1031.8Sbouyer.if defined(CDKERNELS)
1041.8Sbouyer.for kernel target in ${CDKERNELS}
1051.8Sbouyer	${CP} ${_INSTKERNELNOBJDIR}/${kernel} cdrom/${target}
1061.8Sbouyer.endfor
1071.8Sbouyer.if exists(${DESTDIR}/usr/mdec/bootxx_cd9660)
1081.8Sbouyer	${RM} -f cdrom/${BOOT2}
1091.8Sbouyer	${CP} ${DESTDIR}/usr/mdec/${BOOT2} cdrom/${BOOT2}
1101.8Sbouyer	${RM} -f bootxx.${MACHINE}
1111.8Sbouyer	${CP} ${DESTDIR}/usr/mdec/bootxx_cd9660 bootxx.${MACHINE}
1121.8Sbouyer	${CHMOD} +w bootxx.${MACHINE}
1131.8Sbouyer.if defined(CDBOOTOPTIONS)
1141.8Sbouyer	${TOOL_INSTALLBOOT} -m${MACHINE} -e ${CDBOOTOPTIONS} bootxx.${MACHINE}
1151.8Sbouyer.endif
1161.8Sbouyer.endif
1171.8Sbouyer.endif
1181.1Shubertf
1191.24Sdsl.if ${MAKEVERBOSE} >= 2
1201.24SdslPAX_v?= -v
1211.24Sdsl.else
1221.24SdslPAX_v?=
1231.24Sdsl.endif
1241.24Sdsl
1251.1Shubertf# Copy $RELEASEDIR/${MACHINE} in the CDROM dir
1261.1Shubertf#
1271.1Shubertf# XXX This could be done a lot easier if makefs(8) could
1281.1Shubertf# XXX include more than one directory on the image - HF
1291.1Shubertf#
1301.1Shubertfcopy-releasedir:
1311.18Sjmcneill	${RM} -f ${RELEASEDIR}/${CDROMS_RELEASEDIR}/${CDIMAGE}
1321.9Schristos	if ${CDRELEASE}; then 						\
1331.14Smatt		if [ ! -d ${RELEASEDIR}/${RELEASEMACHINEDIR} ]; then 		\
1341.14Smatt			echo "Missing ${RELEASEDIR}/${RELEASEMACHINEDIR}, aborting"; \
1351.9Schristos			exit 1; 					\
1361.9Schristos		fi; 							\
1371.9Schristos		${MKDIR} cdrom/${MACHINE}; 				\
1381.10Sjnemeth		curdir=$$(pwd);						\
1391.9Schristos		release_destdir=$$(pwd)/cdrom/${MACHINE}; 		\
1401.15Sad		cd ${RELEASEDIR}/${RELEASEMACHINEDIR}; 			\
1411.9Schristos		echo Copying $$(pwd) to $$release_destdir ...; 		\
1421.7Shubertf		${TOOL_PAX} 						\
1431.24Sdsl			-rw -pe ${PAX_v}				\
1441.7Shubertf			${CDRELEASE_EXCLUDE}				\
1451.9Schristos			. $$release_destdir; 				\
1461.10Sjnemeth		cd $$curdir;						\
1471.9Schristos	fi
1481.9Schristos	if ${CDSOURCE}; then 						\
1491.9Schristos		if [ ! -d ${RELEASEDIR}/source ]; then	 		\
1501.9Schristos			echo "Missing ${RELEASEDIR}/source, aborting"; 	\
1511.9Schristos			exit 1; 					\
1521.9Schristos		fi; 							\
1531.9Schristos		${MKDIR} cdrom/source; 					\
1541.10Sjnemeth		curdir=$$(pwd);						\
1551.9Schristos		release_destdir=$$(pwd)/cdrom/source;	 		\
1561.9Schristos		cd ${RELEASEDIR}/source; 				\
1571.9Schristos		echo Copying $$(pwd) to $$release_destdir ...;		\
1581.9Schristos		${TOOL_PAX} 						\
1591.24Sdsl			-rw -pe ${PAX_v}				\
1601.9Schristos			. $$release_destdir; 				\
1611.10Sjnemeth		cd $$curdir;						\
1621.1Shubertf	fi
1631.15Sad	if [ "X${CDRUNTIME}}" != "X" ]; then				\
1641.15Sad		curdir=$$(pwd);						\
1651.15Sad		release_destdir=$${curdir}/cdrom;			\
1661.15Sad		cd $$release_destdir;					\
1671.15Sad		cd ${DESTDIR};						\
1681.15Sad		for cde in ${CDRUNTIME};				\
1691.15Sad		do							\
1701.24Sdsl			${TOOL_PAX} -rw -pp ${PAX_v} $${cde} $$release_destdir;\
1711.15Sad		done;							\
1721.15Sad		cd $$curdir;						\
1731.15Sad	fi
1741.13Ssborrill	if [ "X${CDEXTRA}${CDBUILDEXTRA}" != "X" ]; then		\
1751.16Shubertf		curdir=`pwd`;						\
1761.13Ssborrill		skipflag="";						\
1771.16Shubertf		cdextra_skip="${CDEXTRA_SKIP}";				\
1781.16Shubertf		if [ "X$${cdextra_skip}" != "X" ]; then			\
1791.13Ssborrill			rm -f cdskip;					\
1801.16Shubertf			for skip in $${cdextra_skip};			\
1811.13Ssborrill			do						\
1821.13Ssborrill				echo $${skip} >> cdskip;		\
1831.13Ssborrill			done;						\
1841.13Ssborrill			skipflag="-X $${curdir}/cdskip";		\
1851.13Ssborrill		fi;							\
1861.16Shubertf		cdextra="${CDEXTRA}"; 					\
1871.16Shubertf		cdbuildextra="${CDBUILDEXTRA}"; 			\
1881.16Shubertf		for cde in $${cdextra} $${cdbuildextra};		\
1891.13Ssborrill		do							\
1901.13Ssborrill			release_destdir=$${curdir}/cdrom;		\
1911.13Ssborrill			if [ -f $${cde} ]; then				\
1921.13Ssborrill				echo Copying $${cde} to $$release_destdir ...;	\
1931.13Ssborrill				${CP} $${cde} $${release_destdir};	\
1941.13Ssborrill			elif [ -d $${cde} ]; then			\
1951.13Ssborrill				cd $${cde};				\
1961.13Ssborrill				echo Copying $$(pwd) to $$release_destdir ...;	\
1971.13Ssborrill				${TOOL_MTREE} -c $${skipflag} |		\
1981.24Sdsl					${TOOL_PAX} -rw -pe ${PAX_v} -M	\
1991.13Ssborrill					$$release_destdir; 		\
2001.13Ssborrill			else						\
2011.13Ssborrill				echo "Missing $${cde}, aborting"; 	\
2021.13Ssborrill				exit 1; 				\
2031.13Ssborrill			fi; 						\
2041.13Ssborrill			cd $$curdir;					\
2051.13Ssborrill		done;							\
2061.11Sjnemeth	fi
2071.1Shubertf
2081.1Shubertfimage:
2091.18Sjmcneill	${TOOL_MAKEFS} -t cd9660 -o ${_CDMAKEFSOPTIONS:Q} ${CDIMAGE} cdrom
2101.8Sbouyer
2111.8Sbouyer.if ${CDRELEASE} == false
2121.15Sadrelease: prepare .WAIT prepare_md_post .WAIT copy-releasedir .WAIT image_md_pre .WAIT image .WAIT image_md_post
2131.8Sbouyer	${MKDIR} ${RELEASEDIR}/${CDROMS_RELEASEDIR}
2141.18Sjmcneill	${RELEASE_INSTALL} ${CDIMAGE} ${RELEASEDIR}/${CDROMS_RELEASEDIR}
2151.1Shubertf
2161.8Sbouyeriso_image:
2171.8Sbouyer.else
2181.1Shubertfrelease:
2191.8Sbouyer
2201.15Sadiso_image: prepare .WAIT prepare_md_post .WAIT copy-releasedir .WAIT image_md_pre .WAIT image .WAIT image_md_post
2211.8Sbouyer	${MKDIR} ${RELEASEDIR}/${CDROMS_RELEASEDIR}
2221.18Sjmcneill	${RELEASE_INSTALL} ${CDIMAGE} ${RELEASEDIR}/${CDROMS_RELEASEDIR}
2231.8Sbouyer.endif
2241.1Shubertf
2251.1Shubertfclean:
2261.1Shubertf	${RM} -fr cdrom
2271.1Shubertf
2281.8Sbouyerprepare_md_post: .PHONY
2291.8Sbouyerimage_md_post: .PHONY
2301.15Sadimage_md_pre: .PHONY
2311.8Sbouyer
2321.1Shubertf.include <bsd.prog.mk>
233