buildroot/package/kvm-unit-tests/kvm-unit-tests.mk
Fabrice Fontaine c0ffd16e40 package/kvm-unit-tests: 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.

Bug reported upstream: https://bugs.archlinux.org/task/64270

Fixes:
 - http://autobuild.buildroot.org/results/e6f767755ffdb5ecc014eb5ad7519814f075a60e

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
Tested-by: Matthew Weber <matthew.weber@rockwellcollins.com>
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
2019-10-26 10:31:20 +02:00

64 lines
2 KiB
Makefile

################################################################################
#
# kvm-unit-tests
#
################################################################################
KVM_UNIT_TESTS_VERSION = kvm-unit-tests-20171020
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
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
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)" \
--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.
ifneq ($(BR2_x86_64),y)
KVM_UNIT_TESTS_CONF_OPTS += --cross-prefix="$(TARGET_CROSS)"
# 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
endif
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
endef
define KVM_UNIT_TESTS_INSTALL_TARGET_CMDS
$(TARGET_MAKE_ENV) $(MAKE) $(KVM_UNIT_TESTS_MAKE_OPTS) -C $(@D) \
DESTDIR=$(TARGET_DIR)/usr/share/kvm-unit-tests/ \
install
endef
# Does use configure script but not an autotools one
$(eval $(generic-package))