All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Roth <mdroth@linux.vnet.ibm.com>
To: Stefan Weil <sw@weilnetz.de>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
	Anthony Liguori <aliguori@us.ibm.com>,
	qemu-devel <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH v2 for 1.6] w32: Add missing version.o to all executables (fix regression)
Date: Fri, 16 Aug 2013 13:27:32 -0500	[thread overview]
Message-ID: <20130816182732.30766.77528@loki> (raw)
In-Reply-To: <520DBEBB.2090809@weilnetz.de>

Quoting Stefan Weil (2013-08-16 00:55:07)
> Am 16.08.2013 00:19, schrieb Michael Roth:
> 
>  Quoting Stefan Weil (2013-08-08 13:18:07)
> 
>  > QEMU executables for w32, w64 had included meta information built from
>  > version.rc. These rules were changed several times some months ago.
>  >
>  > The latest version added version.o to the tools, but not to the system
>  > emulations.
>  >
>  > This patch adds the meta information to all system emulations again.
>  >
>  > Signed-off-by: Stefan Weil <sw@weilnetz.de>
> 
>  I seem to be getting build errors with this patch when doing a Fedora 18 mingw
>  crossbuild. I thought it was specific to qemu-ga so I disabled it to confirm
>  and it looks like version.o is never being built, so all targets fail when
>  linking.
> 
>  Reverting this patch seems to fix things
> 
> 
>    That's strange. Exactly the same command line works on Debian wheezy.
>    version.o is built right at the beginning:
> 
>    ...
>    QOM debugging     yes
>      GEN   x86_64-softmmu/config-devices.mak
>      GEN   qemu-options.def
>      GEN   config-host.h
>      GEN   qmp-commands.h
>      GEN   qapi-types.h
>      GEN   qapi-visit.h
>      GEN   trace/generated-events.h
>      GEN   trace/generated-tracers.h
>      GEN   tests/test-qapi-types.h
>      GEN   tests/test-qapi-visit.h
>      GEN   tests/test-qmp-commands.h
>      GEN   config-all-devices.mak
>      RC    /home/stefan/src/qemu/qemu.org/spelling/version.o
>    rm /home/stefan/src/qemu/qemu.org/spelling/config-host.h-timestamp
>      GEN   config-host.h
>      GEN   qemu-monitor.texi
>      GEN   qemu-img-cmds.texi
>    ...
> 
>    Here are the dependency rules which should trigger building of version.o:
> 
>    $ grep version-.*obj Makefile* *mak
>    Makefile:Makefile: $(version-obj-y) $(version-lobj-y)
>    Makefile.objs:version-obj-$(CONFIG_WIN32) += $(BUILD_DIR)/version.o
>    Makefile.objs:version-lobj-$(CONFIG_WIN32) += $(BUILD_DIR)/version.lo

mdroth@loki:~/w/qemu2.git$ grep version-.*obj Makefile* *mak
Makefile:Makefile: $(version-obj-y) $(version-lobj-y)
Makefile.objs:version-obj-$(CONFIG_WIN32) += $(BUILD_DIR)/version.o
Makefile.objs:version-lobj-$(CONFIG_WIN32) += $(BUILD_DIR)/version.lo
rules.mak:       $(sort $(filter %.o, $1)) $(filter-out %.o, $1) $(version-obj-y) \
rules.mak:       $(if $(filter %.lo %.la,$^),$(version-lobj-y),$(version-obj-y)) \

> 
>    Could you please check the values of version-obj-y, version-lobj-y?
>    Do you use a special make program? Do you get the same problem when
>    running make without -j4 (no parallel build)?

Same issue with non-parallel build, first link target is qemu-img
which fails due to missing version.o

At qemu-img link time, the actual values of version-{lobj,obj}-y are:

  version-obj-y: /home/mdroth/dev/kvm/qemu-build2/version.o
  version-lobj-y: /home/mdroth/dev/kvm/qemu-build2/version.lo

No special make either:

[mdroth@vm5 qemu-build2]$ make -v
GNU Make 3.82
Built for x86_64-redhat-linux-gnu
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[mdroth@vm5 qemu-build2]$

I can get everything to build with the following patch, so I suspect it
has something to do with the the non-relative target paths for
version.o/.lo causing us to no longer matching the $(WINDRES) recipe in
rules.mak in certain environments:

diff --git a/Makefile b/Makefile
index 4d257f1..3e9416f 100644
--- a/Makefile
+++ b/Makefile
@@ -168,6 +168,7 @@ recurse-all: $(SUBDIR_RULES) $(ROMSUBDIR_RULES)
 bt-host.o: QEMU_CFLAGS += $(BLUEZ_CFLAGS)
 
 $(BUILD_DIR)/version.o: $(SRC_PATH)/version.rc $(BUILD_DIR)/config-host.h | $(BUILD_DIR)/version.lo
+   $(call quiet-command,$(WINDRES) -I. -o $@ $<,"  RC    $(TARGET_DIR)$@")
 $(BUILD_DIR)/version.lo: $(SRC_PATH)/version.rc $(BUILD_DIR)/config-host.h
 
 Makefile: $(version-obj-y) $(version-lobj-y)

> 
>    My patch was a hack for 1.6, but I did not expect that it might cause
>    any problems. A better solution would extend version.rc and compile
>    it each time when linking, so version.o can include build information.
> 
>    Regards,
>    Stefan

  reply	other threads:[~2013-08-16 18:27 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-08 18:18 [Qemu-devel] [PATCH v2 for 1.6] w32: Add missing version.o to all executables (fix regression) Stefan Weil
2013-08-14 16:27 ` Anthony Liguori
2013-08-15 22:19 ` Michael Roth
2013-08-16  5:55   ` Stefan Weil
2013-08-16 18:27     ` Michael Roth [this message]
2013-08-16 18:42       ` Michael Roth

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130816182732.30766.77528@loki \
    --to=mdroth@linux.vnet.ibm.com \
    --cc=aliguori@us.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=sw@weilnetz.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.