Makefile revision 279558
1169689Skan# $FreeBSD: stable/10/release/Makefile 279558 2015-03-03 02:46:59Z gjb $ 2169689Skan# 3169689Skan# Makefile for building releases and release media. 4169689Skan# 5169689Skan# User-driven targets: 6169689Skan# cdrom: Builds release CD-ROM media (disc1.iso) 7169689Skan# dvdrom: Builds release DVD-ROM media (dvd1.iso) 8169689Skan# memstick: Builds memory stick image (memstick.img) 9169689Skan# mini-memstick: Builds minimal memory stick image (mini-memstick.img) 10169689Skan# ftp: Sets up FTP distribution area (ftp) 11169689Skan# release: Invokes real-release, vm-release, and cloudware-release targets 12169689Skan# real-release: Build all media and FTP distribution area 13169689Skan# vm-release: Build all virtual machine image targets 14169689Skan# cloudware-release: Build all cloud hosting provider targets 15169689Skan# install: Invokes the release-install and vm-install targets 16169689Skan# release-install: Copies all release installation media into ${DESTDIR} 17169689Skan# vm-install: Copies all virtual machine images into ${DESTDIR} 18169689Skan# 19169689Skan# Variables affecting the build process: 20169689Skan# WORLDDIR: location of src tree -- must have built world and default kernel 21169689Skan# (by default, the directory above this one) 22169689Skan# PORTSDIR: location of ports tree to distribute (default: /usr/ports) 23169689Skan# DOCDIR: location of doc tree (default: /usr/doc) 24169689Skan# NOPKG: if set, do not distribute third-party packages 25169689Skan# NOPORTS: if set, do not distribute ports tree 26169689Skan# NOSRC: if set, do not distribute source tree 27169689Skan# NODOC: if set, do not generate release documentation 28169689Skan# WITH_DVD: if set, generate dvd1.iso 29169689Skan# WITH_COMPRESSED_IMAGES: if set, compress installation images with xz(1) 30169689Skan# (uncompressed images are not removed) 31169689Skan# WITH_VMIMAGES: if set, build virtual machine images with the release 32169689Skan# WITH_COMPRESSED_VMIMAGES: if set, compress virtual machine disk images 33169689Skan# with xz(1) (extremely time consuming) 34169689Skan# WITH_CLOUDWARE: if set, build cloud hosting disk images with the release 35169689Skan# TARGET/TARGET_ARCH: architecture of built release 36169689Skan# 37169689Skan 38169689SkanWORLDDIR?= ${.CURDIR}/.. 39169689SkanPORTSDIR?= /usr/ports 40169689SkanDOCDIR?= /usr/doc 41169689SkanRELNOTES_LANG?= en_US.ISO8859-1 42169689SkanXZCMD?= /usr/bin/xz 43169689Skan 44169689Skan.if !defined(TARGET) || empty(TARGET) 45169689SkanTARGET= ${MACHINE} 46169689Skan.endif 47169689Skan.if !defined(TARGET_ARCH) || empty(TARGET_ARCH) 48169689Skan.if ${TARGET} == ${MACHINE} 49169689SkanTARGET_ARCH= ${MACHINE_ARCH} 50169689Skan.else 51169689SkanTARGET_ARCH= ${TARGET} 52169689Skan.endif 53169689Skan.endif 54169689SkanIMAKE= ${MAKE} TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET} 55169689SkanDISTDIR= dist 56169689Skan 57169689Skan# Define OSRELEASE by using newvars.sh 58169689Skan.if !defined(OSRELEASE) || empty(OSRELEASE) 59169689Skan.for _V in TYPE BRANCH REVISION 60169689Skan${_V}!= eval $$(awk '/^${_V}=/{print}' ${.CURDIR}/../sys/conf/newvers.sh); echo $$${_V} 61169689Skan.endfor 62169689Skan.for _V in ${TARGET_ARCH} 63169689Skan.if !empty(TARGET:M${_V}) 64169689SkanOSRELEASE= ${TYPE}-${REVISION}-${BRANCH}-${TARGET} 65169689SkanVOLUME_LABEL= ${REVISION:C/[.-]/_/g}_${BRANCH:C/[.-]/_/g}_${TARGET} 66169689Skan.else 67169689SkanOSRELEASE= ${TYPE}-${REVISION}-${BRANCH}-${TARGET}-${TARGET_ARCH} 68169689SkanVOLUME_LABEL= ${REVISION:C/[.-]/_/g}_${BRANCH:C/[.-]/_/g}_${TARGET_ARCH} 69169689Skan.endif 70169689Skan.endfor 71169689Skan.endif 72169689Skan 73169689Skan.if !defined(VOLUME_LABEL) || empty(VOLUME_LABEL) 74169689SkanVOLUME_LABEL= FreeBSD_Install 75169689Skan.endif 76169689Skan 77169689Skan.if !exists(${DOCDIR}) 78169689SkanNODOC= true 79169689Skan.endif 80169689Skan.if !exists(${PORTSDIR}) 81169689SkanNOPORTS= true 82169689Skan.endif 83169689Skan 84169689SkanEXTRA_PACKAGES= 85169689Skan.if !defined(NOPORTS) 86169689SkanEXTRA_PACKAGES+= ports.txz 87169689Skan.endif 88169689Skan.if !defined(NOSRC) 89169689SkanEXTRA_PACKAGES+= src.txz 90169689Skan.endif 91169689Skan.if !defined(NODOC) 92169689SkanEXTRA_PACKAGES+= reldoc 93169689Skan.endif 94169689Skan 95169689SkanRELEASE_TARGETS= ftp 96169689SkanIMAGES= 97169689Skan.if exists(${.CURDIR}/${TARGET}/mkisoimages.sh) 98169689SkanRELEASE_TARGETS+= cdrom 99169689SkanIMAGES+= disc1.iso bootonly.iso 100169689Skan. if defined(WITH_DVD) && !empty(WITH_DVD) 101169689SkanRELEASE_TARGETS+= dvdrom 102169689SkanIMAGES+= dvd1.iso 103169689Skan. endif 104169689Skan.endif 105169689Skan.if exists(${.CURDIR}/${TARGET}/make-memstick.sh) 106169689SkanRELEASE_TARGETS+= memstick.img 107169689SkanRELEASE_TARGETS+= mini-memstick.img 108169689SkanIMAGES+= memstick.img 109169689SkanIMAGES+= mini-memstick.img 110169689Skan.endif 111169689Skan.if exists(${.CURDIR}/${TARGET}/make-uefi-memstick.sh) 112169689SkanRELEASE_TARGETS+=uefi-memstick.img 113169689SkanRELEASE_TARGETS+=uefi-mini-memstick.img 114169689SkanIMAGES+= uefi-memstick.img 115169689SkanIMAGES+= uefi-mini-memstick.img 116169689Skan.endif 117169689Skan.if exists(${.CURDIR}/${TARGET}/mkisoimages-uefi.sh) 118169689SkanRELEASE_TARGETS+=uefi-disc1.iso 119169689SkanRELEASE_TARGETS+=uefi-bootonly.iso 120169689SkanIMAGES+= uefi-disc1.iso 121169689SkanIMAGES+= uefi-bootonly.iso 122169689Skan. if defined(WITH_DVD) && !empty(WITH_DVD) 123169689SkanRELEASE_TARGETS+=uefi-dvd1.iso 124169689SkanIMAGES+= uefi-dvd1.iso 125169689Skan. endif 126169689Skan.endif 127169689Skan 128169689SkanCLEANFILES= packagesystem *.txz MANIFEST release ${IMAGES} 129169689Skan.if defined(WITH_COMPRESSED_IMAGES) && !empty(WITH_COMPRESSED_IMAGES) 130169689Skan. for I in ${IMAGES} 131169689SkanCLEANFILES+= ${I}.xz 132169689Skan. endfor 133169689Skan.endif 134169689Skan.if defined(WITH_DVD) && !empty(WITH_DVD) 135169689SkanCLEANFILES+= pkg-stage 136169689Skan.endif 137169689SkanCLEANDIRS= dist ftp disc1 bootonly dvd 138169689Skanbeforeclean: 139169689Skan chflags -R noschg . 140169689Skan.include <bsd.obj.mk> 141169689Skanclean: beforeclean 142169689Skan 143169689Skanbase.txz: 144169689Skan mkdir -p ${DISTDIR} 145169689Skan cd ${WORLDDIR} && ${IMAKE} distributeworld DISTDIR=${.OBJDIR}/${DISTDIR} 146169689Skan# Set up mergemaster root database 147169689Skan sh ${.CURDIR}/scripts/mm-mtree.sh -m ${WORLDDIR} -F \ 148169689Skan "TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}" -D "${.OBJDIR}/${DISTDIR}/base" 149169689Skan etcupdate extract -B -M "TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}" \ 150169689Skan -s ${WORLDDIR} -d "${.OBJDIR}/${DISTDIR}/base/var/db/etcupdate" 151169689Skan# Package all components 152169689Skan cd ${WORLDDIR} && ${IMAKE} packageworld DISTDIR=${.OBJDIR}/${DISTDIR} 153169689Skan mv ${DISTDIR}/*.txz . 154169689Skan 155169689Skankernel.txz: 156169689Skan mkdir -p ${DISTDIR} 157169689Skan cd ${WORLDDIR} && ${IMAKE} distributekernel packagekernel DISTDIR=${.OBJDIR}/${DISTDIR} 158169689Skan mv ${DISTDIR}/kernel*.txz . 159169689Skan 160169689Skansrc.txz: 161169689Skan mkdir -p ${DISTDIR}/usr 162169689Skan ln -fs ${WORLDDIR} ${DISTDIR}/usr/src 163169689Skan cd ${DISTDIR} && tar cLvJf ${.OBJDIR}/src.txz --exclude .svn --exclude .zfs \ 164169689Skan --exclude .git --exclude @ --exclude usr/src/release/dist usr/src 165169689Skan 166169689Skanports.txz: 167169689Skan mkdir -p ${DISTDIR}/usr 168169689Skan ln -fs ${PORTSDIR} ${DISTDIR}/usr/ports 169169689Skan cd ${DISTDIR} && tar cLvJf ${.OBJDIR}/ports.txz \ 170169689Skan --exclude .git --exclude .svn \ 171169689Skan --exclude usr/ports/distfiles --exclude usr/ports/packages \ 172169689Skan --exclude 'usr/ports/INDEX*' --exclude work usr/ports 173169689Skan 174169689Skanreldoc: 175169689Skan cd ${.CURDIR}/doc && ${MAKE} all install clean 'FORMATS=html txt' \ 176169689Skan INSTALL_COMPRESSED='' URLS_ABSOLUTE=YES DOCDIR=${.OBJDIR}/rdoc 177169689Skan mkdir -p reldoc 178169689Skan.for i in hardware readme relnotes errata 179169689Skan ln -f rdoc/${RELNOTES_LANG}/${i}/article.txt reldoc/${i:tu}.TXT 180169689Skan ln -f rdoc/${RELNOTES_LANG}/${i}/article.html reldoc/${i:tu}.HTM 181169689Skan.endfor 182169689Skan cp rdoc/${RELNOTES_LANG}/readme/docbook.css reldoc 183169689Skan 184169689Skandisc1: packagesystem 185169689Skan# Install system 186169689Skan mkdir -p ${.TARGET} 187169689Skan cd ${WORLDDIR} && ${IMAKE} installkernel installworld distribution \ 188169689Skan DESTDIR=${.OBJDIR}/${.TARGET} WITHOUT_RESCUE=1 WITHOUT_KERNEL_SYMBOLS=1 \ 189169689Skan WITHOUT_PROFILE=1 WITHOUT_SENDMAIL=1 WITHOUT_ATF=1 WITHOUT_LIB32=1 190169689Skan# Copy distfiles 191169689Skan mkdir -p ${.TARGET}/usr/freebsd-dist 192169689Skan cp *.txz MANIFEST ${.TARGET}/usr/freebsd-dist 193169689Skan# Copy documentation, if generated 194169689Skan.if !defined(NODOC) 195169689Skan cp reldoc/* ${.TARGET} 196169689Skan.endif 197169689Skan# Set up installation environment 198169689Skan ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf 199169689Skan echo sendmail_enable=\"NONE\" > ${.TARGET}/etc/rc.conf 200169689Skan echo hostid_enable=\"NO\" >> ${.TARGET}/etc/rc.conf 201169689Skan cp ${.CURDIR}/rc.local ${.TARGET}/etc 202169689Skan touch ${.TARGET} 203169689Skan 204169689Skanbootonly: packagesystem 205169689Skan# Install system 206169689Skan mkdir -p ${.TARGET} 207169689Skan cd ${WORLDDIR} && ${IMAKE} installkernel installworld distribution \ 208169689Skan DESTDIR=${.OBJDIR}/${.TARGET} WITHOUT_AMD=1 WITHOUT_AT=1 \ 209169689Skan WITHOUT_GAMES=1 WITHOUT_GROFF=1 \ 210169689Skan WITHOUT_INSTALLLIB=1 WITHOUT_LIB32=1 WITHOUT_MAIL=1 \ 211169689Skan WITHOUT_NCP=1 WITHOUT_TOOLCHAIN=1 WITHOUT_PROFILE=1 \ 212169689Skan WITHOUT_INSTALLIB=1 WITHOUT_RESCUE=1 WITHOUT_DICT=1 \ 213169689Skan WITHOUT_KERNEL_SYMBOLS=1 214169689Skan# Copy manifest only (no distfiles) to get checksums 215169689Skan mkdir -p ${.TARGET}/usr/freebsd-dist 216169689Skan cp MANIFEST ${.TARGET}/usr/freebsd-dist 217169689Skan# Copy documentation, if generated 218169689Skan.if !defined(NODOC) 219169689Skan cp reldoc/* ${.TARGET} 220169689Skan.endif 221169689Skan# Set up installation environment 222169689Skan ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf 223169689Skan echo sendmail_enable=\"NONE\" > ${.TARGET}/etc/rc.conf 224169689Skan echo hostid_enable=\"NO\" >> ${.TARGET}/etc/rc.conf 225169689Skan cp ${.CURDIR}/rc.local ${.TARGET}/etc 226169689Skan 227169689Skandvd: packagesystem 228169689Skan# Install system 229169689Skan mkdir -p ${.TARGET} 230169689Skan cd ${WORLDDIR} && ${IMAKE} installkernel installworld distribution \ 231169689Skan DESTDIR=${.OBJDIR}/${.TARGET} WITHOUT_RESCUE=1 WITHOUT_KERNEL_SYMBOLS=1 232169689Skan# Copy distfiles 233169689Skan mkdir -p ${.TARGET}/usr/freebsd-dist 234169689Skan cp *.txz MANIFEST ${.TARGET}/usr/freebsd-dist 235169689Skan# Copy documentation, if generated 236169689Skan.if !defined(NODOC) 237169689Skan cp reldoc/* ${.TARGET} 238169689Skan.endif 239169689Skan# Set up installation environment 240169689Skan ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf 241169689Skan echo sendmail_enable=\"NONE\" > ${.TARGET}/etc/rc.conf 242169689Skan echo hostid_enable=\"NO\" >> ${.TARGET}/etc/rc.conf 243169689Skan cp ${.CURDIR}/rc.local ${.TARGET}/etc 244169689Skan touch ${.TARGET} 245169689Skan 246169689Skanrelease.iso: disc1.iso 247169689Skandisc1.iso: disc1 248169689Skan sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b ${VOLUME_LABEL}_CD ${.TARGET} disc1 249169689Skan 250169689Skanuefi-disc1.iso: disc1 251169689Skan.if exists(${.CURDIR}/${TARGET}/mkisoimages-uefi.sh) 252169689Skan sh ${.CURDIR}/${TARGET}/mkisoimages-uefi.sh -b ${VOLUME_LABEL}_UEFICD \ 253169689Skan ${.TARGET} disc1 254169689Skan.endif 255169689Skan 256169689Skanuefi-bootonly.iso: bootonly 257169689Skan.if exists(${.CURDIR}/${TARGET}/mkisoimages-uefi.sh) 258169689Skan sh ${.CURDIR}/${TARGET}/mkisoimages-uefi.sh -b ${VOLUME_LABEL}_UEFIBO \ 259169689Skan ${.TARGET} bootonly 260169689Skan.endif 261169689Skan 262169689Skandvd1.iso: dvd pkg-stage 263169689Skan sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b ${VOLUME_LABEL}_DVD ${.TARGET} dvd 264169689Skan 265169689Skanuefi-dvd1.iso: dvd pkg-stage 266169689Skan.if exists(${.CURDIR}/${TARGET}/mkisoimages-uefi.sh) 267169689Skan sh ${.CURDIR}/${TARGET}/mkisoimages-uefi.sh -b ${VOLUME_LABEL}_UEFIDVD \ 268169689Skan ${.TARGET} dvd 269169689Skan.endif 270169689Skan 271169689Skanbootonly.iso: bootonly 272169689Skan sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b ${VOLUME_LABEL}_BO ${.TARGET} bootonly 273169689Skan 274169689Skanmemstick: memstick.img 275169689Skanmemstick.img: disc1 276169689Skan sh ${.CURDIR}/${TARGET}/make-memstick.sh disc1 ${.TARGET} 277169689Skan 278169689Skanmini-memstick: mini-memstick.img 279169689Skanmini-memstick.img: bootonly 280169689Skan sh ${.CURDIR}/${TARGET}/make-memstick.sh bootonly ${.TARGET} 281169689Skan 282169689Skanuefi-memstick: uefi-memstick.img 283169689Skanuefi-memstick.img: disc1 284169689Skan.if exists(${.CURDIR}/${TARGET}/make-uefi-memstick.sh) 285169689Skan sh ${.CURDIR}/${TARGET}/make-uefi-memstick.sh disc1 ${.TARGET} 286169689Skan.endif 287169689Skan 288169689Skanuefi-mini-memstick: uefi-mini-memstick.img 289169689Skanuefi-mini-memstick.img: bootonly 290169689Skan.if exists(${.CURDIR}/${TARGET}/make-uefi-memstick.sh) 291169689Skan sh ${.CURDIR}/${TARGET}/make-uefi-memstick.sh bootonly ${.TARGET} 292169689Skan.endif 293169689Skan 294169689Skanpackagesystem: base.txz kernel.txz ${EXTRA_PACKAGES} 295169689Skan sh ${.CURDIR}/scripts/make-manifest.sh *.txz > MANIFEST 296169689Skan touch ${.TARGET} 297169689Skan 298169689Skanpkg-stage: 299169689Skan.if !defined(NOPKG) 300169689Skan env REPOS_DIR=${.CURDIR}/pkg_repos/ \ 301169689Skan sh ${.CURDIR}/scripts/pkg-stage.sh 302169689Skan mkdir -p ${.OBJDIR}/dvd/packages/repos/ 303169689Skan cp ${.CURDIR}/scripts/FreeBSD_install_cdrom.conf \ 304169689Skan ${.OBJDIR}/dvd/packages/repos/ 305169689Skan.endif 306169689Skan touch ${.TARGET} 307169689Skan 308169689Skancdrom: disc1.iso bootonly.iso 309169689Skandvdrom: dvd1.iso 310169689Skanftp: packagesystem 311169689Skan rm -rf ftp 312169689Skan mkdir -p ftp 313169689Skan cp *.txz MANIFEST ftp 314169689Skan 315169689Skanrelease: real-release vm-release cloudware-release 316169689Skan touch ${.TARGET} 317169689Skan 318169689Skanreal-release: 319169689Skan ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} obj 320169689Skan ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${RELEASE_TARGETS} 321169689Skan 322169689Skaninstall: release-install vm-install cloudware-install 323169689Skan 324169689Skanrelease-install: 325169689Skan.if defined(DESTDIR) && !empty(DESTDIR) 326169689Skan mkdir -p ${DESTDIR} 327169689Skan.endif 328169689Skan cp -a ftp ${DESTDIR}/ 329169689Skan.for I in ${IMAGES} 330169689Skan cp -p ${I} ${DESTDIR}/${OSRELEASE}-${I} 331169689Skan. if defined(WITH_COMPRESSED_IMAGES) && !empty(WITH_COMPRESSED_IMAGES) 332169689Skan ${XZCMD} -k ${DESTDIR}/${OSRELEASE}-${I} 333169689Skan. endif 334169689Skan.endfor 335169689Skan cd ${DESTDIR} && sha256 ${OSRELEASE}* > ${DESTDIR}/CHECKSUM.SHA256 336169689Skan cd ${DESTDIR} && md5 ${OSRELEASE}* > ${DESTDIR}/CHECKSUM.MD5 337169689Skan 338169689Skan.include "${.CURDIR}/Makefile.vm" 339169689Skan