diff mbox

kvm-unit-tests: Fix x86_64 to use host compiler

Message ID 20161025054240.10957-1-cyrilbur@gmail.com
State Changes Requested
Headers show

Commit Message

Cyril Bur Oct. 25, 2016, 5:42 a.m. UTC
kvm-unit-tests requires a multilib compiler for x86_64 as it compiles
32bit boot code.

This patch uses the BR2_HOSTARCH_NEEDS_IA32_COMPILER option to enforce
this and avoids using TARGET_CROSS for x86_64 targets and uses the host
32bit (and 64bit) capable compiler.

Signed-off-by: Cyril Bur <cyrilbur@gmail.com>
---
Patch was sent as an RFC initally with the note:

Should be able to be merged as is but I hope the RFC might attract
more eyes as this has me in an x86 caveat world that I'm utterly
unfamilair with.

With this patch my Power build machine fails to build kvm-unit-tests
for x86_64 (expected, I see the message about
BR2_HOSTARCH_NEEDS_IA32_COMPILER) and has no problems building for
ARM. My x86_64 build machine can build for x86_64 and still build
other architectures.

It has been over three weeks and no comments, I believe it would fix
the repeated build breakage of kvm-unit-tests x86_64

 package/kvm-unit-tests/Config.in         |  1 +
 package/kvm-unit-tests/kvm-unit-tests.mk | 14 +++++++++-----
 2 files changed, 10 insertions(+), 5 deletions(-)

Comments

Thomas Petazzoni Oct. 25, 2016, 10:15 a.m. UTC | #1
Cyril,

Thanks for fixing this issue!

On Tue, 25 Oct 2016 16:42:40 +1100, Cyril Bur wrote:
> diff --git a/package/kvm-unit-tests/kvm-unit-tests.mk b/package/kvm-unit-tests/kvm-unit-tests.mk
> index 7fd03ad..cdce1e4 100644
> --- a/package/kvm-unit-tests/kvm-unit-tests.mk
> +++ b/package/kvm-unit-tests/kvm-unit-tests.mk
> @@ -4,20 +4,25 @@
>  #
>  ################################################################################
>  
> -KVM_UNIT_TESTS_VERSION = 0b04ed0610035792514fd8499eb4dacc185520d9
> +KVM_UNIT_TESTS_VERSION = 9111ccab0bb42d93d9f2b84c9089b5790e763056

Is this bump related to using the host compiler on x86-64 ? I don't
think it is, so it should be a separate patch. Or if it's related, it
should be explained in the commit log.

>  KVM_UNIT_TESTS_SITE = $(BR2_KERNEL_MIRROR)/scm/virt/kvm/kvm-unit-tests.git
>  KVM_UNIT_TESTS_SITE_METHOD = git
>  KVM_UNIT_TESTS_LICENSE = LGPLv2
>  KVM_UNIT_TESTS_LICENSE_FILES = COPYRIGHT
>  
> +#Use HOSTCC for x86_64 as we'll need to compile 32bit code
> +#which buildroot cross compilers often can't do

Add one space after the # on each line.

> +ifeq ($(BR2_x86_64),y)
> +KVM_UNIT_TESTS_ARCH = x86_84
> +else
> +KVM_UNIT_TESTS_CONF_OPTS = --cross-prefix="$(TARGET_CROSS)"
> +endif
>  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_84
>  endif

Please keep this sequence of ifeq / else ifeq / else ifeq / endif, and
instead add:

# For all architectures but x86-64, use the cross-compiler. On x86-64,
# use the host compiler, since we need to build 32 bits binaries
ifneq ($(BR2_x86_64),y)
KVM_UNIT_TESTS_CONF_OPTS = --cross-prefix="$(TARGET_CROSS)"
endif

Thanks,

Thomas
Cyril Bur Oct. 26, 2016, 3:20 a.m. UTC | #2
On Tue, 2016-10-25 at 12:15 +0200, Thomas Petazzoni wrote:
> Cyril,
> 
> Thanks for fixing this issue!
> 
> On Tue, 25 Oct 2016 16:42:40 +1100, Cyril Bur wrote:
> > diff --git a/package/kvm-unit-tests/kvm-unit-tests.mk
> > b/package/kvm-unit-tests/kvm-unit-tests.mk
> > index 7fd03ad..cdce1e4 100644
> > --- a/package/kvm-unit-tests/kvm-unit-tests.mk
> > +++ b/package/kvm-unit-tests/kvm-unit-tests.mk
> > @@ -4,20 +4,25 @@
> >  #
> >  ##################################################################
> > ##############
> >  
> > -KVM_UNIT_TESTS_VERSION = 0b04ed0610035792514fd8499eb4dacc185520d9
> > +KVM_UNIT_TESTS_VERSION = 9111ccab0bb42d93d9f2b84c9089b5790e763056
> 
> Is this bump related to using the host compiler on x86-64 ? I don't
> think it is, so it should be a separate patch. Or if it's related, it
> should be explained in the commit log.
> 
> >  KVM_UNIT_TESTS_SITE = $(BR2_KERNEL_MIRROR)/scm/virt/kvm/kvm-unit-
> > tests.git
> >  KVM_UNIT_TESTS_SITE_METHOD = git
> >  KVM_UNIT_TESTS_LICENSE = LGPLv2
> >  KVM_UNIT_TESTS_LICENSE_FILES = COPYRIGHT
> >  
> > +#Use HOSTCC for x86_64 as we'll need to compile 32bit code
> > +#which buildroot cross compilers often can't do
> 
> Add one space after the # on each line.
> 
> > +ifeq ($(BR2_x86_64),y)
> > +KVM_UNIT_TESTS_ARCH = x86_84
> > +else
> > +KVM_UNIT_TESTS_CONF_OPTS = --cross-prefix="$(TARGET_CROSS)"
> > +endif
> >  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_84
> >  endif
> 
> Please keep this sequence of ifeq / else ifeq / else ifeq / endif,
> and
> instead add:
> 
> # For all architectures but x86-64, use the cross-compiler. On x86-
> 64,
> # use the host compiler, since we need to build 32 bits binaries
> ifneq ($(BR2_x86_64),y)
> KVM_UNIT_TESTS_CONF_OPTS = --cross-prefix="$(TARGET_CROSS)"
> endif
> 
> Thanks,
> 

Thanks for the review,

I've addressed all these issues in v2

Cyril

> Thomas
diff mbox

Patch

diff --git a/package/kvm-unit-tests/Config.in b/package/kvm-unit-tests/Config.in
index f771896..d72c734 100644
--- a/package/kvm-unit-tests/Config.in
+++ b/package/kvm-unit-tests/Config.in
@@ -1,5 +1,6 @@ 
 config BR2_PACKAGE_KVM_UNIT_TESTS
 	bool "kvm-unit-tests"
+	select BR2_HOSTARCH_NEEDS_IA32_COMPILER if BR2_x86_64=y
 	depends on BR2_arm || BR2_i386 || BR2_powerpc64 || \
 		BR2_powerpc64le || BR2_x86_64
 	help
diff --git a/package/kvm-unit-tests/kvm-unit-tests.mk b/package/kvm-unit-tests/kvm-unit-tests.mk
index 7fd03ad..cdce1e4 100644
--- a/package/kvm-unit-tests/kvm-unit-tests.mk
+++ b/package/kvm-unit-tests/kvm-unit-tests.mk
@@ -4,20 +4,25 @@ 
 #
 ################################################################################
 
-KVM_UNIT_TESTS_VERSION = 0b04ed0610035792514fd8499eb4dacc185520d9
+KVM_UNIT_TESTS_VERSION = 9111ccab0bb42d93d9f2b84c9089b5790e763056
 KVM_UNIT_TESTS_SITE = $(BR2_KERNEL_MIRROR)/scm/virt/kvm/kvm-unit-tests.git
 KVM_UNIT_TESTS_SITE_METHOD = git
 KVM_UNIT_TESTS_LICENSE = LGPLv2
 KVM_UNIT_TESTS_LICENSE_FILES = COPYRIGHT
 
+#Use HOSTCC for x86_64 as we'll need to compile 32bit code
+#which buildroot cross compilers often can't do
+ifeq ($(BR2_x86_64),y)
+KVM_UNIT_TESTS_ARCH = x86_84
+else
+KVM_UNIT_TESTS_CONF_OPTS = --cross-prefix="$(TARGET_CROSS)"
+endif
 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_84
 endif
 
 ifeq ($(BR2_ENDIAN),"LITTLE")
@@ -26,9 +31,8 @@  else
 KVM_UNIT_TESTS_ENDIAN = big
 endif
 
-KVM_UNIT_TESTS_CONF_OPTS =\
+KVM_UNIT_TESTS_CONF_OPTS +=\
 	--arch="$(KERNEL_ARCH)" \
-	--cross-prefix="$(TARGET_CROSS)" \
 	--endian="$(KVM_UNIT_TESTS_ENDIAN)"
 
 define KVM_UNIT_TESTS_CONFIGURE_CMDS