diff mbox

build: sort objects to remove duplicates for link

Message ID 1314260332-10534-1-git-send-email-stefanha@linux.vnet.ibm.com
State New
Headers show

Commit Message

Stefan Hajnoczi Aug. 25, 2011, 8:18 a.m. UTC
Avoid duplicate object files during the link.  There are legitimate
cases where a link command-line would include duplicate object files
because two independent subsystems both depend on common infrastructure.

Use GNU make's $(sort) function to remove duplicate object files from
the link command-line.

Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
---
Your patch seems fine but we need to avoid duplicate object files during the
link phase.  Otherwise we run into linker warnings because qemu-timer-common.o
is linked multiple times.  Please include this patch and resend the two
together with this patch as 1/2 and yours as 2/2.

 rules.mak |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

Comments

Anthony Liguori Sept. 1, 2011, 6:54 p.m. UTC | #1
On 08/25/2011 03:18 AM, Stefan Hajnoczi wrote:
> Avoid duplicate object files during the link.  There are legitimate
> cases where a link command-line would include duplicate object files
> because two independent subsystems both depend on common infrastructure.
>
> Use GNU make's $(sort) function to remove duplicate object files from
> the link command-line.
>
> Signed-off-by: Stefan Hajnoczi<stefanha@linux.vnet.ibm.com>

Applied.  Thanks.

Regards,

Anthony Liguori

> ---
> Your patch seems fine but we need to avoid duplicate object files during the
> link phase.  Otherwise we run into linker warnings because qemu-timer-common.o
> is linked multiple times.  Please include this patch and resend the two
> together with this patch as 1/2 and yours as 2/2.
>
>   rules.mak |    2 +-
>   1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/rules.mak b/rules.mak
> index 884d421..04a9198 100644
> --- a/rules.mak
> +++ b/rules.mak
> @@ -31,7 +31,7 @@ endif
>   %.o: %.m
>   	$(call quiet-command,$(CC) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<,"  OBJC  $(TARGET_DIR)$@")
>
> -LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(1) $(LIBS),"  LINK  $(TARGET_DIR)$@")
> +LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(sort $(1)) $(LIBS),"  LINK  $(TARGET_DIR)$@")
>
>   %$(EXESUF): %.o
>   	$(call LINK,$^)
LluĂ­s Vilanova Sept. 1, 2011, 7:47 p.m. UTC | #2
Anthony Liguori writes:

> On 08/25/2011 03:18 AM, Stefan Hajnoczi wrote:
>> Avoid duplicate object files during the link.  There are legitimate
>> cases where a link command-line would include duplicate object files
>> because two independent subsystems both depend on common infrastructure.
>> 
>> Use GNU make's $(sort) function to remove duplicate object files from
>> the link command-line.
>> 
>> Signed-off-by: Stefan Hajnoczi<stefanha@linux.vnet.ibm.com>

> Applied.  Thanks.

> Regards,

AFAIK, this patch is unnecessary once commit
e03b41d47708744669aaa51e781021c3dc380198 in Stefan's repo is merged into
upstream (which, according to the list, you just pulled).

The reason is that $(sort) is unnecessary when passing $^ to the LINK
function ($^ already eliminates repeats, while keeping the order
intact). The patch fixes the QEMU_PROG rule, which was the only one not
using $^.


Thanks,
    Lluis
Michael Roth Sept. 1, 2011, 7:52 p.m. UTC | #3
On 09/01/2011 01:54 PM, Anthony Liguori wrote:
> On 08/25/2011 03:18 AM, Stefan Hajnoczi wrote:
>> Avoid duplicate object files during the link. There are legitimate
>> cases where a link command-line would include duplicate object files
>> because two independent subsystems both depend on common infrastructure.
>>
>> Use GNU make's $(sort) function to remove duplicate object files from
>> the link command-line.
>>
>> Signed-off-by: Stefan Hajnoczi<stefanha@linux.vnet.ibm.com>
>
> Applied. Thanks.
>

Don't think it'll hurt to have both, but "[PATCH 01/15] build: Fix 
linkage of QEMU_PROG" from Stefan's tracing pull request has the more 
elegant fix for this.

> Regards,
>
> Anthony Liguori
>
>> ---
>> Your patch seems fine but we need to avoid duplicate object files
>> during the
>> link phase. Otherwise we run into linker warnings because
>> qemu-timer-common.o
>> is linked multiple times. Please include this patch and resend the two
>> together with this patch as 1/2 and yours as 2/2.
>>
>> rules.mak | 2 +-
>> 1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/rules.mak b/rules.mak
>> index 884d421..04a9198 100644
>> --- a/rules.mak
>> +++ b/rules.mak
>> @@ -31,7 +31,7 @@ endif
>> %.o: %.m
>> $(call quiet-command,$(CC) $(QEMU_INCLUDES) $(QEMU_CFLAGS)
>> $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<," OBJC $(TARGET_DIR)$@")
>>
>> -LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS)
>> -o $@ $(1) $(LIBS)," LINK $(TARGET_DIR)$@")
>> +LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS)
>> -o $@ $(sort $(1)) $(LIBS)," LINK $(TARGET_DIR)$@")
>>
>> %$(EXESUF): %.o
>> $(call LINK,$^)
>
>
Stefan Hajnoczi Sept. 2, 2011, 8:42 a.m. UTC | #4
2011/9/1 Michael Roth <mdroth@linux.vnet.ibm.com>:
> On 09/01/2011 01:54 PM, Anthony Liguori wrote:
>>
>> On 08/25/2011 03:18 AM, Stefan Hajnoczi wrote:
>>>
>>> Avoid duplicate object files during the link. There are legitimate
>>> cases where a link command-line would include duplicate object files
>>> because two independent subsystems both depend on common infrastructure.
>>>
>>> Use GNU make's $(sort) function to remove duplicate object files from
>>> the link command-line.
>>>
>>> Signed-off-by: Stefan Hajnoczi<stefanha@linux.vnet.ibm.com>
>>
>> Applied. Thanks.
>>
>
> Don't think it'll hurt to have both, but "[PATCH 01/15] build: Fix linkage
> of QEMU_PROG" from Stefan's tracing pull request has the more elegant fix
> for this.

Agreed, it doesn't hurt to take this one but the $^ fix is nicer and
already merged.

Anthony: Do you want to revert this patch?  It's not necessary.

Stefan
Anthony Liguori Sept. 2, 2011, 2:56 p.m. UTC | #5
On 09/02/2011 03:42 AM, Stefan Hajnoczi wrote:
> 2011/9/1 Michael Roth<mdroth@linux.vnet.ibm.com>:
>> On 09/01/2011 01:54 PM, Anthony Liguori wrote:
>>>
>>> On 08/25/2011 03:18 AM, Stefan Hajnoczi wrote:
>>>>
>>>> Avoid duplicate object files during the link. There are legitimate
>>>> cases where a link command-line would include duplicate object files
>>>> because two independent subsystems both depend on common infrastructure.
>>>>
>>>> Use GNU make's $(sort) function to remove duplicate object files from
>>>> the link command-line.
>>>>
>>>> Signed-off-by: Stefan Hajnoczi<stefanha@linux.vnet.ibm.com>
>>>
>>> Applied. Thanks.
>>>
>>
>> Don't think it'll hurt to have both, but "[PATCH 01/15] build: Fix linkage
>> of QEMU_PROG" from Stefan's tracing pull request has the more elegant fix
>> for this.
>
> Agreed, it doesn't hurt to take this one but the $^ fix is nicer and
> already merged.
>
> Anthony: Do you want to revert this patch?  It's not necessary.

If someone wants to send a patch, I can apply it, but I don't see the 
motivation to revert.

Regards,

Anthony Liguori

> Stefan
>
>
diff mbox

Patch

diff --git a/rules.mak b/rules.mak
index 884d421..04a9198 100644
--- a/rules.mak
+++ b/rules.mak
@@ -31,7 +31,7 @@  endif
 %.o: %.m
 	$(call quiet-command,$(CC) $(QEMU_INCLUDES) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<,"  OBJC  $(TARGET_DIR)$@")
 
-LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(1) $(LIBS),"  LINK  $(TARGET_DIR)$@")
+LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(sort $(1)) $(LIBS),"  LINK  $(TARGET_DIR)$@")
 
 %$(EXESUF): %.o
 	$(call LINK,$^)