On 06/11/17 21:15, Laurent Vivier wrote: > Le 06/11/2017 à 01:44, Alexey Kardashevskiy a écrit : >> On 04/11/17 06:38, Laurent Vivier wrote: >>> linux-user binaries don't need firmware and NMI, >>> so don't add them in this case, move QDEV >>> firmware functions to qdev-fw.c >> >> >> When configured with --target-list=ppc64-linux-user , config-host.mak gets >> TARGET_DIRS=ppc64-linux-user and I would expect CONFIG_SOFTMMU to be >> disabled in Makefile#27 and qdev.c not to be compiled at all but this is >> not happening, I wonder why... > > this is driven by config-target.mak and config-target.h which are target > specific. > > for ppc64-linux-user, you have ppc64-linux-user/config-target.mak: > ... > CONFIG_LINUX_USER=y > ... > > for ppc64-softmmu/config-target.mak: > ... > CONFIG_SOFTMMU=y > ...
Ah, I get it, Makefile.objs includes: common-obj-y += hw/ and hw/Makefile.objs includes: devices-dirs-y += core/ and hw/core/Makefile.objs includes: common-obj-y += qdev.o and nowhere it checks that CONFIG_SOFTMMU is not set as hw/core/* files still export symbols needed by qom/cpu.c and TCG so doing as below does not help. I'd suggest moving shared stuff out of hw/ and stop including hw/ in linus-user builds (basically, apply the patch below and resolve compile/link errors) but I suspect it is not that easy (or even correct) but if it is correct, I could give it a try. Paolo? diff --git a/hw/core/Makefile.objs b/hw/core/Makefile.objs index f8d7a4aaed..be8d89dc0a 100644 --- a/hw/core/Makefile.objs +++ b/hw/core/Makefile.objs @@ -1,6 +1,6 @@ # core qdev-related obj files, also used by *-user: -common-obj-y += qdev.o qdev-properties.o -common-obj-y += bus.o reset.o +obj-$(CONFIG_SOFTMMU) += qdev.o qdev-properties.o bus.o +common-obj-y += reset.o common-obj-y += fw-path-provider.o # irq.o needed for qdev GPIO handling: common-obj-y += irq.o diff --git a/qom/Makefile.objs b/qom/Makefile.objs index 516349eec3..479929705a 100644 --- a/qom/Makefile.objs +++ b/qom/Makefile.objs @@ -1,4 +1,4 @@ qom-obj-y = object.o container.o qom-qobject.o qom-obj-y += object_interfaces.o -common-obj-y = cpu.o +obj-$(CONFIG_SOFTMMU) = cpu.o -- Alexey