* Re: [Qemu-devel] [PATCH v2] Drop --whole-archive and static libraries [not found] <1262268274-1043-1-git-send-email-andreas.faerber@web.de> @ 2010-01-03 12:31 ` Blue Swirl 2010-01-04 20:47 ` Blue Swirl 2010-01-03 14:54 ` [Qemu-devel] Re: [PATCH v2] " Palle Lyckegaard 1 sibling, 1 reply; 16+ messages in thread From: Blue Swirl @ 2010-01-03 12:31 UTC (permalink / raw) To: Andreas Färber Cc: qemu-devel, Andreas Färber, Juan Quintela, Kirill A. Shutemov, Paolo Bonzini, Palle Lyckegaard 2009/12/31 Andreas Färber <andreas.faerber@web.de>: > From: Andreas Färber <afaerber@opensolaris.org> > > Juan has contributed a cool Makefile infrastructure that enables us to drop > static libraries completely: > > Move shared obj-y definitions to Makefile.objs, prefixed {common-,hw-,user-}, > and link those object files directly into the executables. > > Replace HWLIB by HWDIR, specifying only the directory. > > Drop --whole-archive and ARLIBS in Makefiles and configure. > > Drop GENERATED_HEADERS dependency in rules.mak, since this rebuilds all > common objects after generating a target-specific header; add dependency > rules to Makefile and Makefile.target instead. > > v2: > - Don't try to include /config.mak for user emulators > - Changes to user object paths ("Quickfix for libuser.a drop") were obsoleted > by "user_only: compile everything with -fpie" (Kirill A. Shutemov) Breaks build: CC i386-softmmu/i386-dis.o make[1]: *** No rule to make target `/loader.o', needed by `qemu'. Stop. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [Qemu-devel] [PATCH v2] Drop --whole-archive and static libraries 2010-01-03 12:31 ` [Qemu-devel] [PATCH v2] Drop --whole-archive and static libraries Blue Swirl @ 2010-01-04 20:47 ` Blue Swirl 2010-01-06 18:51 ` Andreas Färber 0 siblings, 1 reply; 16+ messages in thread From: Blue Swirl @ 2010-01-04 20:47 UTC (permalink / raw) To: Andreas Färber Cc: qemu-devel, Andreas Färber, Juan Quintela, Kirill A. Shutemov, Paolo Bonzini, Palle Lyckegaard On Sun, Jan 3, 2010 at 12:31 PM, Blue Swirl <blauwirbel@gmail.com> wrote: > 2009/12/31 Andreas Färber <andreas.faerber@web.de>: >> From: Andreas Färber <afaerber@opensolaris.org> >> >> Juan has contributed a cool Makefile infrastructure that enables us to drop >> static libraries completely: >> >> Move shared obj-y definitions to Makefile.objs, prefixed {common-,hw-,user-}, >> and link those object files directly into the executables. >> >> Replace HWLIB by HWDIR, specifying only the directory. >> >> Drop --whole-archive and ARLIBS in Makefiles and configure. >> >> Drop GENERATED_HEADERS dependency in rules.mak, since this rebuilds all >> common objects after generating a target-specific header; add dependency >> rules to Makefile and Makefile.target instead. >> >> v2: >> - Don't try to include /config.mak for user emulators >> - Changes to user object paths ("Quickfix for libuser.a drop") were obsoleted >> by "user_only: compile everything with -fpie" (Kirill A. Shutemov) > > Breaks build: > CC i386-softmmu/i386-dis.o > make[1]: *** No rule to make target `/loader.o', needed by `qemu'. Stop. I found out that completely removing the object directory and recreating it from scratch helps. This sucks bisectability-wise, is there any way to avoid it? There is still one problem, tools need config-host.h but the dependencies are not correct: CC qemu-nbd.o In file included from /src/qemu/qemu-nbd.c:19: /src/qemu/qemu-common.h:32:25: error: config-host.h: No such file or directory ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [Qemu-devel] [PATCH v2] Drop --whole-archive and static libraries 2010-01-04 20:47 ` Blue Swirl @ 2010-01-06 18:51 ` Andreas Färber 2010-01-06 19:24 ` Blue Swirl 2010-01-06 19:24 ` [Qemu-devel] [PATCH v3] " Andreas Färber 0 siblings, 2 replies; 16+ messages in thread From: Andreas Färber @ 2010-01-06 18:51 UTC (permalink / raw) To: Blue Swirl Cc: Kirill A. Shutemov, Paolo Bonzini, QEMU Developers, Palle Lyckegaard, Juan Quintela Am 04.01.2010 um 21:47 schrieb Blue Swirl: > On Sun, Jan 3, 2010 at 12:31 PM, Blue Swirl <blauwirbel@gmail.com> > wrote: >> 2009/12/31 Andreas Färber <andreas.faerber@web.de>: >>> From: Andreas Färber <afaerber@opensolaris.org> >>> >>> Juan has contributed a cool Makefile infrastructure that enables >>> us to drop >>> static libraries completely: >>> >>> Move shared obj-y definitions to Makefile.objs, prefixed >>> {common-,hw-,user-}, >>> and link those object files directly into the executables. >>> >>> Replace HWLIB by HWDIR, specifying only the directory. >>> >>> Drop --whole-archive and ARLIBS in Makefiles and configure. >>> >>> Drop GENERATED_HEADERS dependency in rules.mak, since this >>> rebuilds all >>> common objects after generating a target-specific header; add >>> dependency >>> rules to Makefile and Makefile.target instead. >>> >>> v2: >>> - Don't try to include /config.mak for user emulators >>> - Changes to user object paths ("Quickfix for libuser.a drop") >>> were obsoleted >>> by "user_only: compile everything with -fpie" (Kirill A. Shutemov) >> >> Breaks build: >> CC i386-softmmu/i386-dis.o >> make[1]: *** No rule to make target `/loader.o', needed by `qemu'. >> Stop. > > I found out that completely removing the object directory and > recreating it from scratch helps. This sucks bisectability-wise, is > there any way to avoid it? Sounds as if configure was not re-run and thus $(HWDIR) not set in config-target.mak. No idea why, more likely a general issue. Do you have a way to reproduce? What about `make clean` or `make distclean`? > There is still one problem, tools need config-host.h but the > dependencies are not correct: > CC qemu-nbd.o > In file included from /src/qemu/qemu-nbd.c:19: > /src/qemu/qemu-common.h:32:25: error: config-host.h: No such file or > directory Fix coming up. Basically, $(GENERATED_HEADERS) were previously used on _all_ object files via rules.mak. That does not work when referencing objects from another Makefile, so the modelling needs to be done explicitly. Andreas ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [Qemu-devel] [PATCH v2] Drop --whole-archive and static libraries 2010-01-06 18:51 ` Andreas Färber @ 2010-01-06 19:24 ` Blue Swirl 2010-01-06 19:53 ` Andreas Färber 2010-01-06 19:24 ` [Qemu-devel] [PATCH v3] " Andreas Färber 1 sibling, 1 reply; 16+ messages in thread From: Blue Swirl @ 2010-01-06 19:24 UTC (permalink / raw) To: Andreas Färber Cc: Kirill A. Shutemov, Paolo Bonzini, QEMU Developers, Palle Lyckegaard, Juan Quintela On Wed, Jan 6, 2010 at 6:51 PM, Andreas Färber <andreas.faerber@web.de> wrote: > > Am 04.01.2010 um 21:47 schrieb Blue Swirl: > >> On Sun, Jan 3, 2010 at 12:31 PM, Blue Swirl <blauwirbel@gmail.com> wrote: >>> >>> 2009/12/31 Andreas Färber <andreas.faerber@web.de>: >>>> >>>> From: Andreas Färber <afaerber@opensolaris.org> >>>> >>>> Juan has contributed a cool Makefile infrastructure that enables us to >>>> drop >>>> static libraries completely: >>>> >>>> Move shared obj-y definitions to Makefile.objs, prefixed >>>> {common-,hw-,user-}, >>>> and link those object files directly into the executables. >>>> >>>> Replace HWLIB by HWDIR, specifying only the directory. >>>> >>>> Drop --whole-archive and ARLIBS in Makefiles and configure. >>>> >>>> Drop GENERATED_HEADERS dependency in rules.mak, since this rebuilds all >>>> common objects after generating a target-specific header; add dependency >>>> rules to Makefile and Makefile.target instead. >>>> >>>> v2: >>>> - Don't try to include /config.mak for user emulators >>>> - Changes to user object paths ("Quickfix for libuser.a drop") were >>>> obsoleted >>>> by "user_only: compile everything with -fpie" (Kirill A. Shutemov) >>> >>> Breaks build: >>> CC i386-softmmu/i386-dis.o >>> make[1]: *** No rule to make target `/loader.o', needed by `qemu'. Stop. >> >> I found out that completely removing the object directory and >> recreating it from scratch helps. This sucks bisectability-wise, is >> there any way to avoid it? > > Sounds as if configure was not re-run and thus $(HWDIR) not set in > config-target.mak. No idea why, more likely a general issue. > Do you have a way to reproduce? What about `make clean` or `make distclean`? Strange, now that I try to reproduce it with a new directory, everything works. Also my normal compile directory does not show the problem anymore. Maybe there were some old files lying around. >> There is still one problem, tools need config-host.h but the >> dependencies are not correct: >> CC qemu-nbd.o >> In file included from /src/qemu/qemu-nbd.c:19: >> /src/qemu/qemu-common.h:32:25: error: config-host.h: No such file or >> directory > > Fix coming up. Basically, $(GENERATED_HEADERS) were previously used on _all_ > object files via rules.mak. That does not work when referencing objects from > another Makefile, so the modelling needs to be done explicitly. OK. Since there have been no objections, I'd like to apply this soon. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [Qemu-devel] [PATCH v2] Drop --whole-archive and static libraries 2010-01-06 19:24 ` Blue Swirl @ 2010-01-06 19:53 ` Andreas Färber 2010-01-06 20:40 ` Blue Swirl 0 siblings, 1 reply; 16+ messages in thread From: Andreas Färber @ 2010-01-06 19:53 UTC (permalink / raw) To: Blue Swirl Cc: Kirill A. Shutemov, Paolo Bonzini, QEMU Developers, Palle Lyckegaard, Juan Quintela Am 06.01.2010 um 20:24 schrieb Blue Swirl: > On Wed, Jan 6, 2010 at 6:51 PM, Andreas Färber > <andreas.faerber@web.de> wrote: >> >> Am 04.01.2010 um 21:47 schrieb Blue Swirl: >> >>> On Sun, Jan 3, 2010 at 12:31 PM, Blue Swirl <blauwirbel@gmail.com> >>> wrote: >>>> >>>> 2009/12/31 Andreas Färber <andreas.faerber@web.de>: >>>>> >>>>> From: Andreas Färber <afaerber@opensolaris.org> >>>>> >>>>> Juan has contributed a cool Makefile infrastructure that enables >>>>> us to >>>>> drop >>>>> static libraries completely: >>>>> >>>>> Move shared obj-y definitions to Makefile.objs, prefixed >>>>> {common-,hw-,user-}, >>>>> and link those object files directly into the executables. >>>>> >>>>> Replace HWLIB by HWDIR, specifying only the directory. >>>>> >>>>> Drop --whole-archive and ARLIBS in Makefiles and configure. >>>>> >>>>> Drop GENERATED_HEADERS dependency in rules.mak, since this >>>>> rebuilds all >>>>> common objects after generating a target-specific header; add >>>>> dependency >>>>> rules to Makefile and Makefile.target instead. >>>>> >>>>> v2: >>>>> - Don't try to include /config.mak for user emulators >>>>> - Changes to user object paths ("Quickfix for libuser.a drop") >>>>> were >>>>> obsoleted >>>>> by "user_only: compile everything with -fpie" (Kirill A. >>>>> Shutemov) >>> There is still one problem, tools need config-host.h but the >>> dependencies are not correct: >>> CC qemu-nbd.o >>> In file included from /src/qemu/qemu-nbd.c:19: >>> /src/qemu/qemu-common.h:32:25: error: config-host.h: No such file or >>> directory >> >> Fix coming up. Basically, $(GENERATED_HEADERS) were previously used >> on _all_ >> object files via rules.mak. That does not work when referencing >> objects from >> another Makefile, so the modelling needs to be done explicitly. > > OK. Since there have been no objections, I'd like to apply this soon. That would be very much appreciated. I have not tested bsd-user. Could you please check that on your BSD setup? Thanks, Andreas ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [Qemu-devel] [PATCH v2] Drop --whole-archive and static libraries 2010-01-06 19:53 ` Andreas Färber @ 2010-01-06 20:40 ` Blue Swirl 0 siblings, 0 replies; 16+ messages in thread From: Blue Swirl @ 2010-01-06 20:40 UTC (permalink / raw) To: Andreas Färber Cc: Kirill A. Shutemov, Paolo Bonzini, QEMU Developers, Palle Lyckegaard, Juan Quintela On Wed, Jan 6, 2010 at 7:53 PM, Andreas Färber <andreas.faerber@web.de> wrote: > > Am 06.01.2010 um 20:24 schrieb Blue Swirl: > >> On Wed, Jan 6, 2010 at 6:51 PM, Andreas Färber <andreas.faerber@web.de> >> wrote: >>> >>> Am 04.01.2010 um 21:47 schrieb Blue Swirl: >>> >>>> On Sun, Jan 3, 2010 at 12:31 PM, Blue Swirl <blauwirbel@gmail.com> >>>> wrote: >>>>> >>>>> 2009/12/31 Andreas Färber <andreas.faerber@web.de>: >>>>>> >>>>>> From: Andreas Färber <afaerber@opensolaris.org> >>>>>> >>>>>> Juan has contributed a cool Makefile infrastructure that enables us to >>>>>> drop >>>>>> static libraries completely: >>>>>> >>>>>> Move shared obj-y definitions to Makefile.objs, prefixed >>>>>> {common-,hw-,user-}, >>>>>> and link those object files directly into the executables. >>>>>> >>>>>> Replace HWLIB by HWDIR, specifying only the directory. >>>>>> >>>>>> Drop --whole-archive and ARLIBS in Makefiles and configure. >>>>>> >>>>>> Drop GENERATED_HEADERS dependency in rules.mak, since this rebuilds >>>>>> all >>>>>> common objects after generating a target-specific header; add >>>>>> dependency >>>>>> rules to Makefile and Makefile.target instead. >>>>>> >>>>>> v2: >>>>>> - Don't try to include /config.mak for user emulators >>>>>> - Changes to user object paths ("Quickfix for libuser.a drop") were >>>>>> obsoleted >>>>>> by "user_only: compile everything with -fpie" (Kirill A. Shutemov) > >>>> There is still one problem, tools need config-host.h but the >>>> dependencies are not correct: >>>> CC qemu-nbd.o >>>> In file included from /src/qemu/qemu-nbd.c:19: >>>> /src/qemu/qemu-common.h:32:25: error: config-host.h: No such file or >>>> directory >>> >>> Fix coming up. Basically, $(GENERATED_HEADERS) were previously used on >>> _all_ >>> object files via rules.mak. That does not work when referencing objects >>> from >>> another Makefile, so the modelling needs to be done explicitly. >> >> OK. Since there have been no objections, I'd like to apply this soon. > > That would be very much appreciated. > > I have not tested bsd-user. Could you please check that on your BSD setup? Seems to work, as do Milax and mingw32. ^ permalink raw reply [flat|nested] 16+ messages in thread
* [Qemu-devel] [PATCH v3] Drop --whole-archive and static libraries 2010-01-06 18:51 ` Andreas Färber 2010-01-06 19:24 ` Blue Swirl @ 2010-01-06 19:24 ` Andreas Färber 2010-01-07 18:10 ` [Qemu-devel] " Blue Swirl 2010-01-07 18:11 ` [Qemu-devel] Re: [PATCH v3] Drop --whole-archive and static libraries Palle Lyckegaard 1 sibling, 2 replies; 16+ messages in thread From: Andreas Färber @ 2010-01-06 19:24 UTC (permalink / raw) To: qemu-devel Cc: Andreas Färber, Blue Swirl, Juan Quintela, Paolo Bonzini, Kirill A. Shutemov, Palle Lyckegaard From: Andreas Färber <afaerber@opensolaris.org> Juan has contributed a cool Makefile infrastructure that enables us to drop static libraries completely: Move shared obj-y definitions to Makefile.objs, prefixed {common-,hw-,user-}, and link those object files directly into the executables. Replace HWLIB by HWDIR, specifying only the directory. Drop --whole-archive and ARLIBS in Makefiles and configure. Drop GENERATED_HEADERS dependency in rules.mak, since this rebuilds all common objects after generating a target-specific header; add dependency rules to Makefile and Makefile.target instead. v2: - Don't try to include /config.mak for user emulators - Changes to user object paths ("Quickfix for libuser.a drop") were obsoleted by "user_only: compile everything with -fpie" (Kirill A. Shutemov) v3: - Fix dependency modelling for tools - Remove comment on GENERATED_HEADERS obsoleted by this patch Signed-off-by: Andreas Färber <afaerber@opensolaris.org> Cc: Blue Swirl <blauwirbel@gmail.com> Cc: Palle Lyckegaard <palle@lyckegaard.dk> Cc: Ben Taylor <bentaylor.solx86@gmail.com> Cc: Juan Quintela <quintela@trasno.org> Cc: Kirill A. Shutemov <kirill@shutemov.name> Cc: Paolo Bonzini <pbonzini@redhat.com> --- Makefile | 138 +++++------------------------------------------- Makefile.hw | 33 +----------- Makefile.objs | 155 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ Makefile.target | 33 +++++++++--- Makefile.user | 9 +--- configure | 34 +------------ rules.mak | 4 +- 7 files changed, 202 insertions(+), 204 deletions(-) create mode 100644 Makefile.objs diff --git a/Makefile b/Makefile index c1fa08c..2ca341b 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,5 @@ # Makefile for QEMU. -# This needs to be defined before rules.mak GENERATED_HEADERS = config-host.h ifneq ($(wildcard config-host.mak),) @@ -66,7 +65,10 @@ SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS)) subdir-%: $(GENERATED_HEADERS) $(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" TARGET_DIR="$*/" all,) -$(filter %-softmmu,$(SUBDIR_RULES)): libqemu_common.a +include $(SRC_PATH)/Makefile.objs + +$(common-obj-y): $(GENERATED_HEADERS) +$(filter %-softmmu,$(SUBDIR_RULES)): $(common-obj-y) $(filter %-user,$(SUBDIR_RULES)): libuser.a @@ -81,124 +83,8 @@ ALL_SUBDIRS=$(TARGET_DIRS) $(patsubst %,pc-bios/%, $(ROMS)) recurse-all: $(SUBDIR_RULES) $(ROMSUBDIR_RULES) -####################################################################### -# QObject -qobject-obj-y = qint.o qstring.o qdict.o qlist.o qfloat.o qbool.o -qobject-obj-y += qjson.o json-lexer.o json-streamer.o json-parser.o -qobject-obj-y += qerror.o - -####################################################################### -# block-obj-y is code used by both qemu system emulation and qemu-img - -block-obj-y = cutils.o cache-utils.o qemu-malloc.o qemu-option.o module.o -block-obj-y += nbd.o block.o aio.o aes.o osdep.o -block-obj-$(CONFIG_POSIX) += posix-aio-compat.o -block-obj-$(CONFIG_LINUX_AIO) += linux-aio.o - -block-nested-y += cow.o qcow.o vdi.o vmdk.o cloop.o dmg.o bochs.o vpc.o vvfat.o -block-nested-y += qcow2.o qcow2-refcount.o qcow2-cluster.o qcow2-snapshot.o -block-nested-y += parallels.o nbd.o -block-nested-$(CONFIG_WIN32) += raw-win32.o -block-nested-$(CONFIG_POSIX) += raw-posix.o -block-nested-$(CONFIG_CURL) += curl.o - -block-obj-y += $(addprefix block/, $(block-nested-y)) - -net-obj-y = net.o -net-nested-y = queue.o checksum.o util.o -net-nested-y += socket.o -net-nested-y += dump.o -net-nested-$(CONFIG_POSIX) += tap.o -net-nested-$(CONFIG_LINUX) += tap-linux.o -net-nested-$(CONFIG_WIN32) += tap-win32.o -net-nested-$(CONFIG_BSD) += tap-bsd.o -net-nested-$(CONFIG_SOLARIS) += tap-solaris.o -net-nested-$(CONFIG_AIX) += tap-aix.o -net-nested-$(CONFIG_SLIRP) += slirp.o -net-nested-$(CONFIG_VDE) += vde.o -net-obj-y += $(addprefix net/, $(net-nested-y)) - -###################################################################### -# libqemu_common.a: Target independent part of system emulation. The -# long term path is to suppress *all* target specific code in case of -# system emulation, i.e. a single QEMU executable should support all -# CPUs and machines. - -obj-y = $(block-obj-y) -obj-y += $(net-obj-y) -obj-y += $(qobject-obj-y) -obj-y += readline.o console.o - -obj-y += tcg-runtime.o host-utils.o -obj-y += irq.o ioport.o -obj-$(CONFIG_PTIMER) += ptimer.o -obj-$(CONFIG_MAX7310) += max7310.o -obj-$(CONFIG_WM8750) += wm8750.o -obj-$(CONFIG_TWL92230) += twl92230.o -obj-$(CONFIG_TSC2005) += tsc2005.o -obj-$(CONFIG_LM832X) += lm832x.o -obj-$(CONFIG_TMP105) += tmp105.o -obj-$(CONFIG_STELLARIS_INPUT) += stellaris_input.o -obj-$(CONFIG_SSD0303) += ssd0303.o -obj-$(CONFIG_SSD0323) += ssd0323.o -obj-$(CONFIG_ADS7846) += ads7846.o -obj-$(CONFIG_MAX111X) += max111x.o -obj-$(CONFIG_DS1338) += ds1338.o -obj-y += i2c.o smbus.o smbus_eeprom.o -obj-y += eeprom93xx.o -obj-y += scsi-disk.o cdrom.o -obj-y += scsi-generic.o scsi-bus.o -obj-y += usb.o usb-hub.o usb-$(HOST_USB).o usb-hid.o usb-msd.o usb-wacom.o -obj-y += usb-serial.o usb-net.o usb-bus.o -obj-$(CONFIG_SSI) += ssi.o -obj-$(CONFIG_SSI_SD) += ssi-sd.o -obj-$(CONFIG_SD) += sd.o -obj-y += bt.o bt-host.o bt-vhci.o bt-l2cap.o bt-sdp.o bt-hci.o bt-hid.o usb-bt.o -obj-y += bt-hci-csr.o -obj-y += buffered_file.o migration.o migration-tcp.o qemu-sockets.o -obj-y += qemu-char.o aio.o savevm.o -obj-y += msmouse.o ps2.o -obj-y += qdev.o qdev-properties.o -obj-y += qemu-config.o block-migration.o - -obj-$(CONFIG_BRLAPI) += baum.o -obj-$(CONFIG_POSIX) += migration-exec.o migration-unix.o migration-fd.o - audio/audio.o audio/fmodaudio.o: QEMU_CFLAGS += $(FMOD_CFLAGS) -audio-obj-y = audio.o noaudio.o wavaudio.o mixeng.o -audio-obj-$(CONFIG_SDL) += sdlaudio.o -audio-obj-$(CONFIG_OSS) += ossaudio.o -audio-obj-$(CONFIG_COREAUDIO) += coreaudio.o -audio-obj-$(CONFIG_ALSA) += alsaaudio.o -audio-obj-$(CONFIG_DSOUND) += dsoundaudio.o -audio-obj-$(CONFIG_FMOD) += fmodaudio.o -audio-obj-$(CONFIG_ESD) += esdaudio.o -audio-obj-$(CONFIG_PA) += paaudio.o -audio-obj-$(CONFIG_WINWAVE) += winwaveaudio.o -audio-obj-$(CONFIG_AUDIO_PT_INT) += audio_pt_int.o -audio-obj-$(CONFIG_AUDIO_WIN_INT) += audio_win_int.o -audio-obj-y += wavcapture.o -obj-y += $(addprefix audio/, $(audio-obj-y)) - -obj-y += keymaps.o -obj-$(CONFIG_SDL) += sdl.o sdl_zoom.o x_keymap.o -obj-$(CONFIG_CURSES) += curses.o -obj-y += vnc.o acl.o d3des.o -obj-$(CONFIG_VNC_TLS) += vnc-tls.o vnc-auth-vencrypt.o -obj-$(CONFIG_VNC_SASL) += vnc-auth-sasl.o -obj-$(CONFIG_COCOA) += cocoa.o -obj-$(CONFIG_IOTHREAD) += qemu-thread.o - -slirp-obj-y = cksum.o if.o ip_icmp.o ip_input.o ip_output.o -slirp-obj-y += slirp.o mbuf.o misc.o sbuf.o socket.o tcp_input.o tcp_output.o -slirp-obj-y += tcp_subr.o tcp_timer.o udp.o bootp.o tftp.o -obj-$(CONFIG_SLIRP) += $(addprefix slirp/, $(slirp-obj-y)) - -# xen backend driver support -obj-$(CONFIG_XEN) += xen_backend.o xen_devconfig.o -obj-$(CONFIG_XEN) += xen_console.o xenfb.o xen_disk.o xen_nic.o - QEMU_CFLAGS+=$(CURL_CFLAGS) cocoa.o: cocoa.m @@ -229,17 +115,23 @@ curses.o: curses.c keymaps.h curses_keys.h bt-host.o: QEMU_CFLAGS += $(BLUEZ_CFLAGS) -libqemu_common.a: $(obj-y) - ###################################################################### qemu-img.o: qemu-img-cmds.h -qemu-img$(EXESUF): qemu-img.o qemu-tool.o $(block-obj-y) $(qobject-obj-y) +obj-y = qemu-img.o qemu-tool.o $(block-obj-y) $(qobject-obj-y) + +qemu-img$(EXESUF): $(obj-y) + +obj-y = qemu-nbd.o qemu-tool.o $(block-obj-y) $(qobject-obj-y) +$(obj-y): $(GENERATED_HEADERS) + +qemu-nbd$(EXESUF): $(obj-y) -qemu-nbd$(EXESUF): qemu-nbd.o qemu-tool.o $(block-obj-y) $(qobject-obj-y) +obj-y = qemu-io.o qemu-tool.o cmd.o $(block-obj-y) $(qobject-obj-y) +$(obj-y): $(GENERATED_HEADERS) -qemu-io$(EXESUF): qemu-io.o qemu-tool.o cmd.o $(block-obj-y) $(qobject-obj-y) +qemu-io$(EXESUF): $(obj-y) qemu-img-cmds.h: $(SRC_PATH)/qemu-img-cmds.hx $(call quiet-command,sh $(SRC_PATH)/hxtool -h < $< > $@," GEN $@") diff --git a/Makefile.hw b/Makefile.hw index bd252f5..ff87ae4 100644 --- a/Makefile.hw +++ b/Makefile.hw @@ -11,41 +11,12 @@ VPATH=$(SRC_PATH):$(SRC_PATH)/hw QEMU_CFLAGS+=-I.. -I$(SRC_PATH)/fpu -obj-y = -obj-y += loader.o -obj-y += virtio.o -obj-y += fw_cfg.o -obj-y += watchdog.o -obj-$(CONFIG_ECC) += ecc.o -obj-$(CONFIG_NAND) += nand.o +include $(SRC_PATH)/Makefile.objs -obj-$(CONFIG_M48T59) += m48t59.o -obj-$(CONFIG_ESCC) += escc.o - -# PCI watchdog devices -obj-y += wdt_i6300esb.o - -obj-y += msix.o - -# PCI network cards -obj-y += ne2000.o - -obj-$(CONFIG_SMC91C111) += smc91c111.o -obj-$(CONFIG_LAN9118) += lan9118.o - -# SCSI layer -obj-y += lsi53c895a.o -obj-$(CONFIG_ESP) += esp.o - -obj-y += dma-helpers.o sysbus.o isa-bus.o -obj-$(CONFIG_QDEV_ADDR) += qdev-addr.o - -all: $(HWLIB) +all: $(hw-obj-y) # Dummy command so that make thinks it has done something @true -$(HWLIB): $(obj-y) - clean: rm -f *.o *.d *.a *~ diff --git a/Makefile.objs b/Makefile.objs new file mode 100644 index 0000000..e8a44d7 --- /dev/null +++ b/Makefile.objs @@ -0,0 +1,155 @@ +####################################################################### +# QObject +qobject-obj-y = qint.o qstring.o qdict.o qlist.o qfloat.o qbool.o +qobject-obj-y += qjson.o json-lexer.o json-streamer.o json-parser.o +qobject-obj-y += qerror.o + +####################################################################### +# block-obj-y is code used by both qemu system emulation and qemu-img + +block-obj-y = cutils.o cache-utils.o qemu-malloc.o qemu-option.o module.o +block-obj-y += nbd.o block.o aio.o aes.o osdep.o +block-obj-$(CONFIG_POSIX) += posix-aio-compat.o +block-obj-$(CONFIG_LINUX_AIO) += linux-aio.o + +block-nested-y += cow.o qcow.o vdi.o vmdk.o cloop.o dmg.o bochs.o vpc.o vvfat.o +block-nested-y += qcow2.o qcow2-refcount.o qcow2-cluster.o qcow2-snapshot.o +block-nested-y += parallels.o nbd.o +block-nested-$(CONFIG_WIN32) += raw-win32.o +block-nested-$(CONFIG_POSIX) += raw-posix.o +block-nested-$(CONFIG_CURL) += curl.o + +block-obj-y += $(addprefix block/, $(block-nested-y)) + +net-obj-y = net.o +net-nested-y = queue.o checksum.o util.o +net-nested-y += socket.o +net-nested-y += dump.o +net-nested-$(CONFIG_POSIX) += tap.o +net-nested-$(CONFIG_LINUX) += tap-linux.o +net-nested-$(CONFIG_WIN32) += tap-win32.o +net-nested-$(CONFIG_BSD) += tap-bsd.o +net-nested-$(CONFIG_SOLARIS) += tap-solaris.o +net-nested-$(CONFIG_AIX) += tap-aix.o +net-nested-$(CONFIG_SLIRP) += slirp.o +net-nested-$(CONFIG_VDE) += vde.o +net-obj-y += $(addprefix net/, $(net-nested-y)) + +###################################################################### +# libqemu_common.a: Target independent part of system emulation. The +# long term path is to suppress *all* target specific code in case of +# system emulation, i.e. a single QEMU executable should support all +# CPUs and machines. + +common-obj-y = $(block-obj-y) +common-obj-y += $(net-obj-y) +common-obj-y += $(qobject-obj-y) +common-obj-y += readline.o console.o + +common-obj-y += tcg-runtime.o host-utils.o +common-obj-y += irq.o ioport.o +common-obj-$(CONFIG_PTIMER) += ptimer.o +common-obj-$(CONFIG_MAX7310) += max7310.o +common-obj-$(CONFIG_WM8750) += wm8750.o +common-obj-$(CONFIG_TWL92230) += twl92230.o +common-obj-$(CONFIG_TSC2005) += tsc2005.o +common-obj-$(CONFIG_LM832X) += lm832x.o +common-obj-$(CONFIG_TMP105) += tmp105.o +common-obj-$(CONFIG_STELLARIS_INPUT) += stellaris_input.o +common-obj-$(CONFIG_SSD0303) += ssd0303.o +common-obj-$(CONFIG_SSD0323) += ssd0323.o +common-obj-$(CONFIG_ADS7846) += ads7846.o +common-obj-$(CONFIG_MAX111X) += max111x.o +common-obj-$(CONFIG_DS1338) += ds1338.o +common-obj-y += i2c.o smbus.o smbus_eeprom.o +common-obj-y += eeprom93xx.o +common-obj-y += scsi-disk.o cdrom.o +common-obj-y += scsi-generic.o scsi-bus.o +common-obj-y += usb.o usb-hub.o usb-$(HOST_USB).o usb-hid.o usb-msd.o usb-wacom.o +common-obj-y += usb-serial.o usb-net.o usb-bus.o +common-obj-$(CONFIG_SSI) += ssi.o +common-obj-$(CONFIG_SSI_SD) += ssi-sd.o +common-obj-$(CONFIG_SD) += sd.o +common-obj-y += bt.o bt-host.o bt-vhci.o bt-l2cap.o bt-sdp.o bt-hci.o bt-hid.o usb-bt.o +common-obj-y += bt-hci-csr.o +common-obj-y += buffered_file.o migration.o migration-tcp.o qemu-sockets.o +common-obj-y += qemu-char.o savevm.o #aio.o +common-obj-y += msmouse.o ps2.o +common-obj-y += qdev.o qdev-properties.o +common-obj-y += qemu-config.o block-migration.o + +common-obj-$(CONFIG_BRLAPI) += baum.o +common-obj-$(CONFIG_POSIX) += migration-exec.o migration-unix.o migration-fd.o + +audio-obj-y = audio.o noaudio.o wavaudio.o mixeng.o +audio-obj-$(CONFIG_SDL) += sdlaudio.o +audio-obj-$(CONFIG_OSS) += ossaudio.o +audio-obj-$(CONFIG_COREAUDIO) += coreaudio.o +audio-obj-$(CONFIG_ALSA) += alsaaudio.o +audio-obj-$(CONFIG_DSOUND) += dsoundaudio.o +audio-obj-$(CONFIG_FMOD) += fmodaudio.o +audio-obj-$(CONFIG_ESD) += esdaudio.o +audio-obj-$(CONFIG_PA) += paaudio.o +audio-obj-$(CONFIG_WINWAVE) += winwaveaudio.o +audio-obj-$(CONFIG_AUDIO_PT_INT) += audio_pt_int.o +audio-obj-$(CONFIG_AUDIO_WIN_INT) += audio_win_int.o +audio-obj-y += wavcapture.o +common-obj-y += $(addprefix audio/, $(audio-obj-y)) + +common-obj-y += keymaps.o +common-obj-$(CONFIG_SDL) += sdl.o sdl_zoom.o x_keymap.o +common-obj-$(CONFIG_CURSES) += curses.o +common-obj-y += vnc.o acl.o d3des.o +common-obj-$(CONFIG_VNC_TLS) += vnc-tls.o vnc-auth-vencrypt.o +common-obj-$(CONFIG_VNC_SASL) += vnc-auth-sasl.o +common-obj-$(CONFIG_COCOA) += cocoa.o +common-obj-$(CONFIG_IOTHREAD) += qemu-thread.o + +slirp-obj-y = cksum.o if.o ip_icmp.o ip_input.o ip_output.o +slirp-obj-y += slirp.o mbuf.o misc.o sbuf.o socket.o tcp_input.o tcp_output.o +slirp-obj-y += tcp_subr.o tcp_timer.o udp.o bootp.o tftp.o +common-obj-$(CONFIG_SLIRP) += $(addprefix slirp/, $(slirp-obj-y)) + +# xen backend driver support +common-obj-$(CONFIG_XEN) += xen_backend.o xen_devconfig.o +common-obj-$(CONFIG_XEN) += xen_console.o xenfb.o xen_disk.o xen_nic.o + +###################################################################### +# libuser + +user-obj-y = +user-obj-y += envlist.o path.o +user-obj-y += tcg-runtime.o host-utils.o +user-obj-y += cutils.o cache-utils.o + +###################################################################### +# libhw + +hw-obj-y = +hw-obj-y += loader.o +hw-obj-y += virtio.o +hw-obj-y += fw_cfg.o +hw-obj-y += watchdog.o +hw-obj-$(CONFIG_ECC) += ecc.o +hw-obj-$(CONFIG_NAND) += nand.o + +hw-obj-$(CONFIG_M48T59) += m48t59.o +hw-obj-$(CONFIG_ESCC) += escc.o + +# PCI watchdog devices +hw-obj-y += wdt_i6300esb.o + +hw-obj-y += msix.o + +# PCI network cards +hw-obj-y += ne2000.o + +hw-obj-$(CONFIG_SMC91C111) += smc91c111.o +hw-obj-$(CONFIG_LAN9118) += lan9118.o + +# SCSI layer +hw-obj-y += lsi53c895a.o +hw-obj-$(CONFIG_ESP) += esp.o + +hw-obj-y += dma-helpers.o sysbus.o isa-bus.o +hw-obj-$(CONFIG_QDEV_ADDR) += qdev-addr.o diff --git a/Makefile.target b/Makefile.target index 7c1f30c..543e8cd 100644 --- a/Makefile.target +++ b/Makefile.target @@ -1,17 +1,21 @@ # -*- Mode: makefile -*- -# This needs to be defined before rules.mak GENERATED_HEADERS = config-target.h include ../config-host.mak include config-devices.mak include config-target.mak include $(SRC_PATH)/rules.mak +ifneq ($(HWDIR),) +include $(HWDIR)/config.mak +endif TARGET_PATH=$(SRC_PATH)/target-$(TARGET_BASE_ARCH) VPATH=$(SRC_PATH):$(TARGET_PATH):$(SRC_PATH)/hw QEMU_CFLAGS+= -I.. -I$(TARGET_PATH) -DNEED_CPU_H +include $(SRC_PATH)/Makefile.objs + ifdef CONFIG_USER_ONLY # user emulator name QEMU_PROG=qemu-$(TARGET_ARCH2) @@ -64,9 +68,9 @@ libobj-$(CONFIG_S390_DIS) += s390-dis.o libobj-$(CONFIG_SH4_DIS) += sh4-dis.o libobj-$(CONFIG_SPARC_DIS) += sparc-dis.o -# libqemu +$(libobj-y): $(GENERATED_HEADERS) -libqemu.a: $(libobj-y) +# libqemu translate.o: translate.c cpu.h @@ -106,7 +110,10 @@ obj-arm-y += arm-semi.o obj-m68k-y += m68k-sim.o m68k-semi.o -ARLIBS=../libuser/libuser.a libqemu.a +$(obj-y) $(obj-$(TARGET_BASE_ARCH)-y): $(GENERATED_HEADERS) + +obj-y += $(addprefix ../libuser/, $(user-obj-y)) +obj-y += $(libobj-y) endif #CONFIG_LINUX_USER @@ -128,7 +135,10 @@ obj-y = main.o commpage.o machload.o mmap.o signal.o syscall.o thunk.o \ obj-i386-y += ioport-user.o -ARLIBS=../libuser/libuser.a libqemu.a +$(obj-y) $(obj-$(TARGET_BASE_ARCH)-y): $(GENERATED_HEADERS) + +obj-y += $(addprefix ../libuser/, $(user-obj-y)) +obj-y += $(libobj-y) endif #CONFIG_DARWIN_USER @@ -145,7 +155,10 @@ obj-y = main.o bsdload.o elfload.o mmap.o signal.o strace.o syscall.o \ obj-i386-y += ioport-user.o -ARLIBS=../libuser/libuser.a libqemu.a +$(obj-y) $(obj-$(TARGET_BASE_ARCH)-y): $(GENERATED_HEADERS) + +obj-y += $(addprefix ../libuser/, $(user-obj-y)) +obj-y += $(libobj-y) endif #CONFIG_BSD_USER @@ -303,13 +316,17 @@ vl.o: qemu-options.h monitor.o: qemu-monitor.h -ARLIBS=../libqemu_common.a libqemu.a $(HWLIB) +$(obj-y) $(obj-$(TARGET_BASE_ARCH)-y): $(GENERATED_HEADERS) + +obj-y += $(addprefix ../, $(common-obj-y)) +obj-y += $(libobj-y) +obj-y += $(addprefix $(HWDIR)/, $(hw-obj-y)) endif # CONFIG_SOFTMMU obj-$(CONFIG_GDBSTUB_XML) += gdbstub-xml.o -$(QEMU_PROG): $(obj-y) $(obj-$(TARGET_BASE_ARCH)-y) $(ARLIBS) +$(QEMU_PROG): $(obj-y) $(obj-$(TARGET_BASE_ARCH)-y) $(call LINK,$(obj-y) $(obj-$(TARGET_BASE_ARCH)-y)) diff --git a/Makefile.user b/Makefile.user index 7daedef..c6ac509 100644 --- a/Makefile.user +++ b/Makefile.user @@ -14,17 +14,12 @@ vpath %.c %.h $(SRC_PATH) QEMU_CFLAGS+=-I.. -obj-y = -obj-y += envlist.o path.o -obj-y += tcg-runtime.o host-utils.o -obj-y += cutils.o cache-utils.o +include $(SRC_PATH)/Makefile.objs -all: libuser.a +all: $(user-obj-y) # Dummy command so that make thinks it has done something @true -libuser.a: $(obj-y) - clean: rm -f *.o *.d *.a *~ diff --git a/configure b/configure index 18aed43..1e9dd04 100755 --- a/configure +++ b/configure @@ -1707,37 +1707,6 @@ elif compile_prog "" "-lrt" ; then LIBS="-lrt $LIBS" fi -# Determine what linker flags to use to force archive inclusion -check_linker_flags() -{ - w2= - if test "$2" ; then - w2=-Wl,$2 - fi - compile_prog "" "-Wl,$1 ${w2}" -} - -cat > $TMPC << EOF -int main(void) { } -EOF -if check_linker_flags --whole-archive --no-whole-archive ; then - # GNU ld - arlibs_begin="-Wl,--whole-archive" - arlibs_end="-Wl,--no-whole-archive" -elif check_linker_flags -z,allextract -z,defaultextract ; then - # Solaris ld - arlibs_begin="-Wl,-z,allextract" - arlibs_end="-Wl,-z,defaultextract" -elif check_linker_flags -all_load ; then - # Mac OS X - arlibs_begin="-all_load" - arlibs_end="" -else - echo "Error: your linker does not support --whole-archive or -z." - echo "Please report to qemu-devel@nongnu.org" - exit 1 -fi - if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \ "$aix" != "yes" ; then libs_softmmu="-lutil $libs_softmmu" @@ -2427,7 +2396,7 @@ fi if test "$target_softmmu" = "yes" ; then echo "CONFIG_SOFTMMU=y" >> $config_target_mak echo "LIBS+=$libs_softmmu" >> $config_target_mak - echo "HWLIB=../libhw$target_phys_bits/libqemuhw$target_phys_bits.a" >> $config_target_mak + echo "HWDIR=../libhw$target_phys_bits" >> $config_target_mak echo "subdir-$target: subdir-libhw$target_phys_bits" >> $config_host_mak fi if test "$target_user_only" = "yes" ; then @@ -2644,7 +2613,6 @@ for hwlib in 32 64; do mkdir -p $d rm -f $d/Makefile ln -s $source_path/Makefile.hw $d/Makefile - echo "HWLIB=libqemuhw$hwlib.a" > $d/config.mak echo "QEMU_CFLAGS+=-DTARGET_PHYS_ADDR_BITS=$hwlib" >> $d/config.mak done diff --git a/rules.mak b/rules.mak index 5d9f684..9bcf9af 100644 --- a/rules.mak +++ b/rules.mak @@ -14,7 +14,7 @@ MAKEFLAGS += -rR # Flags for dependency generation QEMU_DGFLAGS += -MMD -MP -MT $@ -%.o: %.c $(GENERATED_HEADERS) +%.o: %.c $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<," CC $(TARGET_DIR)$@") %.o: %.S @@ -23,7 +23,7 @@ QEMU_DGFLAGS += -MMD -MP -MT $@ %.o: %.m $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<," OBJC $(TARGET_DIR)$@") -LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(1) $(ARLIBS_BEGIN) $(ARLIBS) $(ARLIBS_END) $(LIBS)," LINK $(TARGET_DIR)$@") +LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(1) $(LIBS)," LINK $(TARGET_DIR)$@") %$(EXESUF): %.o $(call LINK,$^) -- 1.6.5.3 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [Qemu-devel] Re: [PATCH v3] Drop --whole-archive and static libraries 2010-01-06 19:24 ` [Qemu-devel] [PATCH v3] " Andreas Färber @ 2010-01-07 18:10 ` Blue Swirl 2010-03-06 11:33 ` [Qemu-devel] QEMU license problem (was [PATCH v3] Drop --whole-archive and static libraries) Stefan Weil 2010-01-07 18:11 ` [Qemu-devel] Re: [PATCH v3] Drop --whole-archive and static libraries Palle Lyckegaard 1 sibling, 1 reply; 16+ messages in thread From: Blue Swirl @ 2010-01-07 18:10 UTC (permalink / raw) To: Andreas Färber Cc: qemu-devel, Andreas Färber, Juan Quintela, Paolo Bonzini, Kirill A. Shutemov, Palle Lyckegaard Thanks, applied. On Wed, Jan 6, 2010 at 7:24 PM, Andreas Färber <andreas.faerber@web.de> wrote: > From: Andreas Färber <afaerber@opensolaris.org> > > Juan has contributed a cool Makefile infrastructure that enables us to drop > static libraries completely: > > Move shared obj-y definitions to Makefile.objs, prefixed {common-,hw-,user-}, > and link those object files directly into the executables. > > Replace HWLIB by HWDIR, specifying only the directory. > > Drop --whole-archive and ARLIBS in Makefiles and configure. > > Drop GENERATED_HEADERS dependency in rules.mak, since this rebuilds all > common objects after generating a target-specific header; add dependency > rules to Makefile and Makefile.target instead. > > v2: > - Don't try to include /config.mak for user emulators > - Changes to user object paths ("Quickfix for libuser.a drop") were obsoleted > by "user_only: compile everything with -fpie" (Kirill A. Shutemov) > > v3: > - Fix dependency modelling for tools > - Remove comment on GENERATED_HEADERS obsoleted by this patch > > Signed-off-by: Andreas Färber <afaerber@opensolaris.org> > Cc: Blue Swirl <blauwirbel@gmail.com> > Cc: Palle Lyckegaard <palle@lyckegaard.dk> > Cc: Ben Taylor <bentaylor.solx86@gmail.com> > Cc: Juan Quintela <quintela@trasno.org> > Cc: Kirill A. Shutemov <kirill@shutemov.name> > Cc: Paolo Bonzini <pbonzini@redhat.com> > --- > Makefile | 138 +++++------------------------------------------- > Makefile.hw | 33 +----------- > Makefile.objs | 155 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ > Makefile.target | 33 +++++++++--- > Makefile.user | 9 +--- > configure | 34 +------------ > rules.mak | 4 +- > 7 files changed, 202 insertions(+), 204 deletions(-) > create mode 100644 Makefile.objs > > diff --git a/Makefile b/Makefile > index c1fa08c..2ca341b 100644 > --- a/Makefile > +++ b/Makefile > @@ -1,6 +1,5 @@ > # Makefile for QEMU. > > -# This needs to be defined before rules.mak > GENERATED_HEADERS = config-host.h > > ifneq ($(wildcard config-host.mak),) > @@ -66,7 +65,10 @@ SUBDIR_RULES=$(patsubst %,subdir-%, $(TARGET_DIRS)) > subdir-%: $(GENERATED_HEADERS) > $(call quiet-command,$(MAKE) $(SUBDIR_MAKEFLAGS) -C $* V="$(V)" TARGET_DIR="$*/" all,) > > -$(filter %-softmmu,$(SUBDIR_RULES)): libqemu_common.a > +include $(SRC_PATH)/Makefile.objs > + > +$(common-obj-y): $(GENERATED_HEADERS) > +$(filter %-softmmu,$(SUBDIR_RULES)): $(common-obj-y) > > $(filter %-user,$(SUBDIR_RULES)): libuser.a > > @@ -81,124 +83,8 @@ ALL_SUBDIRS=$(TARGET_DIRS) $(patsubst %,pc-bios/%, $(ROMS)) > > recurse-all: $(SUBDIR_RULES) $(ROMSUBDIR_RULES) > > -####################################################################### > -# QObject > -qobject-obj-y = qint.o qstring.o qdict.o qlist.o qfloat.o qbool.o > -qobject-obj-y += qjson.o json-lexer.o json-streamer.o json-parser.o > -qobject-obj-y += qerror.o > - > -####################################################################### > -# block-obj-y is code used by both qemu system emulation and qemu-img > - > -block-obj-y = cutils.o cache-utils.o qemu-malloc.o qemu-option.o module.o > -block-obj-y += nbd.o block.o aio.o aes.o osdep.o > -block-obj-$(CONFIG_POSIX) += posix-aio-compat.o > -block-obj-$(CONFIG_LINUX_AIO) += linux-aio.o > - > -block-nested-y += cow.o qcow.o vdi.o vmdk.o cloop.o dmg.o bochs.o vpc.o vvfat.o > -block-nested-y += qcow2.o qcow2-refcount.o qcow2-cluster.o qcow2-snapshot.o > -block-nested-y += parallels.o nbd.o > -block-nested-$(CONFIG_WIN32) += raw-win32.o > -block-nested-$(CONFIG_POSIX) += raw-posix.o > -block-nested-$(CONFIG_CURL) += curl.o > - > -block-obj-y += $(addprefix block/, $(block-nested-y)) > - > -net-obj-y = net.o > -net-nested-y = queue.o checksum.o util.o > -net-nested-y += socket.o > -net-nested-y += dump.o > -net-nested-$(CONFIG_POSIX) += tap.o > -net-nested-$(CONFIG_LINUX) += tap-linux.o > -net-nested-$(CONFIG_WIN32) += tap-win32.o > -net-nested-$(CONFIG_BSD) += tap-bsd.o > -net-nested-$(CONFIG_SOLARIS) += tap-solaris.o > -net-nested-$(CONFIG_AIX) += tap-aix.o > -net-nested-$(CONFIG_SLIRP) += slirp.o > -net-nested-$(CONFIG_VDE) += vde.o > -net-obj-y += $(addprefix net/, $(net-nested-y)) > - > -###################################################################### > -# libqemu_common.a: Target independent part of system emulation. The > -# long term path is to suppress *all* target specific code in case of > -# system emulation, i.e. a single QEMU executable should support all > -# CPUs and machines. > - > -obj-y = $(block-obj-y) > -obj-y += $(net-obj-y) > -obj-y += $(qobject-obj-y) > -obj-y += readline.o console.o > - > -obj-y += tcg-runtime.o host-utils.o > -obj-y += irq.o ioport.o > -obj-$(CONFIG_PTIMER) += ptimer.o > -obj-$(CONFIG_MAX7310) += max7310.o > -obj-$(CONFIG_WM8750) += wm8750.o > -obj-$(CONFIG_TWL92230) += twl92230.o > -obj-$(CONFIG_TSC2005) += tsc2005.o > -obj-$(CONFIG_LM832X) += lm832x.o > -obj-$(CONFIG_TMP105) += tmp105.o > -obj-$(CONFIG_STELLARIS_INPUT) += stellaris_input.o > -obj-$(CONFIG_SSD0303) += ssd0303.o > -obj-$(CONFIG_SSD0323) += ssd0323.o > -obj-$(CONFIG_ADS7846) += ads7846.o > -obj-$(CONFIG_MAX111X) += max111x.o > -obj-$(CONFIG_DS1338) += ds1338.o > -obj-y += i2c.o smbus.o smbus_eeprom.o > -obj-y += eeprom93xx.o > -obj-y += scsi-disk.o cdrom.o > -obj-y += scsi-generic.o scsi-bus.o > -obj-y += usb.o usb-hub.o usb-$(HOST_USB).o usb-hid.o usb-msd.o usb-wacom.o > -obj-y += usb-serial.o usb-net.o usb-bus.o > -obj-$(CONFIG_SSI) += ssi.o > -obj-$(CONFIG_SSI_SD) += ssi-sd.o > -obj-$(CONFIG_SD) += sd.o > -obj-y += bt.o bt-host.o bt-vhci.o bt-l2cap.o bt-sdp.o bt-hci.o bt-hid.o usb-bt.o > -obj-y += bt-hci-csr.o > -obj-y += buffered_file.o migration.o migration-tcp.o qemu-sockets.o > -obj-y += qemu-char.o aio.o savevm.o > -obj-y += msmouse.o ps2.o > -obj-y += qdev.o qdev-properties.o > -obj-y += qemu-config.o block-migration.o > - > -obj-$(CONFIG_BRLAPI) += baum.o > -obj-$(CONFIG_POSIX) += migration-exec.o migration-unix.o migration-fd.o > - > audio/audio.o audio/fmodaudio.o: QEMU_CFLAGS += $(FMOD_CFLAGS) > > -audio-obj-y = audio.o noaudio.o wavaudio.o mixeng.o > -audio-obj-$(CONFIG_SDL) += sdlaudio.o > -audio-obj-$(CONFIG_OSS) += ossaudio.o > -audio-obj-$(CONFIG_COREAUDIO) += coreaudio.o > -audio-obj-$(CONFIG_ALSA) += alsaaudio.o > -audio-obj-$(CONFIG_DSOUND) += dsoundaudio.o > -audio-obj-$(CONFIG_FMOD) += fmodaudio.o > -audio-obj-$(CONFIG_ESD) += esdaudio.o > -audio-obj-$(CONFIG_PA) += paaudio.o > -audio-obj-$(CONFIG_WINWAVE) += winwaveaudio.o > -audio-obj-$(CONFIG_AUDIO_PT_INT) += audio_pt_int.o > -audio-obj-$(CONFIG_AUDIO_WIN_INT) += audio_win_int.o > -audio-obj-y += wavcapture.o > -obj-y += $(addprefix audio/, $(audio-obj-y)) > - > -obj-y += keymaps.o > -obj-$(CONFIG_SDL) += sdl.o sdl_zoom.o x_keymap.o > -obj-$(CONFIG_CURSES) += curses.o > -obj-y += vnc.o acl.o d3des.o > -obj-$(CONFIG_VNC_TLS) += vnc-tls.o vnc-auth-vencrypt.o > -obj-$(CONFIG_VNC_SASL) += vnc-auth-sasl.o > -obj-$(CONFIG_COCOA) += cocoa.o > -obj-$(CONFIG_IOTHREAD) += qemu-thread.o > - > -slirp-obj-y = cksum.o if.o ip_icmp.o ip_input.o ip_output.o > -slirp-obj-y += slirp.o mbuf.o misc.o sbuf.o socket.o tcp_input.o tcp_output.o > -slirp-obj-y += tcp_subr.o tcp_timer.o udp.o bootp.o tftp.o > -obj-$(CONFIG_SLIRP) += $(addprefix slirp/, $(slirp-obj-y)) > - > -# xen backend driver support > -obj-$(CONFIG_XEN) += xen_backend.o xen_devconfig.o > -obj-$(CONFIG_XEN) += xen_console.o xenfb.o xen_disk.o xen_nic.o > - > QEMU_CFLAGS+=$(CURL_CFLAGS) > > cocoa.o: cocoa.m > @@ -229,17 +115,23 @@ curses.o: curses.c keymaps.h curses_keys.h > > bt-host.o: QEMU_CFLAGS += $(BLUEZ_CFLAGS) > > -libqemu_common.a: $(obj-y) > - > ###################################################################### > > qemu-img.o: qemu-img-cmds.h > > -qemu-img$(EXESUF): qemu-img.o qemu-tool.o $(block-obj-y) $(qobject-obj-y) > +obj-y = qemu-img.o qemu-tool.o $(block-obj-y) $(qobject-obj-y) > + > +qemu-img$(EXESUF): $(obj-y) > + > +obj-y = qemu-nbd.o qemu-tool.o $(block-obj-y) $(qobject-obj-y) > +$(obj-y): $(GENERATED_HEADERS) > + > +qemu-nbd$(EXESUF): $(obj-y) > > -qemu-nbd$(EXESUF): qemu-nbd.o qemu-tool.o $(block-obj-y) $(qobject-obj-y) > +obj-y = qemu-io.o qemu-tool.o cmd.o $(block-obj-y) $(qobject-obj-y) > +$(obj-y): $(GENERATED_HEADERS) > > -qemu-io$(EXESUF): qemu-io.o qemu-tool.o cmd.o $(block-obj-y) $(qobject-obj-y) > +qemu-io$(EXESUF): $(obj-y) > > qemu-img-cmds.h: $(SRC_PATH)/qemu-img-cmds.hx > $(call quiet-command,sh $(SRC_PATH)/hxtool -h < $< > $@," GEN $@") > diff --git a/Makefile.hw b/Makefile.hw > index bd252f5..ff87ae4 100644 > --- a/Makefile.hw > +++ b/Makefile.hw > @@ -11,41 +11,12 @@ VPATH=$(SRC_PATH):$(SRC_PATH)/hw > > QEMU_CFLAGS+=-I.. -I$(SRC_PATH)/fpu > > -obj-y = > -obj-y += loader.o > -obj-y += virtio.o > -obj-y += fw_cfg.o > -obj-y += watchdog.o > -obj-$(CONFIG_ECC) += ecc.o > -obj-$(CONFIG_NAND) += nand.o > +include $(SRC_PATH)/Makefile.objs > > -obj-$(CONFIG_M48T59) += m48t59.o > -obj-$(CONFIG_ESCC) += escc.o > - > -# PCI watchdog devices > -obj-y += wdt_i6300esb.o > - > -obj-y += msix.o > - > -# PCI network cards > -obj-y += ne2000.o > - > -obj-$(CONFIG_SMC91C111) += smc91c111.o > -obj-$(CONFIG_LAN9118) += lan9118.o > - > -# SCSI layer > -obj-y += lsi53c895a.o > -obj-$(CONFIG_ESP) += esp.o > - > -obj-y += dma-helpers.o sysbus.o isa-bus.o > -obj-$(CONFIG_QDEV_ADDR) += qdev-addr.o > - > -all: $(HWLIB) > +all: $(hw-obj-y) > # Dummy command so that make thinks it has done something > @true > > -$(HWLIB): $(obj-y) > - > clean: > rm -f *.o *.d *.a *~ > > diff --git a/Makefile.objs b/Makefile.objs > new file mode 100644 > index 0000000..e8a44d7 > --- /dev/null > +++ b/Makefile.objs > @@ -0,0 +1,155 @@ > +####################################################################### > +# QObject > +qobject-obj-y = qint.o qstring.o qdict.o qlist.o qfloat.o qbool.o > +qobject-obj-y += qjson.o json-lexer.o json-streamer.o json-parser.o > +qobject-obj-y += qerror.o > + > +####################################################################### > +# block-obj-y is code used by both qemu system emulation and qemu-img > + > +block-obj-y = cutils.o cache-utils.o qemu-malloc.o qemu-option.o module.o > +block-obj-y += nbd.o block.o aio.o aes.o osdep.o > +block-obj-$(CONFIG_POSIX) += posix-aio-compat.o > +block-obj-$(CONFIG_LINUX_AIO) += linux-aio.o > + > +block-nested-y += cow.o qcow.o vdi.o vmdk.o cloop.o dmg.o bochs.o vpc.o vvfat.o > +block-nested-y += qcow2.o qcow2-refcount.o qcow2-cluster.o qcow2-snapshot.o > +block-nested-y += parallels.o nbd.o > +block-nested-$(CONFIG_WIN32) += raw-win32.o > +block-nested-$(CONFIG_POSIX) += raw-posix.o > +block-nested-$(CONFIG_CURL) += curl.o > + > +block-obj-y += $(addprefix block/, $(block-nested-y)) > + > +net-obj-y = net.o > +net-nested-y = queue.o checksum.o util.o > +net-nested-y += socket.o > +net-nested-y += dump.o > +net-nested-$(CONFIG_POSIX) += tap.o > +net-nested-$(CONFIG_LINUX) += tap-linux.o > +net-nested-$(CONFIG_WIN32) += tap-win32.o > +net-nested-$(CONFIG_BSD) += tap-bsd.o > +net-nested-$(CONFIG_SOLARIS) += tap-solaris.o > +net-nested-$(CONFIG_AIX) += tap-aix.o > +net-nested-$(CONFIG_SLIRP) += slirp.o > +net-nested-$(CONFIG_VDE) += vde.o > +net-obj-y += $(addprefix net/, $(net-nested-y)) > + > +###################################################################### > +# libqemu_common.a: Target independent part of system emulation. The > +# long term path is to suppress *all* target specific code in case of > +# system emulation, i.e. a single QEMU executable should support all > +# CPUs and machines. > + > +common-obj-y = $(block-obj-y) > +common-obj-y += $(net-obj-y) > +common-obj-y += $(qobject-obj-y) > +common-obj-y += readline.o console.o > + > +common-obj-y += tcg-runtime.o host-utils.o > +common-obj-y += irq.o ioport.o > +common-obj-$(CONFIG_PTIMER) += ptimer.o > +common-obj-$(CONFIG_MAX7310) += max7310.o > +common-obj-$(CONFIG_WM8750) += wm8750.o > +common-obj-$(CONFIG_TWL92230) += twl92230.o > +common-obj-$(CONFIG_TSC2005) += tsc2005.o > +common-obj-$(CONFIG_LM832X) += lm832x.o > +common-obj-$(CONFIG_TMP105) += tmp105.o > +common-obj-$(CONFIG_STELLARIS_INPUT) += stellaris_input.o > +common-obj-$(CONFIG_SSD0303) += ssd0303.o > +common-obj-$(CONFIG_SSD0323) += ssd0323.o > +common-obj-$(CONFIG_ADS7846) += ads7846.o > +common-obj-$(CONFIG_MAX111X) += max111x.o > +common-obj-$(CONFIG_DS1338) += ds1338.o > +common-obj-y += i2c.o smbus.o smbus_eeprom.o > +common-obj-y += eeprom93xx.o > +common-obj-y += scsi-disk.o cdrom.o > +common-obj-y += scsi-generic.o scsi-bus.o > +common-obj-y += usb.o usb-hub.o usb-$(HOST_USB).o usb-hid.o usb-msd.o usb-wacom.o > +common-obj-y += usb-serial.o usb-net.o usb-bus.o > +common-obj-$(CONFIG_SSI) += ssi.o > +common-obj-$(CONFIG_SSI_SD) += ssi-sd.o > +common-obj-$(CONFIG_SD) += sd.o > +common-obj-y += bt.o bt-host.o bt-vhci.o bt-l2cap.o bt-sdp.o bt-hci.o bt-hid.o usb-bt.o > +common-obj-y += bt-hci-csr.o > +common-obj-y += buffered_file.o migration.o migration-tcp.o qemu-sockets.o > +common-obj-y += qemu-char.o savevm.o #aio.o > +common-obj-y += msmouse.o ps2.o > +common-obj-y += qdev.o qdev-properties.o > +common-obj-y += qemu-config.o block-migration.o > + > +common-obj-$(CONFIG_BRLAPI) += baum.o > +common-obj-$(CONFIG_POSIX) += migration-exec.o migration-unix.o migration-fd.o > + > +audio-obj-y = audio.o noaudio.o wavaudio.o mixeng.o > +audio-obj-$(CONFIG_SDL) += sdlaudio.o > +audio-obj-$(CONFIG_OSS) += ossaudio.o > +audio-obj-$(CONFIG_COREAUDIO) += coreaudio.o > +audio-obj-$(CONFIG_ALSA) += alsaaudio.o > +audio-obj-$(CONFIG_DSOUND) += dsoundaudio.o > +audio-obj-$(CONFIG_FMOD) += fmodaudio.o > +audio-obj-$(CONFIG_ESD) += esdaudio.o > +audio-obj-$(CONFIG_PA) += paaudio.o > +audio-obj-$(CONFIG_WINWAVE) += winwaveaudio.o > +audio-obj-$(CONFIG_AUDIO_PT_INT) += audio_pt_int.o > +audio-obj-$(CONFIG_AUDIO_WIN_INT) += audio_win_int.o > +audio-obj-y += wavcapture.o > +common-obj-y += $(addprefix audio/, $(audio-obj-y)) > + > +common-obj-y += keymaps.o > +common-obj-$(CONFIG_SDL) += sdl.o sdl_zoom.o x_keymap.o > +common-obj-$(CONFIG_CURSES) += curses.o > +common-obj-y += vnc.o acl.o d3des.o > +common-obj-$(CONFIG_VNC_TLS) += vnc-tls.o vnc-auth-vencrypt.o > +common-obj-$(CONFIG_VNC_SASL) += vnc-auth-sasl.o > +common-obj-$(CONFIG_COCOA) += cocoa.o > +common-obj-$(CONFIG_IOTHREAD) += qemu-thread.o > + > +slirp-obj-y = cksum.o if.o ip_icmp.o ip_input.o ip_output.o > +slirp-obj-y += slirp.o mbuf.o misc.o sbuf.o socket.o tcp_input.o tcp_output.o > +slirp-obj-y += tcp_subr.o tcp_timer.o udp.o bootp.o tftp.o > +common-obj-$(CONFIG_SLIRP) += $(addprefix slirp/, $(slirp-obj-y)) > + > +# xen backend driver support > +common-obj-$(CONFIG_XEN) += xen_backend.o xen_devconfig.o > +common-obj-$(CONFIG_XEN) += xen_console.o xenfb.o xen_disk.o xen_nic.o > + > +###################################################################### > +# libuser > + > +user-obj-y = > +user-obj-y += envlist.o path.o > +user-obj-y += tcg-runtime.o host-utils.o > +user-obj-y += cutils.o cache-utils.o > + > +###################################################################### > +# libhw > + > +hw-obj-y = > +hw-obj-y += loader.o > +hw-obj-y += virtio.o > +hw-obj-y += fw_cfg.o > +hw-obj-y += watchdog.o > +hw-obj-$(CONFIG_ECC) += ecc.o > +hw-obj-$(CONFIG_NAND) += nand.o > + > +hw-obj-$(CONFIG_M48T59) += m48t59.o > +hw-obj-$(CONFIG_ESCC) += escc.o > + > +# PCI watchdog devices > +hw-obj-y += wdt_i6300esb.o > + > +hw-obj-y += msix.o > + > +# PCI network cards > +hw-obj-y += ne2000.o > + > +hw-obj-$(CONFIG_SMC91C111) += smc91c111.o > +hw-obj-$(CONFIG_LAN9118) += lan9118.o > + > +# SCSI layer > +hw-obj-y += lsi53c895a.o > +hw-obj-$(CONFIG_ESP) += esp.o > + > +hw-obj-y += dma-helpers.o sysbus.o isa-bus.o > +hw-obj-$(CONFIG_QDEV_ADDR) += qdev-addr.o > diff --git a/Makefile.target b/Makefile.target > index 7c1f30c..543e8cd 100644 > --- a/Makefile.target > +++ b/Makefile.target > @@ -1,17 +1,21 @@ > # -*- Mode: makefile -*- > > -# This needs to be defined before rules.mak > GENERATED_HEADERS = config-target.h > > include ../config-host.mak > include config-devices.mak > include config-target.mak > include $(SRC_PATH)/rules.mak > +ifneq ($(HWDIR),) > +include $(HWDIR)/config.mak > +endif > > TARGET_PATH=$(SRC_PATH)/target-$(TARGET_BASE_ARCH) > VPATH=$(SRC_PATH):$(TARGET_PATH):$(SRC_PATH)/hw > QEMU_CFLAGS+= -I.. -I$(TARGET_PATH) -DNEED_CPU_H > > +include $(SRC_PATH)/Makefile.objs > + > ifdef CONFIG_USER_ONLY > # user emulator name > QEMU_PROG=qemu-$(TARGET_ARCH2) > @@ -64,9 +68,9 @@ libobj-$(CONFIG_S390_DIS) += s390-dis.o > libobj-$(CONFIG_SH4_DIS) += sh4-dis.o > libobj-$(CONFIG_SPARC_DIS) += sparc-dis.o > > -# libqemu > +$(libobj-y): $(GENERATED_HEADERS) > > -libqemu.a: $(libobj-y) > +# libqemu > > translate.o: translate.c cpu.h > > @@ -106,7 +110,10 @@ obj-arm-y += arm-semi.o > > obj-m68k-y += m68k-sim.o m68k-semi.o > > -ARLIBS=../libuser/libuser.a libqemu.a > +$(obj-y) $(obj-$(TARGET_BASE_ARCH)-y): $(GENERATED_HEADERS) > + > +obj-y += $(addprefix ../libuser/, $(user-obj-y)) > +obj-y += $(libobj-y) > > endif #CONFIG_LINUX_USER > > @@ -128,7 +135,10 @@ obj-y = main.o commpage.o machload.o mmap.o signal.o syscall.o thunk.o \ > > obj-i386-y += ioport-user.o > > -ARLIBS=../libuser/libuser.a libqemu.a > +$(obj-y) $(obj-$(TARGET_BASE_ARCH)-y): $(GENERATED_HEADERS) > + > +obj-y += $(addprefix ../libuser/, $(user-obj-y)) > +obj-y += $(libobj-y) > > endif #CONFIG_DARWIN_USER > > @@ -145,7 +155,10 @@ obj-y = main.o bsdload.o elfload.o mmap.o signal.o strace.o syscall.o \ > > obj-i386-y += ioport-user.o > > -ARLIBS=../libuser/libuser.a libqemu.a > +$(obj-y) $(obj-$(TARGET_BASE_ARCH)-y): $(GENERATED_HEADERS) > + > +obj-y += $(addprefix ../libuser/, $(user-obj-y)) > +obj-y += $(libobj-y) > > endif #CONFIG_BSD_USER > > @@ -303,13 +316,17 @@ vl.o: qemu-options.h > > monitor.o: qemu-monitor.h > > -ARLIBS=../libqemu_common.a libqemu.a $(HWLIB) > +$(obj-y) $(obj-$(TARGET_BASE_ARCH)-y): $(GENERATED_HEADERS) > + > +obj-y += $(addprefix ../, $(common-obj-y)) > +obj-y += $(libobj-y) > +obj-y += $(addprefix $(HWDIR)/, $(hw-obj-y)) > > endif # CONFIG_SOFTMMU > > obj-$(CONFIG_GDBSTUB_XML) += gdbstub-xml.o > > -$(QEMU_PROG): $(obj-y) $(obj-$(TARGET_BASE_ARCH)-y) $(ARLIBS) > +$(QEMU_PROG): $(obj-y) $(obj-$(TARGET_BASE_ARCH)-y) > $(call LINK,$(obj-y) $(obj-$(TARGET_BASE_ARCH)-y)) > > > diff --git a/Makefile.user b/Makefile.user > index 7daedef..c6ac509 100644 > --- a/Makefile.user > +++ b/Makefile.user > @@ -14,17 +14,12 @@ vpath %.c %.h $(SRC_PATH) > > QEMU_CFLAGS+=-I.. > > -obj-y = > -obj-y += envlist.o path.o > -obj-y += tcg-runtime.o host-utils.o > -obj-y += cutils.o cache-utils.o > +include $(SRC_PATH)/Makefile.objs > > -all: libuser.a > +all: $(user-obj-y) > # Dummy command so that make thinks it has done something > @true > > -libuser.a: $(obj-y) > - > clean: > rm -f *.o *.d *.a *~ > > diff --git a/configure b/configure > index 18aed43..1e9dd04 100755 > --- a/configure > +++ b/configure > @@ -1707,37 +1707,6 @@ elif compile_prog "" "-lrt" ; then > LIBS="-lrt $LIBS" > fi > > -# Determine what linker flags to use to force archive inclusion > -check_linker_flags() > -{ > - w2= > - if test "$2" ; then > - w2=-Wl,$2 > - fi > - compile_prog "" "-Wl,$1 ${w2}" > -} > - > -cat > $TMPC << EOF > -int main(void) { } > -EOF > -if check_linker_flags --whole-archive --no-whole-archive ; then > - # GNU ld > - arlibs_begin="-Wl,--whole-archive" > - arlibs_end="-Wl,--no-whole-archive" > -elif check_linker_flags -z,allextract -z,defaultextract ; then > - # Solaris ld > - arlibs_begin="-Wl,-z,allextract" > - arlibs_end="-Wl,-z,defaultextract" > -elif check_linker_flags -all_load ; then > - # Mac OS X > - arlibs_begin="-all_load" > - arlibs_end="" > -else > - echo "Error: your linker does not support --whole-archive or -z." > - echo "Please report to qemu-devel@nongnu.org" > - exit 1 > -fi > - > if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \ > "$aix" != "yes" ; then > libs_softmmu="-lutil $libs_softmmu" > @@ -2427,7 +2396,7 @@ fi > if test "$target_softmmu" = "yes" ; then > echo "CONFIG_SOFTMMU=y" >> $config_target_mak > echo "LIBS+=$libs_softmmu" >> $config_target_mak > - echo "HWLIB=../libhw$target_phys_bits/libqemuhw$target_phys_bits.a" >> $config_target_mak > + echo "HWDIR=../libhw$target_phys_bits" >> $config_target_mak > echo "subdir-$target: subdir-libhw$target_phys_bits" >> $config_host_mak > fi > if test "$target_user_only" = "yes" ; then > @@ -2644,7 +2613,6 @@ for hwlib in 32 64; do > mkdir -p $d > rm -f $d/Makefile > ln -s $source_path/Makefile.hw $d/Makefile > - echo "HWLIB=libqemuhw$hwlib.a" > $d/config.mak > echo "QEMU_CFLAGS+=-DTARGET_PHYS_ADDR_BITS=$hwlib" >> $d/config.mak > done > > diff --git a/rules.mak b/rules.mak > index 5d9f684..9bcf9af 100644 > --- a/rules.mak > +++ b/rules.mak > @@ -14,7 +14,7 @@ MAKEFLAGS += -rR > # Flags for dependency generation > QEMU_DGFLAGS += -MMD -MP -MT $@ > > -%.o: %.c $(GENERATED_HEADERS) > +%.o: %.c > $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<," CC $(TARGET_DIR)$@") > > %.o: %.S > @@ -23,7 +23,7 @@ QEMU_DGFLAGS += -MMD -MP -MT $@ > %.o: %.m > $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) -c -o $@ $<," OBJC $(TARGET_DIR)$@") > > -LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(1) $(ARLIBS_BEGIN) $(ARLIBS) $(ARLIBS_END) $(LIBS)," LINK $(TARGET_DIR)$@") > +LINK = $(call quiet-command,$(CC) $(QEMU_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $(1) $(LIBS)," LINK $(TARGET_DIR)$@") > > %$(EXESUF): %.o > $(call LINK,$^) > -- > 1.6.5.3 > > ^ permalink raw reply [flat|nested] 16+ messages in thread
* [Qemu-devel] QEMU license problem (was [PATCH v3] Drop --whole-archive and static libraries) 2010-01-07 18:10 ` [Qemu-devel] " Blue Swirl @ 2010-03-06 11:33 ` Stefan Weil 2010-03-07 13:53 ` Anthony Liguori 2010-03-07 16:47 ` [Qemu-devel] " Juan Quintela 0 siblings, 2 replies; 16+ messages in thread From: Stefan Weil @ 2010-03-06 11:33 UTC (permalink / raw) To: Blue Swirl Cc: qemu-devel, Andreas Färber, Juan Quintela, Kirill A. Shutemov, Paolo Bonzini, Palle Lyckegaard Blue Swirl schrieb: > Thanks, applied. > > > On Wed, Jan 6, 2010 at 7:24 PM, Andreas Färber > <andreas.faerber@web.de> wrote: >> From: Andreas Färber <afaerber@opensolaris.org> >> >> Juan has contributed a cool Makefile infrastructure that enables us >> to drop >> static libraries completely: >> >> Move shared obj-y definitions to Makefile.objs, prefixed >> {common-,hw-,user-}, >> and link those object files directly into the executables. >> >> Replace HWLIB by HWDIR, specifying only the directory. >> >> Drop --whole-archive and ARLIBS in Makefiles and configure. >> >> Drop GENERATED_HEADERS dependency in rules.mak, since this rebuilds all >> common objects after generating a target-specific header; add dependency >> rules to Makefile and Makefile.target instead. >> >> v2: >> - Don't try to include /config.mak for user emulators >> - Changes to user object paths ("Quickfix for libuser.a drop") were >> obsoleted >> by "user_only: compile everything with -fpie" (Kirill A. Shutemov) >> >> v3: >> - Fix dependency modelling for tools >> - Remove comment on GENERATED_HEADERS obsoleted by this patch >> >> Signed-off-by: Andreas Färber <afaerber@opensolaris.org> >> Cc: Blue Swirl <blauwirbel@gmail.com> >> Cc: Palle Lyckegaard <palle@lyckegaard.dk> >> Cc: Ben Taylor <bentaylor.solx86@gmail.com> >> Cc: Juan Quintela <quintela@trasno.org> >> Cc: Kirill A. Shutemov <kirill@shutemov.name> >> Cc: Paolo Bonzini <pbonzini@redhat.com> >> --- >> Makefile | 138 +++++------------------------------------------- >> Makefile.hw | 33 +----------- >> Makefile.objs | 155 >> +++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> Makefile.target | 33 +++++++++--- >> Makefile.user | 9 +--- >> configure | 34 +------------ >> rules.mak | 4 +- >> 7 files changed, 202 insertions(+), 204 deletions(-) >> create mode 100644 Makefile.objs >> Removing libqemu.a was technically ok, but throws a license problem: "In particular, the QEMU virtual CPU core library (libqemu.a) is released under the GNU Lesser General Public License." Without libqemu.a, this part of QEMU's license no longer works. I think the best solution would be to add a rule for libqemu.a which allows users to build this static library (make libqemu.a). libqemu.a is also still needed for tests/qruncom. Regards, Stefan Weil ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [Qemu-devel] QEMU license problem (was [PATCH v3] Drop --whole-archive and static libraries) 2010-03-06 11:33 ` [Qemu-devel] QEMU license problem (was [PATCH v3] Drop --whole-archive and static libraries) Stefan Weil @ 2010-03-07 13:53 ` Anthony Liguori 2010-03-07 15:24 ` Laurent Desnogues 2010-03-07 16:47 ` [Qemu-devel] " Juan Quintela 1 sibling, 1 reply; 16+ messages in thread From: Anthony Liguori @ 2010-03-07 13:53 UTC (permalink / raw) To: Stefan Weil Cc: qemu-devel, Blue Swirl, Andreas Färber, Juan Quintela, Paolo Bonzini, Kirill A. Shutemov, Palle Lyckegaard On 03/06/2010 05:33 AM, Stefan Weil wrote: > Blue Swirl schrieb: > >> Thanks, applied. >> >> >> On Wed, Jan 6, 2010 at 7:24 PM, Andreas Färber >> <andreas.faerber@web.de> wrote: >> >>> From: Andreas Färber<afaerber@opensolaris.org> >>> >>> Juan has contributed a cool Makefile infrastructure that enables us >>> to drop >>> static libraries completely: >>> >>> Move shared obj-y definitions to Makefile.objs, prefixed >>> {common-,hw-,user-}, >>> and link those object files directly into the executables. >>> >>> Replace HWLIB by HWDIR, specifying only the directory. >>> >>> Drop --whole-archive and ARLIBS in Makefiles and configure. >>> >>> Drop GENERATED_HEADERS dependency in rules.mak, since this rebuilds all >>> common objects after generating a target-specific header; add dependency >>> rules to Makefile and Makefile.target instead. >>> >>> v2: >>> - Don't try to include /config.mak for user emulators >>> - Changes to user object paths ("Quickfix for libuser.a drop") were >>> obsoleted >>> by "user_only: compile everything with -fpie" (Kirill A. Shutemov) >>> >>> v3: >>> - Fix dependency modelling for tools >>> - Remove comment on GENERATED_HEADERS obsoleted by this patch >>> >>> Signed-off-by: Andreas Färber<afaerber@opensolaris.org> >>> Cc: Blue Swirl<blauwirbel@gmail.com> >>> Cc: Palle Lyckegaard<palle@lyckegaard.dk> >>> Cc: Ben Taylor<bentaylor.solx86@gmail.com> >>> Cc: Juan Quintela<quintela@trasno.org> >>> Cc: Kirill A. Shutemov<kirill@shutemov.name> >>> Cc: Paolo Bonzini<pbonzini@redhat.com> >>> --- >>> Makefile | 138 +++++------------------------------------------- >>> Makefile.hw | 33 +----------- >>> Makefile.objs | 155 >>> +++++++++++++++++++++++++++++++++++++++++++++++++++++++ >>> Makefile.target | 33 +++++++++--- >>> Makefile.user | 9 +--- >>> configure | 34 +------------ >>> rules.mak | 4 +- >>> 7 files changed, 202 insertions(+), 204 deletions(-) >>> create mode 100644 Makefile.objs >>> >>> > Removing libqemu.a was technically ok, but throws a license problem: > Every file contains a copyright/license. The statement in the top level is just a statement of intention. It's to make sure that people do not introduce GPL'd code into libqemu.a. Regards, Anthony Liguori ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [Qemu-devel] QEMU license problem (was [PATCH v3] Drop --whole-archive and static libraries) 2010-03-07 13:53 ` Anthony Liguori @ 2010-03-07 15:24 ` Laurent Desnogues 0 siblings, 0 replies; 16+ messages in thread From: Laurent Desnogues @ 2010-03-07 15:24 UTC (permalink / raw) To: Anthony Liguori Cc: qemu-devel, Blue Swirl, Andreas Färber, Juan Quintela, Kirill A. Shutemov, Paolo Bonzini, Palle Lyckegaard On Sun, Mar 7, 2010 at 2:53 PM, Anthony Liguori <anthony@codemonkey.ws> wrote: [...] >> >> Removing libqemu.a was technically ok, but throws a license problem: >> > > Every file contains a copyright/license. The statement in the top level is > just a statement of intention. It's to make sure that people do not > introduce GPL'd code into libqemu.a. ./configure --target-list=i386-linux-user,i386-softmmu make -j7 And: find . -name 'lib*a' finds nothing, so how can you say what is supposed to be in libqemu? Laurent ^ permalink raw reply [flat|nested] 16+ messages in thread
* [Qemu-devel] Re: QEMU license problem (was [PATCH v3] Drop --whole-archive and static libraries) 2010-03-06 11:33 ` [Qemu-devel] QEMU license problem (was [PATCH v3] Drop --whole-archive and static libraries) Stefan Weil 2010-03-07 13:53 ` Anthony Liguori @ 2010-03-07 16:47 ` Juan Quintela 2010-03-07 17:32 ` Andreas Färber 1 sibling, 1 reply; 16+ messages in thread From: Juan Quintela @ 2010-03-07 16:47 UTC (permalink / raw) To: Stefan Weil Cc: qemu-devel, Blue Swirl, Andreas Färber, Kirill A. Shutemov, Paolo Bonzini, Palle Lyckegaard Stefan Weil <weil@mail.berlios.de> wrote: > Blue Swirl schrieb: >> Thanks, applied. > > Removing libqemu.a was technically ok, but throws a license problem: > > "In particular, the QEMU virtual CPU core library (libqemu.a) is > released under the GNU Lesser General Public License." > > Without libqemu.a, this part of QEMU's license no longer works. > > I think the best solution would be to add a rule for libqemu.a > which allows users to build this static library (make libqemu.a). > > libqemu.a is also still needed for tests/qruncom. I noticed it also. Not sure how to go here. Create libqemu.a even if it is not used? >From LICENSE: In particular, the QEMU virtual CPU core library (libqemu.a) is released under the GNU Lesser General Public License. And if GPL licencse is complicated, LGPL for a static lib makes my head explode. Later, Juan. ^ permalink raw reply [flat|nested] 16+ messages in thread
* [Qemu-devel] Re: QEMU license problem (was [PATCH v3] Drop --whole-archive and static libraries) 2010-03-07 16:47 ` [Qemu-devel] " Juan Quintela @ 2010-03-07 17:32 ` Andreas Färber 2010-03-08 17:26 ` Anthony Liguori 0 siblings, 1 reply; 16+ messages in thread From: Andreas Färber @ 2010-03-07 17:32 UTC (permalink / raw) To: Juan Quintela Cc: qemu-devel, Blue Swirl, Paolo Bonzini, Kirill A. Shutemov, Palle Lyckegaard Am 07.03.2010 um 17:47 schrieb Juan Quintela: > Stefan Weil <weil@mail.berlios.de> wrote: >> Removing libqemu.a was technically ok, but throws a license problem: >> >> "In particular, the QEMU virtual CPU core library (libqemu.a) is >> released under the GNU Lesser General Public License." >> >> Without libqemu.a, this part of QEMU's license no longer works. >> >> I think the best solution would be to add a rule for libqemu.a >> which allows users to build this static library (make libqemu.a). >> >> libqemu.a is also still needed for tests/qruncom. > > I noticed it also. Not sure how to go here. Create libqemu.a even if > it is not used? > > > From LICENSE: > In particular, the QEMU virtual CPU core library (libqemu.a) is > released under the GNU Lesser General Public License. We've had a handful of people inquire about LGPL licensing on this list, getting no answer: They complained that libqemu.a contained GPL'ed code and none of you cared, so that would seem a moot point and we should rather fix the licensing passage. If libqemu.a is still used somewhere in the Makefiles, then obviously we have to fix it. Sorry if I missed something there. Not sure how to go about re-providing a library either, we could theoretically add a target using our new infrastructure and leave our own executables as they are now, but that would re-introduce the original problems for any user with an incompatible tool chain, not to mention that someone would need to test such a library target. Andreas ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [Qemu-devel] Re: QEMU license problem (was [PATCH v3] Drop --whole-archive and static libraries) 2010-03-07 17:32 ` Andreas Färber @ 2010-03-08 17:26 ` Anthony Liguori 0 siblings, 0 replies; 16+ messages in thread From: Anthony Liguori @ 2010-03-08 17:26 UTC (permalink / raw) To: Andreas Färber Cc: Juan Quintela, qemu-devel, Blue Swirl, Kirill A. Shutemov, Paolo Bonzini, Palle Lyckegaard On 03/07/2010 11:32 AM, Andreas Färber wrote: > > Am 07.03.2010 um 17:47 schrieb Juan Quintela: > >> Stefan Weil <weil@mail.berlios.de> wrote: >>> Removing libqemu.a was technically ok, but throws a license problem: >>> >>> "In particular, the QEMU virtual CPU core library (libqemu.a) is >>> released under the GNU Lesser General Public License." >>> >>> Without libqemu.a, this part of QEMU's license no longer works. >>> >>> I think the best solution would be to add a rule for libqemu.a >>> which allows users to build this static library (make libqemu.a). >>> >>> libqemu.a is also still needed for tests/qruncom. >> >> I noticed it also. Not sure how to go here. Create libqemu.a even if >> it is not used? >> >> >> From LICENSE: >> In particular, the QEMU virtual CPU core library (libqemu.a) is >> released under the GNU Lesser General Public License. > > We've had a handful of people inquire about LGPL licensing on this > list, getting no answer: They complained that libqemu.a contained > GPL'ed code and none of you cared, so that would seem a moot point and > we should rather fix the licensing passage. What we need to do is audit the code base for any file that doesn't carry an explicit copyright notice, and have the author(s) add explicit copyright/license statements to it. This top level file is not a valid copyright statement IMHO in particular because it deals with things like "libqemu.a" which is poorly defined. My understanding of LICENSE is that it is purely an explanation, not a licensing statement. It was added by Fabrice and it covers code in the tree that was there before he added it that he didn't hold the copyright on so it's not a very strong statement. It was his desire that libqemu.a be LGPL, that does not mean that it actually is... Regards, Anthony Liguori ^ permalink raw reply [flat|nested] 16+ messages in thread
* [Qemu-devel] Re: [PATCH v3] Drop --whole-archive and static libraries 2010-01-06 19:24 ` [Qemu-devel] [PATCH v3] " Andreas Färber 2010-01-07 18:10 ` [Qemu-devel] " Blue Swirl @ 2010-01-07 18:11 ` Palle Lyckegaard 1 sibling, 0 replies; 16+ messages in thread From: Palle Lyckegaard @ 2010-01-07 18:11 UTC (permalink / raw) To: Andreas Färber Cc: qemu-devel, Andreas Färber, Blue Swirl, Juan Quintela, Paolo Bonzini, Kirill A. Shutemov On Wed, 6 Jan 2010, Andreas F?rber wrote: > v3: > - Fix dependency modelling for tools > - Remove comment on GENERATED_HEADERS obsoleted by this patch > Hi, as the previous patches this v3 version solves the linking problems on Solaris hosts regards Palle ^ permalink raw reply [flat|nested] 16+ messages in thread
* [Qemu-devel] Re: [PATCH v2] Drop --whole-archive and static libraries [not found] <1262268274-1043-1-git-send-email-andreas.faerber@web.de> 2010-01-03 12:31 ` [Qemu-devel] [PATCH v2] Drop --whole-archive and static libraries Blue Swirl @ 2010-01-03 14:54 ` Palle Lyckegaard 1 sibling, 0 replies; 16+ messages in thread From: Palle Lyckegaard @ 2010-01-03 14:54 UTC (permalink / raw) To: Andreas Färber Cc: qemu-devel, Andreas Färber, Juan Quintela, Paolo Bonzini, Kirill A. Shutemov On Thu, 31 Dec 2009, Andreas F?rber wrote: > v2: > - Don't try to include /config.mak for user emulators > - Changes to user object paths ("Quickfix for libuser.a drop") were obsoleted > by "user_only: compile everything with -fpie" (Kirill A. Shutemov) > Hi, I have succesfully used the v2 patch on my OpenSolaris/SPARC host and it seems to fix the Solaris linking issue. /Palle ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2010-03-08 17:27 UTC | newest] Thread overview: 16+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <1262268274-1043-1-git-send-email-andreas.faerber@web.de> 2010-01-03 12:31 ` [Qemu-devel] [PATCH v2] Drop --whole-archive and static libraries Blue Swirl 2010-01-04 20:47 ` Blue Swirl 2010-01-06 18:51 ` Andreas Färber 2010-01-06 19:24 ` Blue Swirl 2010-01-06 19:53 ` Andreas Färber 2010-01-06 20:40 ` Blue Swirl 2010-01-06 19:24 ` [Qemu-devel] [PATCH v3] " Andreas Färber 2010-01-07 18:10 ` [Qemu-devel] " Blue Swirl 2010-03-06 11:33 ` [Qemu-devel] QEMU license problem (was [PATCH v3] Drop --whole-archive and static libraries) Stefan Weil 2010-03-07 13:53 ` Anthony Liguori 2010-03-07 15:24 ` Laurent Desnogues 2010-03-07 16:47 ` [Qemu-devel] " Juan Quintela 2010-03-07 17:32 ` Andreas Färber 2010-03-08 17:26 ` Anthony Liguori 2010-01-07 18:11 ` [Qemu-devel] Re: [PATCH v3] Drop --whole-archive and static libraries Palle Lyckegaard 2010-01-03 14:54 ` [Qemu-devel] Re: [PATCH v2] " Palle Lyckegaard
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).