All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Roth <mdroth@linux.vnet.ibm.com>
To: Stefan Weil <sw@weilnetz.de>, Paolo Bonzini <pbonzini@redhat.com>,
	qemu-devel@nongnu.org
Cc: "Marc-André Lureau" <marcandre.lureau@redhat.com>
Subject: Re: [Qemu-devel] [PATCH] build: qemu-ga: add 'qemu-ga' build target for w32
Date: Sun, 15 Nov 2015 10:14:46 -0600	[thread overview]
Message-ID: <20151115161446.7353.29669@loki> (raw)
In-Reply-To: <56483EB0.8080903@weilnetz.de>

Quoting Stefan Weil (2015-11-15 02:13:36)
> Am 09.09.2015 um 11:42 schrieb Paolo Bonzini:
> >
> > On 08/09/2015 17:47, Michael Roth wrote:
> >> Currently POSIX builds rely on 'qemu-ga' target to do qga-only
> >> distributable build. On w32, as with most standalone binary targets,
> >> we rely on 'qemu-ga.exe' target.
> >>
> >> Unlike with POSIX, qemu-ga for w32 has a number of related targets
> >> such as VSS DLL and MSI package. We can do the full distributable
> >> qga-only build on w32 with:
> >>
> >>   make qemu-ga.exe
> >>
> >> or:
> >>
> >>   make msi
> >>
> >> To make that work, we tie VSS dependencies onto qemu-ga.exe.
> >> However, in reality the DLL isn't part of the binary, so we use a
> >> filter to pull them out of the LINK recipe, which attempts to link
> >> against prereqs for binary targets. Additionally, it could be argued
> >> that VSS is a separate distributable, and shouldn't be implied by
> >> qemu-ga.exe binary target.
> >>
> >> To avoid this, we can tie the VSS dependencies only to the 'msi'
> >> target, but that would make it impossible to do a qga-only build of
> >> the w32 distributable without building the 'msi' package, which was
> >> supported in the past.
> >>
> >> An alternative approach is to add a new target to build the whole
> >> distributable. w32 allows us to use the same build target we use
> >> on POSIX, 'qemu-ga', since the current binary-only target on w32
> >> is 'qemu-ga.exe'.
> >>
> >> To further simplify the build, we also make 'qemu-ga' build the MSI
> >> package if the appropriate ./configure options are set, making the
> >> full qga-only build the same on both POSIX and w32: `make qemu-ga`
> >>
> >> Cc: Paolo Bonzini <pbonzini@redhat.com>
> >> Cc: Marc-André Lureau <marcandre.lureau@redhat.com>
> >> Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
> >> ---
> >>  Makefile  | 14 ++++++++------
> >>  configure |  2 +-
> >>  2 files changed, 9 insertions(+), 7 deletions(-)
> >>
> >> diff --git a/Makefile b/Makefile
> >> index 9ce3972..7efca5e 100644
> >> --- a/Makefile
> >> +++ b/Makefile
> >> @@ -290,18 +290,15 @@ $(qapi-modules) $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)
> >>  QGALIB_GEN=$(addprefix qga/qapi-generated/, qga-qapi-types.h qga-qapi-visit.h qga-qmp-commands.h)
> >>  $(qga-obj-y) qemu-ga.o: $(QGALIB_GEN)
> >>  
> >> -# we require QGA_VSS_PROVIDER files to be built alongside qemu-ga
> >> -# executable since they are shipped together, but we don't want to actually
> >> -# link against them
> >> -qemu-ga$(EXESUF): $(qga-obj-y) libqemuutil.a libqemustub.a $(QGA_VSS_PROVIDER)
> >> -    $(call LINK, $(filter-out $(QGA_VSS_PROVIDER), $^))
> >> +qemu-ga$(EXESUF): $(qga-obj-y) libqemuutil.a libqemustub.a
> >> +    $(call LINK, $^)
> >>  
> >>  ifdef QEMU_GA_MSI_ENABLED
> >>  QEMU_GA_MSI=qemu-ga-$(ARCH).msi
> >>  
> >>  msi: $(QEMU_GA_MSI)
> >>  
> >> -$(QEMU_GA_MSI): qemu-ga.exe
> >> +$(QEMU_GA_MSI): qemu-ga.exe $(QGA_VSS_PROVIDER)
> >>  
> >>  $(QEMU_GA_MSI): config-host.mak
> >>  
> >> @@ -313,6 +310,11 @@ msi:
> >>      @echo "MSI build not configured or dependency resolution failed (reconfigure with --enable-guest-agent-msi option)"
> >>  endif
> >>  
> >> +ifneq ($(EXESUF),)
> >> +.PHONY: qemu-ga
> >> +qemu-ga: qemu-ga$(EXESUF) $(QGA_VSS_PROVIDER) $(QEMU_GA_MSI)
> >> +endif
> >> +
> >>  clean:
> >>  # avoid old build problems by removing potentially incorrect old files
> >>      rm -f config.mak op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h
> >> diff --git a/configure b/configure
> >> index d854936..fc34443 100755
> >> --- a/configure
> >> +++ b/configure
> >> @@ -4350,7 +4350,7 @@ fi
> >>  
> >>  if [ "$guest_agent" != "no" ]; then
> >>    if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
> >> -      tools="qemu-ga\$(EXESUF) $tools"
> >> +      tools="qemu-ga $tools"
> >>        guest_agent=yes
> >>    elif [ "$guest_agent" != yes ]; then
> >>        guest_agent=no
> >>
> > Looks good, thanks!
> >
> > Paolo
> 
> Looks good, but introduced a regression for cross builds:
> 'make install' now fails with an error:
> 
> install: cannot stat 'qemu-ga': No such file or directory
> 
> Reverting the change in configure fixes this.

Thanks for the catch. Just sent a proposed fix:

"[PATCH for-2.5] makefile: fix w32 install target for qemu-ga"

> 
> Stefan
> 

      reply	other threads:[~2015-11-15 16:15 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-08 15:47 [Qemu-devel] [PATCH] build: qemu-ga: add 'qemu-ga' build target for w32 Michael Roth
2015-09-09  9:42 ` Paolo Bonzini
2015-11-15  8:13   ` Stefan Weil
2015-11-15 16:14     ` Michael Roth [this message]

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=20151115161446.7353.29669@loki \
    --to=mdroth@linux.vnet.ibm.com \
    --cc=marcandre.lureau@redhat.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.