Makefile.vm revision 277609
1273823Sgjb# 2273823Sgjb# $FreeBSD: head/release/Makefile.vm 277609 2015-01-23 21:05:00Z gjb $ 3273823Sgjb# 4273823Sgjb# 5273823Sgjb# Makefile for building virtual machine and cloud provider disk images. 6273823Sgjb# 7273823Sgjb 8277458SgjbVMTARGETS= vm-image 9273823SgjbVMFORMATS?= vhd vmdk qcow2 raw 10273823SgjbVMSIZE?= 20G 11273823SgjbVMBASE?= vm 12273823Sgjb 13277458SgjbVHD_DESC= Azure, VirtualPC, Hyper-V, Xen disk image 14277458SgjbVMDK_DESC= VMWare, VirtualBox disk image 15277458SgjbQCOW2_DESC= Qemu, KVM disk image 16277458SgjbRAW_DESC= Unformatted raw disk image 17277458Sgjb 18277458SgjbCLOUDWARE?= AZURE \ 19277458Sgjb GCE \ 20277458Sgjb OPENSTACK 21277458SgjbAZURE_FORMAT= vhdf 22277458SgjbAZURE_DESC= Microsoft Azure platform image 23277458SgjbGCE_FORMAT= raw 24277458SgjbGCE_DESC= Google Compute Engine image 25277458SgjbOPENSTACK_FORMAT=qcow2 26277458SgjbOPENSTACK_DESC= OpenStack platform image 27277458Sgjb 28277458Sgjb.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 29277458Sgjb. for _CW in ${CLOUDWARE} 30277458SgjbCLOUDTARGETS+= vm-${_CW:tl} 31277458SgjbCLEANDIRS+= vm-${_CW:tl} 32277458SgjbCLEANFILES+= ${_CW:tl}.img \ 33277458Sgjb ${_CW:tl}.${${_CW:tu}_FORMAT} \ 34277458Sgjb ${_CW:tl}.${${_CW:tu}_FORMAT}.raw 35277458Sgjb${_CW:tu}IMAGE= ${_CW:tl}.${${_CW:tu}_FORMAT} 36277458Sgjb. if exists(${.CURDIR}/tools/${_CW:tl}.conf) && !defined(${_CW:tu}CONF) 37277458Sgjb${_CW:tu}CONF?= ${.CURDIR}/tools/${_CW:tl}.conf 38277458Sgjb. endif 39277458Sgjb 40277458Sgjbvm-${_CW:tl}: 41277458Sgjb mkdir -p ${.OBJDIR}/${.TARGET} 42277458Sgjb env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 43277458Sgjb ${.CURDIR}/scripts/mk-vmimage.sh \ 44277458Sgjb -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \ 45277458Sgjb -i ${.OBJDIR}/${_CW:tl}.img -s ${VMSIZE} -f ${${_CW}_FORMAT} \ 46277458Sgjb -S ${WORLDDIR} -o ${.OBJDIR}/${${_CW}IMAGE} -c ${${_CW}CONF} 47277458Sgjb touch ${.TARGET} 48277458Sgjb. endfor 49277458Sgjb.endif 50277458Sgjb 51273823Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 52273823SgjbCLEANDIRS+= ${VMTARGETS} 53273823Sgjb. for FORMAT in ${VMFORMATS} 54277609SgjbCLEANFILES+= ${FORMAT}.img 55273823SgjbCLEANFILES+= ${VMBASE}.${FORMAT} 56273823Sgjb. endfor 57273823Sgjb.endif 58273823Sgjb 59277458Sgjbvm-base: vm-image 60273823Sgjb 61277458Sgjbvm-image: 62273823Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 63277458Sgjb. for FORMAT in ${VMFORMATS} 64277458Sgjb mkdir -p ${.OBJDIR}/${.TARGET} 65273823Sgjb env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \ 66277458Sgjb ${.CURDIR}/scripts/mk-vmimage.sh \ 67277458Sgjb -C ${.CURDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} \ 68277609Sgjb -i ${.OBJDIR}/${FORMAT}.img -s ${VMSIZE} -f ${FORMAT} \ 69277458Sgjb -S ${WORLDDIR} -o ${.OBJDIR}/${VMBASE}.${FORMAT} 70277458Sgjb. endfor 71273823Sgjb.endif 72273823Sgjb touch ${.TARGET} 73273823Sgjb 74277458Sgjbvm-cloudware: ${CLOUDTARGETS} 75277458Sgjb 76277458Sgjblist-vmtargets: list-cloudware 77277458Sgjb @${ECHO} 78277458Sgjb @${ECHO} "Supported virtual machine disk image formats:" 79277458Sgjb.for FORMAT in ${VMFORMATS:tu} 80277458Sgjb @${ECHO} " ${FORMAT:tl}: ${${FORMAT}_DESC}" 81277458Sgjb.endfor 82277458Sgjb 83277458Sgjblist-cloudware: 84277458Sgjb.if !empty(CLOUDWARE) 85277458Sgjb @${ECHO} 86277458Sgjb @${ECHO} "Supported cloud hosting provider images:" 87277458Sgjb. for _CW in ${CLOUDWARE} 88277458Sgjb @${ECHO} " ${_CW:tu}: ${${_CW:tu}_DESC}" 89277458Sgjb. endfor 90277458Sgjb.endif 91277458Sgjb 92277458Sgjbvm-install: 93273823Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 94277458Sgjb mkdir -p ${DESTDIR}/vmimages 95277458Sgjb. for FORMAT in ${VMFORMATS} 96277458Sgjb cp -p ${VMBASE}.${FORMAT} \ 97277458Sgjb ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT} 98277458Sgjb. endfor 99277458Sgjb. if defined(WITH_COMPRESSED_VMIMAGES) && !empty(WITH_COMPRESSED_VMIMAGES) 100277458Sgjb# This is very time consuming, so defer it after the images are moved to 101277458Sgjb# the DESTDIR. 102273823Sgjb. for FORMAT in ${VMFORMATS} 103277458Sgjb # Don't keep the originals. There is a copy in ${.OBJDIR} if needed. 104277458Sgjb ${XZCMD} ${DESTDIR}/vmimages/${OSRELEASE}.${FORMAT} 105273823Sgjb. endfor 106273823Sgjb. endif 107277458Sgjb cd ${DESTDIR}/vmimages && sha256 ${OSRELEASE}* > \ 108277458Sgjb ${DESTDIR}/vmimages/CHECKSUM.SHA256 109277458Sgjb cd ${DESTDIR}/vmimages && md5 ${OSRELEASE}* > \ 110277458Sgjb ${DESTDIR}/vmimages/CHECKSUM.MD5 111273823Sgjb.endif 112277536Sgjb 113277536Sgjbvm-release: 114277536Sgjb.if defined(WITH_VMIMAGES) && !empty(WITH_VMIMAGES) 115277536Sgjb ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${VMTARGETS} 116277536Sgjb.endif 117277536Sgjb 118277536Sgjbcloudware-release: 119277536Sgjb.if defined(WITH_CLOUDWARE) && !empty(WITH_CLOUDWARE) && !empty(CLOUDWARE) 120277536Sgjb ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${CLOUDTARGETS} 121277536Sgjb.endif 122