xref: /freebsd/tests/ci/Makefile (revision 02376be32d6bcccc0c722c08779bd71e70516599)
1cb9d4bb1SMuhammad Moinur Rahman# SPDX-License-Identifier: BSD-2-Clause
2cb9d4bb1SMuhammad Moinur Rahman#
3cb9d4bb1SMuhammad Moinur Rahman# Copyright (c) 2024 The FreeBSD Foundation
4cb9d4bb1SMuhammad Moinur Rahman#
5cb9d4bb1SMuhammad Moinur Rahman# This software was developed by Cybermancer Infosec <bofh@FreeBSD.org>
6cb9d4bb1SMuhammad Moinur Rahman# under sponsorship from the FreeBSD Foundation.
7cb9d4bb1SMuhammad Moinur Rahman#
8cb9d4bb1SMuhammad Moinur Rahman# Makefile for CI testing.
9cb9d4bb1SMuhammad Moinur Rahman#
10cb9d4bb1SMuhammad Moinur Rahman# User-driven targets:
11c08f5ad1SMuhammad Moinur Rahman#  ci: Run CI tests
12c08f5ad1SMuhammad Moinur Rahman#  ci-smoke: Run smoke tests which is simply booting the image
13c08f5ad1SMuhammad Moinur Rahman#  ci-full: Run full tests
14cb9d4bb1SMuhammad Moinur Rahman#
15cb9d4bb1SMuhammad Moinur Rahman# Variables affecting the build process:
16cb9d4bb1SMuhammad Moinur Rahman#  TARGET/TARGET_ARCH: architecture of built release (default: same as build host)
17cb9d4bb1SMuhammad Moinur Rahman#  KERNELCONF: kernel configuration to use
18cb9d4bb1SMuhammad Moinur Rahman#  USE_QEMU: Use QEMU for testing rather than bhyve
19cb9d4bb1SMuhammad Moinur Rahman#
20cb9d4bb1SMuhammad Moinur Rahman
21*02376be3SEd MasteWORLDDIR?=	${.CURDIR:H:H}
22cb9d4bb1SMuhammad Moinur RahmanRELEASEDIR=	${WORLDDIR}/release
23cb9d4bb1SMuhammad Moinur RahmanMAKECONF?=	/dev/null
24cb9d4bb1SMuhammad Moinur RahmanSRCCONF?=	/dev/null
25cb9d4bb1SMuhammad Moinur Rahman_MEMORY!=sysctl -n hw.physmem 2>/dev/null
26cb9d4bb1SMuhammad Moinur RahmanPARALLEL_JOBS!=sysctl -n hw.ncpu 2>/dev/null || nproc 2>/dev/null
27cb9d4bb1SMuhammad Moinur RahmanTOTAL_MEMORY!=expr ${_MEMORY} / 1073741824
28cb9d4bb1SMuhammad Moinur RahmanKERNCONF?=	GENERIC
29cb9d4bb1SMuhammad Moinur RahmanLOCALBASE?=	/usr/local
304b656dedSMuhammad Moinur RahmanEXTRA_MAKE_FLAGS?=
31cb9d4bb1SMuhammad Moinur Rahman
32cb9d4bb1SMuhammad Moinur Rahman.if !defined(TARGET) || empty(TARGET)
33cb9d4bb1SMuhammad Moinur RahmanTARGET=		${MACHINE}
34cb9d4bb1SMuhammad Moinur Rahman.endif
35cb9d4bb1SMuhammad Moinur Rahman.if !defined(TARGET_ARCH) || empty(TARGET_ARCH)
36cb9d4bb1SMuhammad Moinur Rahman.  if ${TARGET} == ${MACHINE}
37cb9d4bb1SMuhammad Moinur RahmanTARGET_ARCH=	${MACHINE_ARCH}
38cb9d4bb1SMuhammad Moinur Rahman.  else
39cb9d4bb1SMuhammad Moinur RahmanTARGET_ARCH=	${TARGET}
40cb9d4bb1SMuhammad Moinur Rahman.  endif
41cb9d4bb1SMuhammad Moinur Rahman.endif
42cb9d4bb1SMuhammad Moinur RahmanIMAKE=		${MAKE} TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH}
43cb9d4bb1SMuhammad Moinur Rahman
44932cf5faSMuhammad Moinur Rahman.if !defined(CIENV) || empty(CIENV)
45932cf5faSMuhammad Moinur RahmanCIENV=		local
46932cf5faSMuhammad Moinur RahmanLOG_TARGET=	> ${.CURDIR}/_.${TARGET_ARCH}.${.TARGET} 2>&1 || (echo "${.TARGET} failed, check _.${TARGET_ARCH}.${.TARGET} for details" ; false)
47932cf5faSMuhammad Moinur Rahman.endif
48932cf5faSMuhammad Moinur Rahman
49cb9d4bb1SMuhammad Moinur Rahman.if defined(CROSS_TOOLCHAIN) || !empty(CROSS_TOOLCHAIN)
50cb9d4bb1SMuhammad Moinur RahmanCROSS_TOOLCHAIN_PARAM=	"CROSS_TOOLCHAIN=${CROSS_TOOLCHAIN}"
51cb9d4bb1SMuhammad Moinur Rahman.endif
52cb9d4bb1SMuhammad Moinur Rahman
53cb9d4bb1SMuhammad Moinur Rahman# Define OSRELEASE by using newvers.sh
54cb9d4bb1SMuhammad Moinur Rahman.if !defined(OSRELEASE) || empty(OSRELEASE)
55cb9d4bb1SMuhammad Moinur Rahman.  for _V in TYPE BRANCH REVISION
56cb9d4bb1SMuhammad Moinur Rahman.    if !defined(${_V}) || empty(${_V})
57cb9d4bb1SMuhammad Moinur Rahman${_V}!=	eval $$(awk '/^${_V}=/{print}' ${.CURDIR}/../../sys/conf/newvers.sh); echo $$${_V}
58cb9d4bb1SMuhammad Moinur Rahman.    endif
59cb9d4bb1SMuhammad Moinur Rahman.  endfor
60cb9d4bb1SMuhammad Moinur Rahman.  for _V in ${TARGET_ARCH}
61cb9d4bb1SMuhammad Moinur Rahman.    if !empty(TARGET:M${_V})
624d185f54SMuhammad Moinur RahmanOSRELEASE=	${TYPE}-${REVISION}-${BRANCH:C/[.-\/]/_/g}-${TARGET}
634d185f54SMuhammad Moinur RahmanVOLUME_LABEL=	${REVISION:C/[.-]/_/g}_${BRANCH:C/[.-\/]/_/g}_${TARGET}
64cb9d4bb1SMuhammad Moinur Rahman.    else
654d185f54SMuhammad Moinur RahmanOSRELEASE=	${TYPE}-${REVISION}-${BRANCH:C/[.-\/]/_/g}-${TARGET}-${TARGET_ARCH}
664d185f54SMuhammad Moinur RahmanVOLUME_LABEL=	${REVISION:C/[.-]/_/g}_${BRANCH:C/[.-\/]/_/g}_${TARGET_ARCH}
67cb9d4bb1SMuhammad Moinur Rahman.    endif
68cb9d4bb1SMuhammad Moinur Rahman.  endfor
69cb9d4bb1SMuhammad Moinur Rahman.endif
70cb9d4bb1SMuhammad Moinur Rahman
71cb9d4bb1SMuhammad Moinur Rahman.if exists(${.CURDIR}/tools/ci.conf) && !defined(CICONF)
72cb9d4bb1SMuhammad Moinur RahmanCICONF?=	${.CURDIR}/tools/ci.conf
73cb9d4bb1SMuhammad Moinur Rahman.endif
74cb9d4bb1SMuhammad Moinur RahmanSWAPSIZE?=	1g
75cb9d4bb1SMuhammad Moinur RahmanVMFS?=		ufs
76cb9d4bb1SMuhammad Moinur RahmanFORMAT=		raw
77cb9d4bb1SMuhammad Moinur RahmanCIIMAGE=	ci-${OSRELEASE}-${GITREV}-${KERNCONF}.${FORMAT}
78c08f5ad1SMuhammad Moinur RahmanCIDISK?=	${.OBJDIR}/${CIIMAGE}
79cb9d4bb1SMuhammad Moinur RahmanVMSIZE?=	6g
80c08f5ad1SMuhammad Moinur RahmanCITYPE?=	full
8192a7f2d5SSiva MahadevanKYUA_TEST_FILTERS?=
82c08f5ad1SMuhammad Moinur RahmanMETA_TAR!=mktemp /tmp/meta.XXXXXX
83c08f5ad1SMuhammad Moinur RahmanMETA_DIR!=mktemp -d /tmp/meta.XXXXXX
84c08f5ad1SMuhammad Moinur RahmanMETA_DIROUT!=mktemp -d /tmp/meta.XXXXXX
8514d5c13aSMuhammad Moinur RahmanENV_FILE=	${META_DIR}/ci-${OSRELEASE}-${GITREV}-${KERNCONF}.env
86c08f5ad1SMuhammad Moinur RahmanDISC_CAM!=truncate -s 128m /tmp/disk-cam
87c08f5ad1SMuhammad Moinur RahmanEXTRA_DISK_NUM?=5
88c08f5ad1SMuhammad Moinur RahmanDISK_NUMBERS!=jot - 1 ${EXTRA_DISK_NUM}
89c08f5ad1SMuhammad Moinur RahmanBHYVE_EXTRA_DISK_PARAM?=
90c08f5ad1SMuhammad Moinur RahmanBHYVE_EXTRA_DISK_PARAM+=-s 4:0,ahci-hd,/tmp/disk-cam
91c08f5ad1SMuhammad Moinur Rahman.for i in ${DISK_NUMBERS}
92c08f5ad1SMuhammad Moinur RahmanNEW_DISK!=truncate -s 128m /tmp/disk${i}
93c08f5ad1SMuhammad Moinur RahmanBHYVE_EXTRA_DISK_PARAM+=-s $$((${i} + 4)):0,virtio-blk,/tmp/disk${i}
94c08f5ad1SMuhammad Moinur RahmanCLEANFILES+=/tmp/disk${i}
95c08f5ad1SMuhammad Moinur Rahman.endfor
96cb9d4bb1SMuhammad Moinur RahmanTEST_VM_NAME=	ci-${OSRELEASE}-${GITREV}-${KERNCONF}
97cb9d4bb1SMuhammad Moinur Rahman.if ${TOTAL_MEMORY} >= 16
98c08f5ad1SMuhammad Moinur RahmanVM_MEM=8
99cb9d4bb1SMuhammad Moinur Rahman.elif ${TOTAL_MEMORY} >=4
100cb9d4bb1SMuhammad Moinur RahmanVM_MEM=${TOTAL_MEMORY}
101cb9d4bb1SMuhammad Moinur Rahman.else
102cb9d4bb1SMuhammad Moinur Rahmanecho "Please increase the memory to at least 4GB"
103cb9d4bb1SMuhammad Moinur Rahmanexit 0
104cb9d4bb1SMuhammad Moinur Rahman.endif
105cb9d4bb1SMuhammad Moinur RahmanVM_MEM_SIZE?=${VM_MEM}g
106cb9d4bb1SMuhammad Moinur RahmanTIMEOUT_MS?=5400000
107cb9d4bb1SMuhammad Moinur RahmanTIMEOUT=$$((${TIMEOUT_MS} / 1000))
108cb9d4bb1SMuhammad Moinur RahmanTIMEOUT_EXPECT=$$((${TIMEOUT} - 60))
109cb9d4bb1SMuhammad Moinur RahmanTIMEOUT_VM=$$((${TIMEOUT_EXPECT} - 120))
110cb9d4bb1SMuhammad Moinur Rahman.if exists(${.CURDIR}/Makefile.${TARGET_ARCH})
111cb9d4bb1SMuhammad Moinur Rahman.	include "${.CURDIR}/Makefile.${TARGET_ARCH}"
112cb9d4bb1SMuhammad Moinur Rahman.endif
113cb9d4bb1SMuhammad Moinur Rahman.if ${TARGET_ARCH} != ${MACHINE_ARCH}
114cb9d4bb1SMuhammad Moinur Rahman.  if ( ${TARGET_ARCH} != "i386" ) || ( ${MACHINE_ARCH} != "amd64" )
115cb9d4bb1SMuhammad Moinur RahmanQEMUSTATIC=/usr/local/bin/qemu-${QEMU_ARCH}-static
116cb9d4bb1SMuhammad Moinur RahmanQEMUTGT=portinstall-qemu
117cb9d4bb1SMuhammad Moinur Rahman.  endif
118cb9d4bb1SMuhammad Moinur Rahman.endif
119cb9d4bb1SMuhammad Moinur RahmanQEMUTGT?=
1209ec37e8fSSiva MahadevanQEMU_DEVICES?=
121cb9d4bb1SMuhammad Moinur RahmanQEMU_EXTRA_PARAM?=
122cb9d4bb1SMuhammad Moinur RahmanQEMU_MACHINE?=virt
123cb9d4bb1SMuhammad Moinur RahmanQEMUBIN=/usr/local/bin/qemu-system-${QEMU_ARCH}
124cb9d4bb1SMuhammad Moinur Rahman.if ${PARALLEL_JOBS} >= ${QEMU_MAX_CPU_COUNT}
125cb9d4bb1SMuhammad Moinur RahmanQEMU_CPU_COUNT=${QEMU_MAX_CPU_COUNT}
126cb9d4bb1SMuhammad Moinur Rahman.else
127cb9d4bb1SMuhammad Moinur RahmanQEMU_CPU_COUNT=${PARALLEL_JOBS}
128cb9d4bb1SMuhammad Moinur Rahman.endif
129cb9d4bb1SMuhammad Moinur Rahman.if ${VM_MEM} >= ${QEMU_MAX_MEM_SIZE}
130cb9d4bb1SMuhammad Moinur RahmanVM_MEM_SIZE=${QEMU_MAX_MEM_SIZE}g
131cb9d4bb1SMuhammad Moinur Rahman.else
132cb9d4bb1SMuhammad Moinur RahmanVM_MEM_SIZE=${VM_MEM}g
133cb9d4bb1SMuhammad Moinur Rahman.endif
1345ea28c51SMuhammad Moinur RahmanVMGUEST!=sysctl -n kern.vm_guest 2>/dev/null || true
1355ea28c51SMuhammad Moinur Rahman.if ${VMGUEST} != "none"
136cb9d4bb1SMuhammad Moinur RahmanUSE_QEMU?=1
137cb9d4bb1SMuhammad Moinur Rahman.endif
138cb9d4bb1SMuhammad Moinur RahmanKLDFILEMONISLOADED!=kldload -q -n filemon 2>/dev/null && echo "1" || echo "0"
139cb9d4bb1SMuhammad Moinur Rahman.if ${KLDFILEMONISLOADED} == "1"
140cb9d4bb1SMuhammad Moinur RahmanMETAMODE?=-DWITH_META_MODE
141cb9d4bb1SMuhammad Moinur Rahman.endif
142cb9d4bb1SMuhammad Moinur Rahman
143c08f5ad1SMuhammad Moinur RahmanCLEANFILES+=	${.OBJDIR}/${CIIMAGE} ${.OBJDIR}/ci.img ${META_TAR}
14466fe8050SSiva MahadevanIMAGEDIR=	${.OBJDIR}/ci-buildimage
14566fe8050SSiva MahadevanCLEANDIRS+=	${IMAGEDIR}
146cb9d4bb1SMuhammad Moinur Rahman
147cb9d4bb1SMuhammad Moinur Rahmanportinstall: portinstall-pkg portinstall-qemu portinstall-expect portinstall-${TARGET_ARCH:tl} .PHONY
148cb9d4bb1SMuhammad Moinur Rahman
149cb9d4bb1SMuhammad Moinur Rahmanportinstall-pkg: .PHONY
150cb9d4bb1SMuhammad Moinur Rahman.if !exists(/usr/local/sbin/pkg-static)
151cb9d4bb1SMuhammad Moinur Rahman	env ASSUME_ALWAYS_YES=yes pkg bootstrap
152cb9d4bb1SMuhammad Moinur Rahman.endif
153cb9d4bb1SMuhammad Moinur Rahman
154cb9d4bb1SMuhammad Moinur Rahmanportinstall-qemu: portinstall-pkg .PHONY
155ed4c64bcSSiva Mahadevan.if !exists(/usr/local/bin/qemu-${QEMU_ARCH}-static)
156cb9d4bb1SMuhammad Moinur Rahman	env ASSUME_ALWAYS_YES=yes pkg install emulators/qemu-user-static
157cb9d4bb1SMuhammad Moinur Rahman.endif
158ed4c64bcSSiva Mahadevan.if !exists(${QEMUBIN})
159cb9d4bb1SMuhammad Moinur Rahman	env ASSUME_ALWAYS_YES=yes pkg install emulators/qemu@nox11
160cb9d4bb1SMuhammad Moinur Rahman.endif
161cb9d4bb1SMuhammad Moinur Rahman
162cb9d4bb1SMuhammad Moinur Rahmanportinstall-expect: portinstall-pkg .PHONY
163cb9d4bb1SMuhammad Moinur Rahman.if !exists(/usr/local/bin/expect)
164cb9d4bb1SMuhammad Moinur Rahman	env ASSUME_ALWAYS_YES=yes pkg install lang/expect
165cb9d4bb1SMuhammad Moinur Rahman.endif
166cb9d4bb1SMuhammad Moinur Rahman
167cb9d4bb1SMuhammad Moinur Rahmanbeforeclean: .PHONY
16866fe8050SSiva Mahadevan	chflags -R noschg ${IMAGEDIR}
169cb9d4bb1SMuhammad Moinur Rahman
170cb9d4bb1SMuhammad Moinur Rahman.include <bsd.obj.mk>
171cb9d4bb1SMuhammad Moinur Rahmanclean: beforeclean .PHONY
172cb9d4bb1SMuhammad Moinur Rahman
173c08f5ad1SMuhammad Moinur Rahmancleandir: beforeclean .PHONY
174c08f5ad1SMuhammad Moinur Rahman
175cb9d4bb1SMuhammad Moinur Rahmanci-buildworld: .PHONY
176a5f03413SWarner Losh	@echo "Building world for ${TARGET_ARCH}"
177a5f03413SWarner Losh	${IMAKE} -j${PARALLEL_JOBS} -C ${WORLDDIR} ${METAMODE} \
178a5f03413SWarner Losh		${CROSS_TOOLCHAIN_PARAM} __MAKE_CONF=${MAKECONF} SRCCONF=${SRCCONF} \
179932cf5faSMuhammad Moinur Rahman		${EXTRA_MAKE_FLAGS} buildworld ${LOG_TARGET}
180cb9d4bb1SMuhammad Moinur Rahman
181cb9d4bb1SMuhammad Moinur Rahmanci-buildkernel: ci-buildworld-${TARGET_ARCH:tl} .PHONY
1822c6e4aedSkalinasp	@echo "Building kernel for ${TARGET_ARCH}"
183a5f03413SWarner Losh	${IMAKE} -j${PARALLEL_JOBS} -C ${WORLDDIR} ${METAMODE} \
1842c6e4aedSkalinasp		${CROSS_TOOLCHAIN_PARAM} __MAKE_CONF=${MAKECONF} SRCCONF=${SRCCONF} \
1854b656dedSMuhammad Moinur Rahman		${EXTRA_MAKE_FLAGS} KERNCONF=${KERNCONF} \
186932cf5faSMuhammad Moinur Rahman		buildkernel ${LOG_TARGET}
187cb9d4bb1SMuhammad Moinur Rahman
188cb9d4bb1SMuhammad Moinur Rahmanci-buildimage: ${QEMUTGT} ci-buildkernel-${TARGET_ARCH:tl} .PHONY
1892c6e4aedSkalinasp	@echo "Building ci image for ${TARGET_ARCH}"
190cb9d4bb1SMuhammad Moinur Rahman	mkdir -p ${.OBJDIR}/${.TARGET}
191cb9d4bb1SMuhammad Moinur Rahman	env TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} SWAPSIZE=${SWAPSIZE} \
192cb9d4bb1SMuhammad Moinur Rahman		QEMUSTATIC=${QEMUSTATIC} CITYPE=${CITYPE} \
193cb9d4bb1SMuhammad Moinur Rahman		${RELEASEDIR}/scripts/mk-vmimage.sh \
194cb9d4bb1SMuhammad Moinur Rahman		-C ${RELEASEDIR}/tools/vmimage.subr -d ${.OBJDIR}/${.TARGET} -F ${VMFS} \
195cb9d4bb1SMuhammad Moinur Rahman		-i ${.OBJDIR}/ci.img -s ${VMSIZE} -f ${FORMAT} \
196932cf5faSMuhammad Moinur Rahman		-S ${WORLDDIR} -o ${.OBJDIR}/${CIIMAGE} -c ${CICONF} ${LOG_TARGET}
197cb9d4bb1SMuhammad Moinur Rahman	touch ${.TARGET}
198cb9d4bb1SMuhammad Moinur Rahman
199c08f5ad1SMuhammad Moinur Rahmanci-set-smoke-var: .PHONY
200cb9d4bb1SMuhammad Moinur RahmanCITYPE=smoke
201cb9d4bb1SMuhammad Moinur Rahman
202c08f5ad1SMuhammad Moinur Rahmanci-set-full-var: .PHONY
203c08f5ad1SMuhammad Moinur RahmanCITYPE=full
204c08f5ad1SMuhammad Moinur Rahman
20514d5c13aSMuhammad Moinur Rahmanci-get-env: .PHONY
20614d5c13aSMuhammad Moinur Rahman	@echo "TARGET=${TARGET}" > ${ENV_FILE}
20714d5c13aSMuhammad Moinur Rahman	@echo "TARGET_ARCH=${TARGET_ARCH}" >> ${ENV_FILE}
20814d5c13aSMuhammad Moinur Rahman	@echo "KERNCONF=${KERNCONF}" >> ${ENV_FILE}
20914d5c13aSMuhammad Moinur Rahman	@echo "OSRELEASE=${OSRELEASE}" >> ${ENV_FILE}
21014d5c13aSMuhammad Moinur Rahman	@echo "CIIMAGE=${CIIMAGE}" >> ${ENV_FILE}
21114d5c13aSMuhammad Moinur Rahman	@echo "CIDISK=${CIDISK}" >> ${ENV_FILE}
21214d5c13aSMuhammad Moinur Rahman	@echo "VMSIZE=${VMSIZE}" >> ${ENV_FILE}
21314d5c13aSMuhammad Moinur Rahman	@echo "VM_MEM_SIZE=${VM_MEM_SIZE}" >> ${ENV_FILE}
21414d5c13aSMuhammad Moinur Rahman	@echo "TIMEOUT=${TIMEOUT}s" >> ${ENV_FILE}
21514d5c13aSMuhammad Moinur Rahman	@echo "CITYPE=${CITYPE}" >> ${ENV_FILE}
21614d5c13aSMuhammad Moinur Rahman	@echo "KYUA_TEST_FILTERS='${KYUA_TEST_FILTERS}'" >> ${ENV_FILE}
21714d5c13aSMuhammad Moinur Rahman	@echo "META_MODE='${METAMODE}'" >> ${ENV_FILE}
21814d5c13aSMuhammad Moinur Rahman	@echo "USE_QEMU='${USE_QEMU}'" >> ${ENV_FILE}
21914d5c13aSMuhammad Moinur Rahman	@echo "GITREV='${GITREV}'" >> ${ENV_FILE}
22014d5c13aSMuhammad Moinur Rahman	@echo "GITBRANCH='${GITBRANCH}'" >> ${ENV_FILE}
22114d5c13aSMuhammad Moinur Rahman	@echo "GITCOUNT='${GITCOUNT}'" >> ${ENV_FILE}
22214d5c13aSMuhammad Moinur Rahman	@echo "BUILDDATE='${BUILDDATE}'" >> ${ENV_FILE}
22314d5c13aSMuhammad Moinur Rahman	@echo "CC='${CC}'" >> ${ENV_FILE}
22414d5c13aSMuhammad Moinur Rahman	@echo "CFLAGS='${CFLAGS}'" >> ${ENV_FILE}
22514d5c13aSMuhammad Moinur Rahman	@echo "CPP='${CPP}'" >> ${ENV_FILE}
22614d5c13aSMuhammad Moinur Rahman	@echo "CXX='${CXX}'" >> ${ENV_FILE}
22714d5c13aSMuhammad Moinur Rahman	@echo "CXXFLAGS='${CXXFLAGS}'" >> ${ENV_FILE}
22814d5c13aSMuhammad Moinur Rahman	@echo "COMPILER_FEATURES='${COMPILER_FEATURES}'" >> ${ENV_FILE}
22914d5c13aSMuhammad Moinur Rahman	@echo "COMPILER_FREEBSD_VERSION='${COMPILER_FREEBSD_VERSION}'" >> ${ENV_FILE}
23014d5c13aSMuhammad Moinur Rahman	@echo "COMPILER_TYPE='${COMPILER_TYPE}'" >> ${ENV_FILE}
23114d5c13aSMuhammad Moinur Rahman	@echo "COMPILER_VERSION='${COMPILER_VERSION}'" >> ${ENV_FILE}
23214d5c13aSMuhammad Moinur Rahman	@echo "HOST_CC='${HOST_CC}'" >> ${ENV_FILE}
23314d5c13aSMuhammad Moinur Rahman	@echo "HOST_MACHINE='${HOST_MACHINE}'" >> ${ENV_FILE}
23414d5c13aSMuhammad Moinur Rahman	@echo "HOST_OS='${HOST_OS}'" >> ${ENV_FILE}
23514d5c13aSMuhammad Moinur Rahman	@echo "HOST_OSMAJOR='${HOST_OSMAJOR}'" >> ${ENV_FILE}
23614d5c13aSMuhammad Moinur Rahman	@echo "HOST_OSTYPE='${HOST_OSTYPE}'" >> ${ENV_FILE}
23714d5c13aSMuhammad Moinur Rahman	@echo "LD='${LD}'" >> ${ENV_FILE}
23814d5c13aSMuhammad Moinur Rahman	@echo "LDFLAGS='${LDFLAGS}'" >> ${ENV_FILE}
23914d5c13aSMuhammad Moinur Rahman	@echo "MACHINE='${MACHINE}'" >> ${ENV_FILE}
24014d5c13aSMuhammad Moinur Rahman	@echo "MACHINE_ABI='${MACHINE_ABI}'" >> ${ENV_FILE}
24114d5c13aSMuhammad Moinur Rahman	@echo "MACHINE_ARCH='${MACHINE_ARCH}'" >> ${ENV_FILE}
24214d5c13aSMuhammad Moinur Rahman	@echo "MACHINE_CPU='${MACHINE_CPU}'" >> ${ENV_FILE}
24314d5c13aSMuhammad Moinur Rahman	@echo "MACHINE_CPUARCH='${MACHINE_CPUARCH}'" >> ${ENV_FILE}
24414d5c13aSMuhammad Moinur Rahman
24514d5c13aSMuhammad Moinur Rahmanci-create-meta: ci-get-env .PHONY
246c08f5ad1SMuhammad Moinur Rahman	truncate -s 512M ${META_TAR}
247c08f5ad1SMuhammad Moinur Rahman	tar rvf ${META_TAR} -C ${META_DIR} .
248c08f5ad1SMuhammad Moinur Rahman
249c08f5ad1SMuhammad Moinur Rahmanci-extract-meta: .PHONY
250c08f5ad1SMuhammad Moinur Rahman	tar xfv ${META_TAR} -C ${META_DIROUT}
25110fb5e71SSiva Mahadevan	rm -rf ${META_TAR} ${META_DIR}
252c08f5ad1SMuhammad Moinur Rahman	@echo "Extracted kyua reports to ${META_DIROUT}"
253c08f5ad1SMuhammad Moinur Rahman
254cb9d4bb1SMuhammad Moinur Rahmanci-runtest: ci-buildimage-${TARGET_ARCH:tl} portinstall .PHONY
255cb9d4bb1SMuhammad Moinur Rahman.if ${MACHINE} == "amd64" && ( ${TARGET_ARCH} == "amd64" || ${TARGET_ARCH} == "i386" ) && ( !defined(USE_QEMU) || empty(USE_QEMU) )
256cb9d4bb1SMuhammad Moinur Rahman	/usr/sbin/bhyvectl --vm=${TEST_VM_NAME} --destroy || true
2572f50ea54SSiva Mahadevan	expect -c "set timeout ${TIMEOUT_EXPECT}; \
2582f50ea54SSiva Mahadevan		spawn /usr/bin/timeout -k 5s 30s /usr/sbin/bhyveload \
2592f50ea54SSiva Mahadevan		-c stdio -m ${VM_MEM_SIZE} -d ${CIDISK} ${TEST_VM_NAME}; \
2602f50ea54SSiva Mahadevan		expect { eof }; \
2612f50ea54SSiva Mahadevan		exit [lindex [wait] 3]"
262cb9d4bb1SMuhammad Moinur Rahman	expect -c "set timeout ${TIMEOUT_EXPECT}; \
263cb9d4bb1SMuhammad Moinur Rahman		spawn /usr/bin/timeout -k 60 ${TIMEOUT_VM} /usr/sbin/bhyve \
264cb9d4bb1SMuhammad Moinur Rahman		-c ${PARALLEL_JOBS} -m ${VM_MEM_SIZE} -A -H -P \
265cb9d4bb1SMuhammad Moinur Rahman		-s 0:0,hostbridge \
266cb9d4bb1SMuhammad Moinur Rahman		-s 1:0,lpc \
267c08f5ad1SMuhammad Moinur Rahman		-s 2:0,virtio-blk,${CIDISK} \
268c08f5ad1SMuhammad Moinur Rahman		-s 3:0,virtio-blk,${META_TAR} \
269c08f5ad1SMuhammad Moinur Rahman		${BHYVE_EXTRA_DISK_PARAM} \
270cb9d4bb1SMuhammad Moinur Rahman		-l com1,stdio \
271cb9d4bb1SMuhammad Moinur Rahman		${TEST_VM_NAME}; \
272cb9d4bb1SMuhammad Moinur Rahman		expect { eof }"
273cb9d4bb1SMuhammad Moinur Rahman	/usr/sbin/bhyvectl --vm=${TEST_VM_NAME} --destroy
274cb9d4bb1SMuhammad Moinur Rahman.else
275cb9d4bb1SMuhammad Moinur Rahman	timeout -k 60 ${TIMEOUT_VM} ${QEMUBIN} \
276cb9d4bb1SMuhammad Moinur Rahman		-machine ${QEMU_MACHINE} \
277cb9d4bb1SMuhammad Moinur Rahman		-smp ${QEMU_CPU_COUNT} \
278cb9d4bb1SMuhammad Moinur Rahman		-m ${VM_MEM_SIZE} \
279cb9d4bb1SMuhammad Moinur Rahman		-nographic \
280cb9d4bb1SMuhammad Moinur Rahman		-no-reboot \
281cb9d4bb1SMuhammad Moinur Rahman		${QEMU_EXTRA_PARAM} \
2829ec37e8fSSiva Mahadevan		-device virtio-blk,drive=hd0 \
2839ec37e8fSSiva Mahadevan		-device virtio-blk,drive=hd1 \
2849ec37e8fSSiva Mahadevan		-blockdev driver=raw,node-name=hd0,file.driver=file,file.filename=${CIDISK} \
2859ec37e8fSSiva Mahadevan		-blockdev driver=raw,node-name=hd1,file.driver=file,file.filename=${META_TAR} \
286cb9d4bb1SMuhammad Moinur Rahman		${QEMU_DEVICES}
287cb9d4bb1SMuhammad Moinur Rahman.endif
288cb9d4bb1SMuhammad Moinur Rahman
289cb9d4bb1SMuhammad Moinur Rahmanci-checktarget: .PHONY
290cb9d4bb1SMuhammad Moinur Rahman.if ${TARGET_ARCH} != "aarch64" && \
291cb9d4bb1SMuhammad Moinur Rahman	${TARGET_ARCH} != "amd64" && \
292cb9d4bb1SMuhammad Moinur Rahman	${TARGET_ARCH} != "armv7" && \
293cb9d4bb1SMuhammad Moinur Rahman	${TARGET_ARCH} != "powerpc64" && \
294cb9d4bb1SMuhammad Moinur Rahman	${TARGET_ARCH} != "powerpc64le" && \
295cb9d4bb1SMuhammad Moinur Rahman	${TARGET_ARCH} != "riscv64"
296cb9d4bb1SMuhammad Moinur Rahman	@false
297cb9d4bb1SMuhammad Moinur Rahman.ERROR:
298cb9d4bb1SMuhammad Moinur Rahman	@echo "Error: ${TARGET_ARCH} is not supported on ${TYPE} ${REVISION} ${BRANCH}"
299cb9d4bb1SMuhammad Moinur Rahman.endif
300cb9d4bb1SMuhammad Moinur Rahman
301c08f5ad1SMuhammad Moinur Rahmanci-smoke: ci-set-smoke-var ci-create-meta ci-checktarget .WAIT ci-runtest-${TARGET_ARCH:tl} .PHONY
302cb9d4bb1SMuhammad Moinur Rahman
30310fb5e71SSiva Mahadevanci-full: ci-set-full-var ci-create-meta ci-checktarget .WAIT ci-runtest-${TARGET_ARCH:tl} .WAIT ci-extract-meta .PHONY
304c08f5ad1SMuhammad Moinur Rahman
305c08f5ad1SMuhammad Moinur Rahmanci: ci-${CITYPE:tl} .PHONY
306cb9d4bb1SMuhammad Moinur Rahman
307cb9d4bb1SMuhammad Moinur Rahman.include "${RELEASEDIR}/Makefile.inc1"
308