kumquat-buildroot/package/kvm-unit-tests/kvm-unit-tests.mk

65 lines
2.0 KiB
Makefile
Raw Normal View History

package/kvm-unit-tests: new package The unit tests are tiny guest operating systems that generally execute only tens of lines of C and assembler test code in order to obtain its PASS/FAIL result. Unit tests provide KVM and virt hardware functional testing by targeting the features through minimal implementations of their use per the hardware specification. The simplicity of unit tests make them easy to verify they are correct, easy to maintain, and easy to use in timing measurements. Unit tests are also often used for quick and dirty bug reproducers. The reproducers may then be kept as regression tests. It's strongly encouraged that patches implementing new KVM features are submitted with accompanying unit tests. Signed-off-by: Cyril Bur <cyrilbur@gmail.com> [Thomas: - order architecture dependencies in Config.in alphabetically. - rewrap Config.in help text, lines were too long - add an empty line between the package description and the upstream project URL in the Config.in help text - don't make KVM_UNIT_TESTS_ARCH default to $(ARCH). This was not correct for i386 for example. Instead, just handle the few architectures that the package supports. - remove useless double quotes in variable definitions. - remove --prefix="$(TARGET_DIR)" from CONF_OPTS. It was installing everything in /share/ and not /usr/share/, and setting the prefix to TARGET_DIR at configure time is not good. Instead, pass DESTDIR at installation time.] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016-08-18 01:02:36 +02:00
################################################################################
#
# kvm-unit-tests
#
################################################################################
KVM_UNIT_TESTS_VERSION = kvm-unit-tests-20171020
package/kvm-unit-tests: new package The unit tests are tiny guest operating systems that generally execute only tens of lines of C and assembler test code in order to obtain its PASS/FAIL result. Unit tests provide KVM and virt hardware functional testing by targeting the features through minimal implementations of their use per the hardware specification. The simplicity of unit tests make them easy to verify they are correct, easy to maintain, and easy to use in timing measurements. Unit tests are also often used for quick and dirty bug reproducers. The reproducers may then be kept as regression tests. It's strongly encouraged that patches implementing new KVM features are submitted with accompanying unit tests. Signed-off-by: Cyril Bur <cyrilbur@gmail.com> [Thomas: - order architecture dependencies in Config.in alphabetically. - rewrap Config.in help text, lines were too long - add an empty line between the package description and the upstream project URL in the Config.in help text - don't make KVM_UNIT_TESTS_ARCH default to $(ARCH). This was not correct for i386 for example. Instead, just handle the few architectures that the package supports. - remove useless double quotes in variable definitions. - remove --prefix="$(TARGET_DIR)" from CONF_OPTS. It was installing everything in /share/ and not /usr/share/, and setting the prefix to TARGET_DIR at configure time is not good. Instead, pass DESTDIR at installation time.] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016-08-18 01:02:36 +02:00
KVM_UNIT_TESTS_SITE = $(BR2_KERNEL_MIRROR)/scm/virt/kvm/kvm-unit-tests.git
KVM_UNIT_TESTS_SITE_METHOD = git
KVM_UNIT_TESTS_LICENSE = LGPL-2.0
package/kvm-unit-tests: new package The unit tests are tiny guest operating systems that generally execute only tens of lines of C and assembler test code in order to obtain its PASS/FAIL result. Unit tests provide KVM and virt hardware functional testing by targeting the features through minimal implementations of their use per the hardware specification. The simplicity of unit tests make them easy to verify they are correct, easy to maintain, and easy to use in timing measurements. Unit tests are also often used for quick and dirty bug reproducers. The reproducers may then be kept as regression tests. It's strongly encouraged that patches implementing new KVM features are submitted with accompanying unit tests. Signed-off-by: Cyril Bur <cyrilbur@gmail.com> [Thomas: - order architecture dependencies in Config.in alphabetically. - rewrap Config.in help text, lines were too long - add an empty line between the package description and the upstream project URL in the Config.in help text - don't make KVM_UNIT_TESTS_ARCH default to $(ARCH). This was not correct for i386 for example. Instead, just handle the few architectures that the package supports. - remove useless double quotes in variable definitions. - remove --prefix="$(TARGET_DIR)" from CONF_OPTS. It was installing everything in /share/ and not /usr/share/, and setting the prefix to TARGET_DIR at configure time is not good. Instead, pass DESTDIR at installation time.] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016-08-18 01:02:36 +02:00
KVM_UNIT_TESTS_LICENSE_FILES = COPYRIGHT
ifeq ($(BR2_arm),y)
KVM_UNIT_TESTS_ARCH = arm
else ifeq ($(BR2_i386),y)
KVM_UNIT_TESTS_ARCH = i386
else ifeq ($(BR2_powerpc64)$(BR2_powerpc64le),y)
KVM_UNIT_TESTS_ARCH = ppc64
else ifeq ($(BR2_x86_64),y)
KVM_UNIT_TESTS_ARCH = x86_64
package/kvm-unit-tests: new package The unit tests are tiny guest operating systems that generally execute only tens of lines of C and assembler test code in order to obtain its PASS/FAIL result. Unit tests provide KVM and virt hardware functional testing by targeting the features through minimal implementations of their use per the hardware specification. The simplicity of unit tests make them easy to verify they are correct, easy to maintain, and easy to use in timing measurements. Unit tests are also often used for quick and dirty bug reproducers. The reproducers may then be kept as regression tests. It's strongly encouraged that patches implementing new KVM features are submitted with accompanying unit tests. Signed-off-by: Cyril Bur <cyrilbur@gmail.com> [Thomas: - order architecture dependencies in Config.in alphabetically. - rewrap Config.in help text, lines were too long - add an empty line between the package description and the upstream project URL in the Config.in help text - don't make KVM_UNIT_TESTS_ARCH default to $(ARCH). This was not correct for i386 for example. Instead, just handle the few architectures that the package supports. - remove useless double quotes in variable definitions. - remove --prefix="$(TARGET_DIR)" from CONF_OPTS. It was installing everything in /share/ and not /usr/share/, and setting the prefix to TARGET_DIR at configure time is not good. Instead, pass DESTDIR at installation time.] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016-08-18 01:02:36 +02:00
endif
ifeq ($(BR2_ENDIAN),"LITTLE")
KVM_UNIT_TESTS_ENDIAN = little
else
KVM_UNIT_TESTS_ENDIAN = big
endif
KVM_UNIT_TESTS_CONF_OPTS =\
--arch="$(KVM_UNIT_TESTS_ARCH)" \
--processor="$(GCC_TARGET_CPU)" \
package/kvm-unit-tests: new package The unit tests are tiny guest operating systems that generally execute only tens of lines of C and assembler test code in order to obtain its PASS/FAIL result. Unit tests provide KVM and virt hardware functional testing by targeting the features through minimal implementations of their use per the hardware specification. The simplicity of unit tests make them easy to verify they are correct, easy to maintain, and easy to use in timing measurements. Unit tests are also often used for quick and dirty bug reproducers. The reproducers may then be kept as regression tests. It's strongly encouraged that patches implementing new KVM features are submitted with accompanying unit tests. Signed-off-by: Cyril Bur <cyrilbur@gmail.com> [Thomas: - order architecture dependencies in Config.in alphabetically. - rewrap Config.in help text, lines were too long - add an empty line between the package description and the upstream project URL in the Config.in help text - don't make KVM_UNIT_TESTS_ARCH default to $(ARCH). This was not correct for i386 for example. Instead, just handle the few architectures that the package supports. - remove useless double quotes in variable definitions. - remove --prefix="$(TARGET_DIR)" from CONF_OPTS. It was installing everything in /share/ and not /usr/share/, and setting the prefix to TARGET_DIR at configure time is not good. Instead, pass DESTDIR at installation time.] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016-08-18 01:02:36 +02:00
--endian="$(KVM_UNIT_TESTS_ENDIAN)"
# For all architectures but x86-64, we use the target
# compiler. However, for x86-64, we use the host compiler, as
# kvm-unit-tests builds 32 bit code, which Buildroot toolchains for
# x86-64 cannot do.
package/kvm-unit-tests: really fix build on Arch Linux x86_64 On x86_64, we use the host compiler instead of the target compiler to build kvm-unit-tests, because it is built with -m32 and our target compiler doesn't support that. However, the compiler on Arch Linux is broken: it *always* builds with -fstack-protector, even when -ffreestanding is passed. However, when -fnostdlib is passed at link time (which is normally the case when building with -ffreestanding), it is not linked with the stack-protector library. This leads to a link time error: /usr/bin/ld: x86/realmode.o: in function `print_serial_u32': .../x86/realmode.c:104: undefined reference to `__stack_chk_fail' Since the entire package is built with -ffreestanding, it doesn't support stack-protector at all. Therefore, simply pass -fno-stack-protector explicitly on x86_64 to work around the bug in Arch Linux. Commit c0ffd16e4 tried to do this, but got the condition wrong: -fno-stack-protector was passed in all cases *except* for x86_64. This commit fixes that, by inverting the condition and moving the --cross-prefix part to the else branch. Fixes: http://autobuild.buildroot.net/results/ca9576721214ecdce5622f2b7ec4fd4fc3699ac0/ Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be> Cc: Fabrice Fontaine <fontaine.fabrice@gmail.com> Cc: Matthew Weber <matthew.weber@rockwellcollins.com> Reviewed-by: Matthew Weber <matthew.weber@rockwellcollins.com> Tested-by: Matthew Weber <matthew.weber@rockwellcollins.com> Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2019-11-17 19:41:14 +01:00
ifeq ($(BR2_x86_64),y)
# Arch Linux adds -fstack-protector even when building with -ffreestanding, but
# it doesn't link with the stack-protector library when -nostdlib is passed,
# which leads to a link error. Therefore, disable it explicitly to work around
# this bug in Arch Linux. https://bugs.archlinux.org/task/64270
KVM_UNIT_TESTS_MAKE_OPTS += EXTRA_CFLAGS=-fno-stack-protector
package/kvm-unit-tests: really fix build on Arch Linux x86_64 On x86_64, we use the host compiler instead of the target compiler to build kvm-unit-tests, because it is built with -m32 and our target compiler doesn't support that. However, the compiler on Arch Linux is broken: it *always* builds with -fstack-protector, even when -ffreestanding is passed. However, when -fnostdlib is passed at link time (which is normally the case when building with -ffreestanding), it is not linked with the stack-protector library. This leads to a link time error: /usr/bin/ld: x86/realmode.o: in function `print_serial_u32': .../x86/realmode.c:104: undefined reference to `__stack_chk_fail' Since the entire package is built with -ffreestanding, it doesn't support stack-protector at all. Therefore, simply pass -fno-stack-protector explicitly on x86_64 to work around the bug in Arch Linux. Commit c0ffd16e4 tried to do this, but got the condition wrong: -fno-stack-protector was passed in all cases *except* for x86_64. This commit fixes that, by inverting the condition and moving the --cross-prefix part to the else branch. Fixes: http://autobuild.buildroot.net/results/ca9576721214ecdce5622f2b7ec4fd4fc3699ac0/ Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be> Cc: Fabrice Fontaine <fontaine.fabrice@gmail.com> Cc: Matthew Weber <matthew.weber@rockwellcollins.com> Reviewed-by: Matthew Weber <matthew.weber@rockwellcollins.com> Tested-by: Matthew Weber <matthew.weber@rockwellcollins.com> Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2019-11-17 19:41:14 +01:00
else
KVM_UNIT_TESTS_CONF_OPTS += --cross-prefix="$(TARGET_CROSS)"
endif
package/kvm-unit-tests: new package The unit tests are tiny guest operating systems that generally execute only tens of lines of C and assembler test code in order to obtain its PASS/FAIL result. Unit tests provide KVM and virt hardware functional testing by targeting the features through minimal implementations of their use per the hardware specification. The simplicity of unit tests make them easy to verify they are correct, easy to maintain, and easy to use in timing measurements. Unit tests are also often used for quick and dirty bug reproducers. The reproducers may then be kept as regression tests. It's strongly encouraged that patches implementing new KVM features are submitted with accompanying unit tests. Signed-off-by: Cyril Bur <cyrilbur@gmail.com> [Thomas: - order architecture dependencies in Config.in alphabetically. - rewrap Config.in help text, lines were too long - add an empty line between the package description and the upstream project URL in the Config.in help text - don't make KVM_UNIT_TESTS_ARCH default to $(ARCH). This was not correct for i386 for example. Instead, just handle the few architectures that the package supports. - remove useless double quotes in variable definitions. - remove --prefix="$(TARGET_DIR)" from CONF_OPTS. It was installing everything in /share/ and not /usr/share/, and setting the prefix to TARGET_DIR at configure time is not good. Instead, pass DESTDIR at installation time.] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016-08-18 01:02:36 +02:00
define KVM_UNIT_TESTS_CONFIGURE_CMDS
cd $(@D) && ./configure $(KVM_UNIT_TESTS_CONF_OPTS)
endef
define KVM_UNIT_TESTS_BUILD_CMDS
$(TARGET_MAKE_ENV) $(MAKE) $(KVM_UNIT_TESTS_MAKE_OPTS) -C $(@D) \
standalone
package/kvm-unit-tests: new package The unit tests are tiny guest operating systems that generally execute only tens of lines of C and assembler test code in order to obtain its PASS/FAIL result. Unit tests provide KVM and virt hardware functional testing by targeting the features through minimal implementations of their use per the hardware specification. The simplicity of unit tests make them easy to verify they are correct, easy to maintain, and easy to use in timing measurements. Unit tests are also often used for quick and dirty bug reproducers. The reproducers may then be kept as regression tests. It's strongly encouraged that patches implementing new KVM features are submitted with accompanying unit tests. Signed-off-by: Cyril Bur <cyrilbur@gmail.com> [Thomas: - order architecture dependencies in Config.in alphabetically. - rewrap Config.in help text, lines were too long - add an empty line between the package description and the upstream project URL in the Config.in help text - don't make KVM_UNIT_TESTS_ARCH default to $(ARCH). This was not correct for i386 for example. Instead, just handle the few architectures that the package supports. - remove useless double quotes in variable definitions. - remove --prefix="$(TARGET_DIR)" from CONF_OPTS. It was installing everything in /share/ and not /usr/share/, and setting the prefix to TARGET_DIR at configure time is not good. Instead, pass DESTDIR at installation time.] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016-08-18 01:02:36 +02:00
endef
define KVM_UNIT_TESTS_INSTALL_TARGET_CMDS
$(TARGET_MAKE_ENV) $(MAKE) $(KVM_UNIT_TESTS_MAKE_OPTS) -C $(@D) \
package/kvm-unit-tests: new package The unit tests are tiny guest operating systems that generally execute only tens of lines of C and assembler test code in order to obtain its PASS/FAIL result. Unit tests provide KVM and virt hardware functional testing by targeting the features through minimal implementations of their use per the hardware specification. The simplicity of unit tests make them easy to verify they are correct, easy to maintain, and easy to use in timing measurements. Unit tests are also often used for quick and dirty bug reproducers. The reproducers may then be kept as regression tests. It's strongly encouraged that patches implementing new KVM features are submitted with accompanying unit tests. Signed-off-by: Cyril Bur <cyrilbur@gmail.com> [Thomas: - order architecture dependencies in Config.in alphabetically. - rewrap Config.in help text, lines were too long - add an empty line between the package description and the upstream project URL in the Config.in help text - don't make KVM_UNIT_TESTS_ARCH default to $(ARCH). This was not correct for i386 for example. Instead, just handle the few architectures that the package supports. - remove useless double quotes in variable definitions. - remove --prefix="$(TARGET_DIR)" from CONF_OPTS. It was installing everything in /share/ and not /usr/share/, and setting the prefix to TARGET_DIR at configure time is not good. Instead, pass DESTDIR at installation time.] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016-08-18 01:02:36 +02:00
DESTDIR=$(TARGET_DIR)/usr/share/kvm-unit-tests/ \
install
endef
# Does use configure script but not an autotools one
$(eval $(generic-package))