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