diff mbox

[1/3,v2] bsd-user: Revert part of update to rules.mk

Message ID 539EFC0A.2070201@redhat.com
State New
Headers show

Commit Message

Paolo Bonzini June 16, 2014, 2:15 p.m. UTC
Il 16/06/2014 15:58, Sean Bruno ha scritto:
> On Mon, 2014-06-16 at 06:55 -0700, Sean Bruno wrote:
>>>> Sean, could you show the configure command line?
>>>
>>> Also please attach the "make V=1" output and config-host.mak file.
>>>
>>> Paolo
>>>
>>>
>>
>> I'm using:
>>
>>  ./configure --static --target-list="i386-bsd-user sparc-bsd-user
>> sparc64-bsd-user x86_64-bsd-user"
>>
>> Log:
>> http://people.freebsd.org/~sbruno/qemu_build_fail.txt
>>
>> sean
>>
>>
>
> Also, configure output
>
> http://people.freebsd.org/~sbruno/qemu_user_configure.txt

So this is happening because the $(sort) removes the ordering between 
libraries and breaks static linking.  Your patch likely does nothing 
except adding more copies of the libraries, which lets the linker work.

The executable that breaks is qemu-nbd, which I suspect you couldn't 
care less about.

The bug remains, and ought to be fixed, probably like this:


but the other question is: do we care about static linking of anything 
except the user-mode emulators?  Should --static automatically imply 
--disable-tools --disable-system?

Paolo

Comments

Sean Bruno June 16, 2014, 2:20 p.m. UTC | #1
On Mon, 2014-06-16 at 16:15 +0200, Paolo Bonzini wrote:
> Il 16/06/2014 15:58, Sean Bruno ha scritto:
> > On Mon, 2014-06-16 at 06:55 -0700, Sean Bruno wrote:
> >>>> Sean, could you show the configure command line?
> >>>
> >>> Also please attach the "make V=1" output and config-host.mak file.
> >>>
> >>> Paolo
> >>>
> >>>
> >>
> >> I'm using:
> >>
> >>  ./configure --static --target-list="i386-bsd-user sparc-bsd-user
> >> sparc64-bsd-user x86_64-bsd-user"
> >>
> >> Log:
> >> http://people.freebsd.org/~sbruno/qemu_build_fail.txt
> >>
> >> sean
> >>
> >>
> >
> > Also, configure output
> >
> > http://people.freebsd.org/~sbruno/qemu_user_configure.txt
> 
> So this is happening because the $(sort) removes the ordering between 
> libraries and breaks static linking.  Your patch likely does nothing 
> except adding more copies of the libraries, which lets the linker work.
> 
> The executable that breaks is qemu-nbd, which I suspect you couldn't 
> care less about.
> 
> The bug remains, and ought to be fixed, probably like this:
> 
> diff --git a/rules.mak b/rules.mak
> index dde8e00..50b305e 100644
> --- a/rules.mak
> +++ b/rules.mak
> @@ -22,7 +22,7 @@ QEMU_DGFLAGS += -MMD -MP -MT $@ -MF $(*D)/$(*F).d
>   # Same as -I$(SRC_PATH) -I., but for the nested source/object directories
>   QEMU_INCLUDES += -I$(<D) -I$(@D)
> 
> -extract-libs = $(strip $(sort $(foreach o,$1,$($o-libs))))
> +extract-libs = $(foreach o,$1,$($o-libs))
>   expand-objs = $(strip $(sort $(filter %.o,$1)) \
>                     $(foreach o,$(filter %.mo,$1),$($o-objs)) \
>                     $(filter-out %.o %.mo,$1))
> 
> but the other question is: do we care about static linking of anything 
> except the user-mode emulators?  Should --static automatically imply 
> --disable-tools --disable-system?
> 
> Paolo


Seems like this works for me on FreeBSD with my test case.  

sean
Peter Maydell June 16, 2014, 2:57 p.m. UTC | #2
On 16 June 2014 15:15, Paolo Bonzini <pbonzini@redhat.com> wrote:
> but the other question is: do we care about static linking of anything
> except the user-mode emulators?  Should --static automatically imply
> --disable-tools --disable-system?

It's certainly tempting. No doubt somebody somewhere is using
the statically linked config, of course...

thanks
-- PMM
diff mbox

Patch

diff --git a/rules.mak b/rules.mak
index dde8e00..50b305e 100644
--- a/rules.mak
+++ b/rules.mak
@@ -22,7 +22,7 @@  QEMU_DGFLAGS += -MMD -MP -MT $@ -MF $(*D)/$(*F).d
  # Same as -I$(SRC_PATH) -I., but for the nested source/object directories
  QEMU_INCLUDES += -I$(<D) -I$(@D)

-extract-libs = $(strip $(sort $(foreach o,$1,$($o-libs))))
+extract-libs = $(foreach o,$1,$($o-libs))
  expand-objs = $(strip $(sort $(filter %.o,$1)) \
                    $(foreach o,$(filter %.mo,$1),$($o-objs)) \
                    $(filter-out %.o %.mo,$1))