summaryrefslogtreecommitdiffstats
path: root/recipes-test/virt-test/virt-test-qemu_git.bb
blob: 40f4e56241a328b9ac6eec413088c43ce06bc1b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
SUMMARY = "Linux Virtualization Tests - qemu tests"
DESCRIPTION = "Qemu tests for the virt-test test framework"
HOMEPAGE = "https://github.com/autotest/tp-qemu"
SECTION = "console/tests"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://LICENSE;md5=575f01e0b7a35e73c8e52ca65fd72bdc"

def if_arch_re(regexp, trueval, falseval, d):
    import re
    target_arch = bb.data.getVar('TARGET_ARCH', d, 1)
    return trueval if re.match(regexp, target_arch) else falseval

RDEPENDS_${PN} = "virt-test iperf ntpdate stress python-netserver \
  ${@if_arch_re("^(i[3-9]86|x86_64)", "virt-test-qemu-guest-timedrift virt-test-qemu-guest-cpuflags", "", d)} \
  "
DEPENDS += "popt"

# Use date of commit pointed to by SRCREV
PV = "2014.04.16"
SRCREV = "3e15869b4b838c47ce9ea0d4916e1edb89ccc58e"

SRC_URI = "git://github.com/autotest/tp-qemu \
  file://qemu-tests-multi-nic-stress.patch \
  file://qemu-tests-time-drift-config.patch \
  file://qemu-tests-tsc-sync-build-avoidance.patch \
  file://qemu-tests-tsc-sync-config.patch \
  file://qemu-tests-pipetest-config.patch \
  file://qemu-tests-nx-exploit-config.patch \
  file://qemu-tests-clock-getres-config.patch \
  file://qemu-tests-stress-config.patch \
  file://qemu-tests-virtual-nic-send-buffer-config.patch \
  file://qemu-tests-cpuflags-migrate-to-provider.patch \
  file://qemu-tests-cpuflags-build-avoidance.patch \
  file://qemu-tests-cpuflags-conf.patch \
  file://qemu-tests-cyclictest.patch \
  "

S = "${WORKDIR}/git"
B = "${S}"

DESTDIR = "/opt/virt-test/test-providers.d/downloads/io-github-autotest-qemu"

FILES_${PN} += "${DESTDIR}"

FILES_${PN}-dbg = " \
  ${DESTDIR}/qemu/deps/timedrift/.debug/* \
  ${DESTDIR}/qemu/deps/tsc_sync/.debug/* \
  ${DESTDIR}/qemu/deps/nx/.debug/* \
  ${DESTDIR}/generic/deps/clock_getres/.debug/clock_getres \
  ${DESTDIR}/deps/cpu_flags/src/.debug/cpuflags-test-* \
  "

PACKAGES =+ "${PN}-guest-timedrift ${PN}-guest-tsc-sync ${PN}-guest-nx \
    ${PN}-guest-clock-getres ${PN}-guest-cpuflags"

DESCRIPTION_${PN}-guest-timedrift= "Clock test application for time drift test case"
FILES_${PN}-guest-timedrift = "${DESTDIR}/qemu/deps/timedrift/clktest \
  ${DESTDIR}/qemu/deps/timedrift/get_tsc"

DESCRIPTION_${PN}-guest-tsc-sync = "Clock test application for time warp test case"
FILES_${PN}-guest-tsc-sync = "${DESTDIR}/qemu/deps/tsc_sync/time-warp-test"

DESCRIPTION_${PN}-guest-nx = "Test application for the NX (no execution) flag"
FILES_${PN}-guest-nx = "${DESTDIR}/qemu/deps/nx/nx_exploit"

DESCRIPTION_${PN}-guest-clock-getres = "Clock resolution test application"
FILES_${PN}-guest-clock-getres = "${DESTDIR}/generic/deps/clock_getres/clock_getres"

DESCRIPTION_${PN}-guest-cpuflags = "CPU flag test application"
FILES_${PN}-guest-cpuflags = "${DESTDIR}/deps/cpu_flags/src/cpuflags-test-*"
RDEPENDS_${PN}-guest-cpuflags =+ "libgomp"

do_compile_x86() {
  # guest-timedrift
  cd ${S}/qemu/deps/timedrift/
  ${CC} get_tsc.c -o get_tsc

  # guest-tsc-sync
  cd ${S}/qemu/deps/tsc_sync/
  ${CC} -I${STAGING_DIR_TARGET}/usr/include -Wall -o time-warp-test time-warp-test.c -lrt

  # guest-nx
  cd ${S}/qemu/deps/nx/
  ${CC} -o nx_exploit x64_sc_rdo.c

  # guest-cpuflags
  # Note: The $GCC_INCLUDEDIR should be searched for include files according to
  # http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html. However, it seems that
  # gcc-cross searches in e.g.
  # .../sysroots/x86_64-linux/usr/lib/corei7-64-enea-linux/gcc/x86_64-enea-linux/4.8.2/include/
  # instead of
  # .../sysroots/chiefriver/usr/lib/gcc/x86_64-enea-linux/4.8.2/include,
  # despite --sysroot= pointing to the latter (.../sysroots/chiefriver).
  export TARGET=`${CC} -v 2>&1 | grep ^Target | cut -d' ' -f2`
  export GCC_VERSION=`${CC} -v 2>&1 | grep '^gcc version' | cut -d' ' -f3`
  export GCC_INCLUDEDIR=$PKG_CONFIG_SYSROOT_DIR$libdir/gcc/$TARGET/$GCC_VERSION/include
  make -C ${S}/deps/cpu_flags/src/ CFLAGS="-I$GCC_INCLUDEDIR" EXTRA_FLAGS=''
  make -C ${S}/deps/cpu_flags/src/ CFLAGS="-I$GCC_INCLUDEDIR" EXTRA_FLAGS='-msse3 -msse2'
  # Avoid .o files in the package
  rm -rf ${S}/qemu/deps/cpu_flags/src/build-*
}

do_compile() {
  # guest-timedrift
  cd ${S}/qemu/deps/timedrift/
  ${CC} clktest.c -o clktest -lrt

  # guest-clock-getres
  make -C ${S}/generic/deps/clock_getres/

  # Architecture-specific applications
  ${@if_arch_re("^(i[3-9]86|x86_64)", "do_compile_x86", "", d)}
}

do_install() {
	install -d ${D}/${DESTDIR}
	cp -r --preserve=mode,links ${B}/* ${D}/${DESTDIR}
}