qemu-devel.nongnu.org archive mirror
 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).