Makefile.bootcd revision 1.25
11.25Smartin# $NetBSD: Makefile.bootcd,v 1.25 2014/05/31 10:18:47 martin 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.25Smartin# CDMAKEFSEXTRAOPTS additional options for makefs, e.g. -F specfile 291.1Shubertf# CDROMS_RELEASEDIR Where to install ${CDBASE}.iso 301.8Sbouyer# CDINSTKERNEL instkernel directory (relative to ${.CURDIR}) 311.8Sbouyer# CDKERNELS couples of the form: 321.8Sbouyer# source name_on_cd 331.15Sad# CDRUNTIME files/directories to copy from $DESTDIR onto the CD 341.12Ssborrill# source kernels are copied from ${CDINSTKERNEL} (or its obj dir) 351.12Ssborrill# note that as of yet, bootxx_cd9660 can't load kernel names of more than 361.12Ssborrill# 8 chars (though they can be in a sub-directory meaning the pathname is 371.12Ssborrill# longer than 8 chars) 381.1Shubertf# 391.1Shubertf 401.1ShubertfBOOT?= ${DESTDIR}/usr/mdec/boot 411.1ShubertfBOOTXX_CD9660?= ${DESTDIR}/usr/mdec/bootxx_cd9660 421.1ShubertfCDRELEASE?= false 431.9SchristosCDSOURCE?= false 441.8Sbouyer.if ${CDRELEASE} == false 451.8SbouyerCDROMS_RELEASEDIR?= ${MACHINE}/installation/cdrom 461.8Sbouyer.else 471.20SrizCDROMS_RELEASEDIR?= images 481.8Sbouyer.endif 491.7Shubertf.if defined(CDRELEASE_NOISOS) 501.7ShubertfCDRELEASE_EXCLUDE= -s ',./installation/cdrom.*,,gp' 511.7Shubertf.endif 521.19Stsutsui.if !defined(CDRELEASE_LIVEIMAGE) 531.19StsutsuiCDRELEASE_EXCLUDE+= -s ',./installation/liveimage.*,,gp' 541.19Stsutsui.endif 551.19Stsutsui.if !defined(CDRELEASE_INSTALLIMAGE) 561.19StsutsuiCDRELEASE_EXCLUDE+= -s ',./installation/installimage.*,,gp' 571.19Stsutsui.endif 581.1Shubertf 591.8Sbouyer.include <bsd.own.mk> # For PRINTOBJDIR 601.8Sbouyer.include <bsd.kernobj.mk> # For KERNSRCDIR 611.8Sbouyer 621.18SjmcneillDISTRIBVER!= ${HOST_SH} ${KERNSRCDIR}/conf/osrelease.sh 631.8SbouyerDISTRIBREV!= ${HOST_SH} ${KERNSRCDIR}/conf/osrelease.sh -s 641.8SbouyerISO_VOLID!= echo NETBSD_${DISTRIBREV} | tr a-z A-Z 651.8SbouyerPUBLISHER?= The_NetBSD_Project 661.8Sbouyer.if defined(CDMAKEFSOPTIONS) 671.22Schristos_CDMAKEFSOPTIONS= rockridge,label=${ISO_VOLID},publisher=${PUBLISHER},${CDMAKEFSOPTIONS} 681.8Sbouyer.else 691.22Schristos_CDMAKEFSOPTIONS= rockridge,label=${ISO_VOLID},publisher=${PUBLISHER} 701.8Sbouyer.endif 711.8Sbouyer 721.1Shubertf# Stuff that should come from elsewhere - XXX where? - HF 731.1ShubertfCP?= cp 741.1ShubertfRM?= rm 751.1ShubertfMKDIR?= mkdir -p 761.1ShubertfCHMOD?= chmod 771.17SchristosECHO?= echo 781.1Shubertf 791.18Sjmcneill.if ${CDRELEASE} == false 801.18SjmcneillCDIMAGE= ${CDBASE}.iso 811.18Sjmcneill.else 821.18SjmcneillCDIMAGE= NetBSD-${DISTRIBVER}-${CDBASE:S/cd$//}.iso 831.18Sjmcneill.endif 841.1Shubertf 851.18SjmcneillCLEANFILES+= ${CDIMAGE} 861.8SbouyerCLEANFILES+= bootxx.${MACHINE} 871.1Shubertf 881.1Shubertf 891.1Shubertf.include "${NETBSDSRCDIR}/distrib/common/Makefile.distrib" 901.1Shubertf 911.8Sbouyer.if defined(CDINSTKERNEL) 921.8Sbouyer_INSTKERNELNOBJDIR!= cd ${.CURDIR}/${CDINSTKERNEL} && ${PRINTOBJDIR} 931.8Sbouyer.endif 941.8Sbouyer.if exists(${DESTDIR}/usr/mdec/bootxx_cd9660) 951.8Sbouyer.if exists(${DESTDIR}/usr/mdec/boot.${MACHINE}) 961.8SbouyerBOOT2=boot.${MACHINE} 971.8Sbouyer.else 981.8SbouyerBOOT2=boot 991.8Sbouyer.endif 1001.8Sbouyer.endif 1011.1Shubertf 1021.1Shubertfprepare: 1031.1Shubertf ${MKDIR} cdrom 1041.8Sbouyer.if defined(CDKERNELS) 1051.8Sbouyer.for kernel target in ${CDKERNELS} 1061.8Sbouyer ${CP} ${_INSTKERNELNOBJDIR}/${kernel} cdrom/${target} 1071.8Sbouyer.endfor 1081.8Sbouyer.if exists(${DESTDIR}/usr/mdec/bootxx_cd9660) 1091.8Sbouyer ${RM} -f cdrom/${BOOT2} 1101.8Sbouyer ${CP} ${DESTDIR}/usr/mdec/${BOOT2} cdrom/${BOOT2} 1111.8Sbouyer ${RM} -f bootxx.${MACHINE} 1121.8Sbouyer ${CP} ${DESTDIR}/usr/mdec/bootxx_cd9660 bootxx.${MACHINE} 1131.8Sbouyer ${CHMOD} +w bootxx.${MACHINE} 1141.8Sbouyer.if defined(CDBOOTOPTIONS) 1151.8Sbouyer ${TOOL_INSTALLBOOT} -m${MACHINE} -e ${CDBOOTOPTIONS} bootxx.${MACHINE} 1161.8Sbouyer.endif 1171.8Sbouyer.endif 1181.8Sbouyer.endif 1191.1Shubertf 1201.24Sdsl.if ${MAKEVERBOSE} >= 2 1211.24SdslPAX_v?= -v 1221.24Sdsl.else 1231.24SdslPAX_v?= 1241.24Sdsl.endif 1251.24Sdsl 1261.1Shubertf# Copy $RELEASEDIR/${MACHINE} in the CDROM dir 1271.1Shubertf# 1281.1Shubertf# XXX This could be done a lot easier if makefs(8) could 1291.1Shubertf# XXX include more than one directory on the image - HF 1301.1Shubertf# 1311.1Shubertfcopy-releasedir: 1321.18Sjmcneill ${RM} -f ${RELEASEDIR}/${CDROMS_RELEASEDIR}/${CDIMAGE} 1331.9Schristos if ${CDRELEASE}; then \ 1341.14Smatt if [ ! -d ${RELEASEDIR}/${RELEASEMACHINEDIR} ]; then \ 1351.14Smatt echo "Missing ${RELEASEDIR}/${RELEASEMACHINEDIR}, aborting"; \ 1361.9Schristos exit 1; \ 1371.9Schristos fi; \ 1381.9Schristos ${MKDIR} cdrom/${MACHINE}; \ 1391.10Sjnemeth curdir=$$(pwd); \ 1401.9Schristos release_destdir=$$(pwd)/cdrom/${MACHINE}; \ 1411.15Sad cd ${RELEASEDIR}/${RELEASEMACHINEDIR}; \ 1421.9Schristos echo Copying $$(pwd) to $$release_destdir ...; \ 1431.7Shubertf ${TOOL_PAX} \ 1441.24Sdsl -rw -pe ${PAX_v} \ 1451.7Shubertf ${CDRELEASE_EXCLUDE} \ 1461.9Schristos . $$release_destdir; \ 1471.10Sjnemeth cd $$curdir; \ 1481.9Schristos fi 1491.9Schristos if ${CDSOURCE}; then \ 1501.9Schristos if [ ! -d ${RELEASEDIR}/source ]; then \ 1511.9Schristos echo "Missing ${RELEASEDIR}/source, aborting"; \ 1521.9Schristos exit 1; \ 1531.9Schristos fi; \ 1541.9Schristos ${MKDIR} cdrom/source; \ 1551.10Sjnemeth curdir=$$(pwd); \ 1561.9Schristos release_destdir=$$(pwd)/cdrom/source; \ 1571.9Schristos cd ${RELEASEDIR}/source; \ 1581.9Schristos echo Copying $$(pwd) to $$release_destdir ...; \ 1591.9Schristos ${TOOL_PAX} \ 1601.24Sdsl -rw -pe ${PAX_v} \ 1611.9Schristos . $$release_destdir; \ 1621.10Sjnemeth cd $$curdir; \ 1631.1Shubertf fi 1641.15Sad if [ "X${CDRUNTIME}}" != "X" ]; then \ 1651.15Sad curdir=$$(pwd); \ 1661.15Sad release_destdir=$${curdir}/cdrom; \ 1671.15Sad cd $$release_destdir; \ 1681.15Sad cd ${DESTDIR}; \ 1691.15Sad for cde in ${CDRUNTIME}; \ 1701.15Sad do \ 1711.24Sdsl ${TOOL_PAX} -rw -pp ${PAX_v} $${cde} $$release_destdir;\ 1721.15Sad done; \ 1731.15Sad cd $$curdir; \ 1741.15Sad fi 1751.13Ssborrill if [ "X${CDEXTRA}${CDBUILDEXTRA}" != "X" ]; then \ 1761.16Shubertf curdir=`pwd`; \ 1771.13Ssborrill skipflag=""; \ 1781.16Shubertf cdextra_skip="${CDEXTRA_SKIP}"; \ 1791.16Shubertf if [ "X$${cdextra_skip}" != "X" ]; then \ 1801.13Ssborrill rm -f cdskip; \ 1811.16Shubertf for skip in $${cdextra_skip}; \ 1821.13Ssborrill do \ 1831.13Ssborrill echo $${skip} >> cdskip; \ 1841.13Ssborrill done; \ 1851.13Ssborrill skipflag="-X $${curdir}/cdskip"; \ 1861.13Ssborrill fi; \ 1871.16Shubertf cdextra="${CDEXTRA}"; \ 1881.16Shubertf cdbuildextra="${CDBUILDEXTRA}"; \ 1891.16Shubertf for cde in $${cdextra} $${cdbuildextra}; \ 1901.13Ssborrill do \ 1911.13Ssborrill release_destdir=$${curdir}/cdrom; \ 1921.13Ssborrill if [ -f $${cde} ]; then \ 1931.13Ssborrill echo Copying $${cde} to $$release_destdir ...; \ 1941.13Ssborrill ${CP} $${cde} $${release_destdir}; \ 1951.13Ssborrill elif [ -d $${cde} ]; then \ 1961.13Ssborrill cd $${cde}; \ 1971.13Ssborrill echo Copying $$(pwd) to $$release_destdir ...; \ 1981.13Ssborrill ${TOOL_MTREE} -c $${skipflag} | \ 1991.24Sdsl ${TOOL_PAX} -rw -pe ${PAX_v} -M \ 2001.13Ssborrill $$release_destdir; \ 2011.13Ssborrill else \ 2021.13Ssborrill echo "Missing $${cde}, aborting"; \ 2031.13Ssborrill exit 1; \ 2041.13Ssborrill fi; \ 2051.13Ssborrill cd $$curdir; \ 2061.13Ssborrill done; \ 2071.11Sjnemeth fi 2081.1Shubertf 2091.1Shubertfimage: 2101.25Smartin ${TOOL_MAKEFS} -t cd9660 ${CDMAKEFSEXTRAOPTS} -o ${_CDMAKEFSOPTIONS:Q} ${CDIMAGE} cdrom 2111.8Sbouyer 2121.8Sbouyer.if ${CDRELEASE} == false 2131.15Sadrelease: prepare .WAIT prepare_md_post .WAIT copy-releasedir .WAIT image_md_pre .WAIT image .WAIT image_md_post 2141.8Sbouyer ${MKDIR} ${RELEASEDIR}/${CDROMS_RELEASEDIR} 2151.18Sjmcneill ${RELEASE_INSTALL} ${CDIMAGE} ${RELEASEDIR}/${CDROMS_RELEASEDIR} 2161.1Shubertf 2171.8Sbouyeriso_image: 2181.8Sbouyer.else 2191.1Shubertfrelease: 2201.8Sbouyer 2211.15Sadiso_image: prepare .WAIT prepare_md_post .WAIT copy-releasedir .WAIT image_md_pre .WAIT image .WAIT image_md_post 2221.8Sbouyer ${MKDIR} ${RELEASEDIR}/${CDROMS_RELEASEDIR} 2231.18Sjmcneill ${RELEASE_INSTALL} ${CDIMAGE} ${RELEASEDIR}/${CDROMS_RELEASEDIR} 2241.8Sbouyer.endif 2251.1Shubertf 2261.1Shubertfclean: 2271.1Shubertf ${RM} -fr cdrom 2281.1Shubertf 2291.8Sbouyerprepare_md_post: .PHONY 2301.8Sbouyerimage_md_post: .PHONY 2311.15Sadimage_md_pre: .PHONY 2321.8Sbouyer 2331.1Shubertf.include <bsd.prog.mk> 234