Patchwork Build always fail on x86_32 host for i386_softmmu target

login
register
mail settings
Submitter Bruce Majia
Date March 22, 2010, 6:16 a.m.
Message ID <20100322061658.GC20376@localhost>
Download mbox | patch
Permalink /patch/48252/
State New
Headers show

Comments

Bruce Majia - March 22, 2010, 6:16 a.m.
Hi,

When I built qemu on my x86_32 host with following configure line:

$ ./configure --prefix=/usr/local/qemus/master \
	--target-list=i386-softmmu
$ make

The build will always fail with message:
----------------------------------------
...
  CC    i386-softmmu/fpu/softfloat-native.o
  /mnt/farm/my_repo/qemu/fpu/softfloat-native.c:130:5: error:
  "HOST_LONG_BITS" is not defined
  make[1]: *** [fpu/softfloat-native.o] Error 1
  make: *** [subdir-i386-softmmu] Error 2
----------------------------------------

Is this a known issue or something wrong with my configure line?

Though I can make it work with a minor nasty patch:
==============

I thought it may necessary to ask if something wrong with above hack.
And can we get the problem fixed properly?

Thanks.
-b
Stefan Weil - March 22, 2010, 8:31 a.m.
Bruce Majia schrieb:
> Hi,
>
> When I built qemu on my x86_32 host with following configure line:
>
> $ ./configure --prefix=/usr/local/qemus/master \
> --target-list=i386-softmmu
> $ make
>
> The build will always fail with message:
> ----------------------------------------
> ...
> CC i386-softmmu/fpu/softfloat-native.o
> /mnt/farm/my_repo/qemu/fpu/softfloat-native.c:130:5: error:
> "HOST_LONG_BITS" is not defined
> make[1]: *** [fpu/softfloat-native.o] Error 1
> make: *** [subdir-i386-softmmu] Error 2
> ----------------------------------------
>
> Is this a known issue or something wrong with my configure line?
>
> Though I can make it work with a minor nasty patch:
> ==============
> diff --git a/fpu/softfloat-native.c b/fpu/softfloat-native.c
> index 049c830..5ba5013 100644
> --- a/fpu/softfloat-native.c
> +++ b/fpu/softfloat-native.c
> @@ -127,6 +127,9 @@ floatx80 int64_to_floatx80( int64_t v STATUS_PARAM)
> #endif
>
> /* XXX: this code implements the x86 behaviour, not the IEEE one. */
> +#ifndef HOST_LONG_BITS
> +#define HOST_LONG_BITS 32
> +#endif
> #if HOST_LONG_BITS == 32
> static inline int long_to_int32(long a)
> {
> ==============
>
> I thought it may necessary to ask if something wrong with above hack.
> And can we get the problem fixed properly?
>
> Thanks.
> -b

I had this problem with incremental builds several times, too.
A new make from scratch (all generated files removed) always worked,
so I don't think your patch is needed.

Regards,
Stefan
Bruce Majia - March 22, 2010, 8:36 a.m.
On Mon, Mar 22, 2010 at 09:31:09AM +0100, Stefan Weil wrote:
> Bruce Majia schrieb:
> > Hi,
> >
> > When I built qemu on my x86_32 host with following configure line:
> >
> > $ ./configure --prefix=/usr/local/qemus/master \
> > --target-list=i386-softmmu
> > $ make
> >
> > The build will always fail with message:
> > ----------------------------------------
> > ...
> > CC i386-softmmu/fpu/softfloat-native.o
> > /mnt/farm/my_repo/qemu/fpu/softfloat-native.c:130:5: error:
> > "HOST_LONG_BITS" is not defined
> > make[1]: *** [fpu/softfloat-native.o] Error 1
> > make: *** [subdir-i386-softmmu] Error 2
> > ----------------------------------------
> >
> > Is this a known issue or something wrong with my configure line?
> >
> > Though I can make it work with a minor nasty patch:
> > ==============
> > diff --git a/fpu/softfloat-native.c b/fpu/softfloat-native.c
> > index 049c830..5ba5013 100644
> > --- a/fpu/softfloat-native.c
> > +++ b/fpu/softfloat-native.c
> > @@ -127,6 +127,9 @@ floatx80 int64_to_floatx80( int64_t v STATUS_PARAM)
> > #endif
> >
> > /* XXX: this code implements the x86 behaviour, not the IEEE one. */
> > +#ifndef HOST_LONG_BITS
> > +#define HOST_LONG_BITS 32
> > +#endif
> > #if HOST_LONG_BITS == 32
> > static inline int long_to_int32(long a)
> > {
> > ==============
> >
> > I thought it may necessary to ask if something wrong with above hack.
> > And can we get the problem fixed properly?
> >
> > Thanks.
> > -b
> 
> I had this problem with incremental builds several times, too.
> A new make from scratch (all generated files removed) always worked,
> so I don't think your patch is needed.

Yes, you are right. I must messed up several incremental builds and
clean build. While I just tried clean configure and build, I just got
warning like this:

fpu/softfloat-native.c:132:5: warning: "HOST_LONG_BITS" is not defined

That is fine to me. Though it would be better to avoid the warning. :)

Thanks.
-b
Juan Quintela - March 22, 2010, 8:50 a.m.
Bruce Majia <bruce.majia@gmail.com> wrote:
> Hi,
>
> When I built qemu on my x86_32 host with following configure line:
>

try to do first a:
make distclean

> $ ./configure --prefix=/usr/local/qemus/master \
> 	--target-list=i386-softmmu
> $ make

there are several config.h & config.mak around (from old builds) you
need to remove then 1st.

Later, Juan.
Jan Kiszka - March 22, 2010, 1:44 p.m.
Juan Quintela wrote:
> Bruce Majia <bruce.majia@gmail.com> wrote:
>> Hi,
>>
>> When I built qemu on my x86_32 host with following configure line:
>>
> 
> try to do first a:
> make distclean
> 
>> $ ./configure --prefix=/usr/local/qemus/master \
>> 	--target-list=i386-softmmu
>> $ make
> 
> there are several config.h & config.mak around (from old builds) you
> need to remove then 1st.

Doesn't the fact that this is required for a proper rebuild indicate
some issue in the build system? I just recall a recent multi-hour
debugging session of mine which turned out to be due to an inconsistent
build after moving forward in the git history (in qemu-kvm, but the code
change came from upstream). Or are there some fundamentally unresolvable
scenarios so that a distclean is mandatory after every git update?

Jan
Juan Quintela - March 22, 2010, 1:49 p.m.
Jan Kiszka <jan.kiszka@siemens.com> wrote:
> Juan Quintela wrote:
>> Bruce Majia <bruce.majia@gmail.com> wrote:
>>> Hi,
>>>
>>> When I built qemu on my x86_32 host with following configure line:
>>>
>> 
>> try to do first a:
>> make distclean
>> 
>>> $ ./configure --prefix=/usr/local/qemus/master \
>>> 	--target-list=i386-softmmu
>>> $ make
>> 
>> there are several config.h & config.mak around (from old builds) you
>> need to remove then 1st.
>
> Doesn't the fact that this is required for a proper rebuild indicate
> some issue in the build system? I just recall a recent multi-hour
> debugging session of mine which turned out to be due to an inconsistent
> build after moving forward in the git history (in qemu-kvm, but the code
> change came from upstream). Or are there some fundamentally unresolvable
> scenarios so that a distclean is mandatory after every git update?

Humm, no, it should only happens if you update from a _very_ old qemu
(very old means something between qemu-0.11 - 0.12).

If you had need it after 0.12, it is a different bug and should be fixed.

Later, Juan.
Jan Kiszka - March 22, 2010, 1:57 p.m.
Juan Quintela wrote:
> Jan Kiszka <jan.kiszka@siemens.com> wrote:
>> Juan Quintela wrote:
>>> Bruce Majia <bruce.majia@gmail.com> wrote:
>>>> Hi,
>>>>
>>>> When I built qemu on my x86_32 host with following configure line:
>>>>
>>> try to do first a:
>>> make distclean
>>>
>>>> $ ./configure --prefix=/usr/local/qemus/master \
>>>> 	--target-list=i386-softmmu
>>>> $ make
>>> there are several config.h & config.mak around (from old builds) you
>>> need to remove then 1st.
>> Doesn't the fact that this is required for a proper rebuild indicate
>> some issue in the build system? I just recall a recent multi-hour
>> debugging session of mine which turned out to be due to an inconsistent
>> build after moving forward in the git history (in qemu-kvm, but the code
>> change came from upstream). Or are there some fundamentally unresolvable
>> scenarios so that a distclean is mandatory after every git update?
> 
> Humm, no, it should only happens if you update from a _very_ old qemu
> (very old means something between qemu-0.11 - 0.12).
> 
> If you had need it after 0.12, it is a different bug and should be fixed.
> 

I think I tried to reproduced this, but I failed after purging the buggy
output directory (out-of-tree build):

http://thread.gmane.org/gmane.comp.emulators.kvm.devel/47499

Maybe you are luckier than I :), or we have to wait for the next issue
to come.

Jan
Juan Quintela - March 22, 2010, 2:05 p.m.
Jan Kiszka <jan.kiszka@siemens.com> wrote:
> Juan Quintela wrote:
>> Jan Kiszka <jan.kiszka@siemens.com> wrote:
>>> Juan Quintela wrote:
>>>> Bruce Majia <bruce.majia@gmail.com> wrote:
>>>>> Hi,
>>>>>
>>>>> When I built qemu on my x86_32 host with following configure line:
>>>>>
>>>> try to do first a:
>>>> make distclean
>>>>
>>>>> $ ./configure --prefix=/usr/local/qemus/master \
>>>>> 	--target-list=i386-softmmu
>>>>> $ make
>>>> there are several config.h & config.mak around (from old builds) you
>>>> need to remove then 1st.
>>> Doesn't the fact that this is required for a proper rebuild indicate
>>> some issue in the build system? I just recall a recent multi-hour
>>> debugging session of mine which turned out to be due to an inconsistent
>>> build after moving forward in the git history (in qemu-kvm, but the code
>>> change came from upstream). Or are there some fundamentally unresolvable
>>> scenarios so that a distclean is mandatory after every git update?
>> 
>> Humm, no, it should only happens if you update from a _very_ old qemu
>> (very old means something between qemu-0.11 - 0.12).
>> 
>> If you had need it after 0.12, it is a different bug and should be fixed.
>> 
>
> I think I tried to reproduced this, but I failed after purging the buggy
g> output directory (out-of-tree build):
>
> http://thread.gmane.org/gmane.comp.emulators.kvm.devel/47499
>
> Maybe you are luckier than I :), or we have to wait for the next issue
> to come.

Looking at it.  I normally are "unlucky" person on that cases.  It
hasn't happened to me, but will take a look.

Later, Juan.

Patch

==============
diff --git a/fpu/softfloat-native.c b/fpu/softfloat-native.c
index 049c830..5ba5013 100644
--- a/fpu/softfloat-native.c
+++ b/fpu/softfloat-native.c
@@ -127,6 +127,9 @@  floatx80 int64_to_floatx80( int64_t v STATUS_PARAM)
 #endif
 
 /* XXX: this code implements the x86 behaviour, not the IEEE one.  */
+#ifndef HOST_LONG_BITS
+#define HOST_LONG_BITS 32
+#endif
 #if HOST_LONG_BITS == 32
 static inline int long_to_int32(long a)
 {