* [PATCH v3 1/7] qdev: add support for device module loading
2020-06-11 8:21 [PATCH v3 0/7] build some devices as modules Gerd Hoffmann
@ 2020-06-11 8:21 ` Gerd Hoffmann
2020-06-11 8:21 ` [PATCH v3 2/7] build: fix device module builds Gerd Hoffmann
` (5 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Gerd Hoffmann @ 2020-06-11 8:21 UTC (permalink / raw)
To: qemu-devel
Cc: dinechin, Paolo Bonzini, Daniel P. Berrangé, Gerd Hoffmann,
Eduardo Habkost
When compiling devices as modules we'll need some infrastrtucture to
actually load those modules if needed. This patch adds it.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
include/hw/qdev-core.h | 3 +++
include/qemu/module.h | 1 +
hw/core/qdev.c | 50 ++++++++++++++++++++++++++++++++++++++++++
qdev-monitor.c | 5 +++++
qom/qom-qmp-cmds.c | 5 +++++
softmmu/vl.c | 4 ++++
stubs/hw-module.c | 10 +++++++++
stubs/Makefile.objs | 1 +
8 files changed, 79 insertions(+)
create mode 100644 stubs/hw-module.c
diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
index b870b279661a..a96c890bb95b 100644
--- a/include/hw/qdev-core.h
+++ b/include/hw/qdev-core.h
@@ -552,4 +552,7 @@ void device_listener_unregister(DeviceListener *listener);
*/
bool qdev_should_hide_device(QemuOpts *opts);
+void qdev_module_load_type(const char *type);
+void qdev_module_load_all(void);
+
#endif
diff --git a/include/qemu/module.h b/include/qemu/module.h
index 011ae1ae7605..077a6b09bca7 100644
--- a/include/qemu/module.h
+++ b/include/qemu/module.h
@@ -64,6 +64,7 @@ typedef enum {
#define block_module_load_one(lib) module_load_one("block-", lib)
#define ui_module_load_one(lib) module_load_one("ui-", lib)
#define audio_module_load_one(lib) module_load_one("audio-", lib)
+#define hw_module_load_one(lib) module_load_one("hw-", lib)
void register_module_init(void (*fn)(void), module_init_type type);
void register_dso_module_init(void (*fn)(void), module_init_type type);
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 9e5538aeaebd..342b5b64871e 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -146,10 +146,60 @@ DeviceState *qdev_create(BusState *bus, const char *name)
return dev;
}
+/*
+ * Building devices modular is mostly useful in case they have
+ * dependencies to external libraries. Which is the case for very few
+ * devices. So with the expectation that this will be rather the
+ * exception than to rule go with a simple hardcoded list for now ...
+ */
+static struct {
+ const char *type;
+ const char *mod;
+} const hwmodules[] = {
+};
+
+static bool qdev_module_loaded_all;
+
+void qdev_module_load_type(const char *type)
+{
+ int i;
+
+ if (qdev_module_loaded_all) {
+ return;
+ }
+ for (i = 0; i < ARRAY_SIZE(hwmodules); i++) {
+ if (strcmp(hwmodules[i].type, type) == 0) {
+ hw_module_load_one(hwmodules[i].mod);
+ return;
+ }
+ }
+}
+
+void qdev_module_load_all(void)
+{
+ int i;
+
+ if (qdev_module_loaded_all) {
+ return;
+ }
+ for (i = 0; i < ARRAY_SIZE(hwmodules); i++) {
+ if (i > 0 && strcmp(hwmodules[i - 1].mod,
+ hwmodules[i].mod) == 0) {
+ /* one module implementing multiple devices -> load only once */
+ continue;
+ }
+ hw_module_load_one(hwmodules[i].mod);
+ }
+ qdev_module_loaded_all = true;
+}
+
DeviceState *qdev_try_create(BusState *bus, const char *type)
{
DeviceState *dev;
+ if (object_class_by_name(type) == NULL) {
+ qdev_module_load_type(type);
+ }
if (object_class_by_name(type) == NULL) {
return NULL;
}
diff --git a/qdev-monitor.c b/qdev-monitor.c
index a4735d3bb190..55dddeb2f978 100644
--- a/qdev-monitor.c
+++ b/qdev-monitor.c
@@ -147,6 +147,7 @@ static void qdev_print_devinfos(bool show_no_user)
int i;
bool cat_printed;
+ qdev_module_load_all();
list = object_class_get_list_sorted(TYPE_DEVICE, false);
for (i = 0; i <= DEVICE_CATEGORY_MAX; i++) {
@@ -224,6 +225,10 @@ static DeviceClass *qdev_get_device_class(const char **driver, Error **errp)
oc = object_class_by_name(*driver);
}
}
+ if (!oc) {
+ qdev_module_load_type(*driver);
+ oc = object_class_by_name(*driver);
+ }
if (!object_class_dynamic_cast(oc, TYPE_DEVICE)) {
if (*driver != original_name) {
diff --git a/qom/qom-qmp-cmds.c b/qom/qom-qmp-cmds.c
index c5249e44d020..4e0d7e53cd16 100644
--- a/qom/qom-qmp-cmds.c
+++ b/qom/qom-qmp-cmds.c
@@ -116,6 +116,7 @@ ObjectTypeInfoList *qmp_qom_list_types(bool has_implements,
{
ObjectTypeInfoList *ret = NULL;
+ qdev_module_load_all();
object_class_foreach(qom_list_types_tramp, implements, abstract, &ret);
return ret;
@@ -131,6 +132,10 @@ ObjectPropertyInfoList *qmp_device_list_properties(const char *typename,
ObjectPropertyInfoList *prop_list = NULL;
klass = object_class_by_name(typename);
+ if (klass == NULL) {
+ qdev_module_load_type(typename);
+ klass = object_class_by_name(typename);
+ }
if (klass == NULL) {
error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
"Device '%s' not found", typename);
diff --git a/softmmu/vl.c b/softmmu/vl.c
index 05d1a4cb6bf8..f93724c8cc56 100644
--- a/softmmu/vl.c
+++ b/softmmu/vl.c
@@ -1770,6 +1770,10 @@ static bool vga_interface_available(VGAInterfaceType t)
{
const VGAInterfaceInfo *ti = &vga_interfaces[t];
+ if (ti->class_names[0] && !object_class_by_name(ti->class_names[0])) {
+ qdev_module_load_type(ti->class_names[0]);
+ }
+
assert(t < VGA_TYPE_MAX);
return !ti->class_names[0] ||
object_class_by_name(ti->class_names[0]) ||
diff --git a/stubs/hw-module.c b/stubs/hw-module.c
new file mode 100644
index 000000000000..58b2160b97fe
--- /dev/null
+++ b/stubs/hw-module.c
@@ -0,0 +1,10 @@
+#include "qemu/osdep.h"
+#include "hw/qdev-core.h"
+
+void qdev_module_load_all(void)
+{
+}
+
+void qdev_module_load_type(const char *type)
+{
+}
diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs
index c1e43ac68f87..40d630202648 100644
--- a/stubs/Makefile.objs
+++ b/stubs/Makefile.objs
@@ -5,6 +5,7 @@ stub-obj-y += dump.o
stub-obj-y += error-printf.o
stub-obj-y += fdset.o
stub-obj-y += gdbstub.o
+stub-obj-y += hw-module.o
stub-obj-y += iothread-lock.o
stub-obj-y += is-daemonized.o
stub-obj-$(CONFIG_LINUX_AIO) += linux-aio.o
--
2.18.4
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH v3 2/7] build: fix device module builds
2020-06-11 8:21 [PATCH v3 0/7] build some devices as modules Gerd Hoffmann
2020-06-11 8:21 ` [PATCH v3 1/7] qdev: add support for device module loading Gerd Hoffmann
@ 2020-06-11 8:21 ` Gerd Hoffmann
2020-06-11 8:21 ` [PATCH v3 3/7] ccid: build smartcard as module Gerd Hoffmann
` (4 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Gerd Hoffmann @ 2020-06-11 8:21 UTC (permalink / raw)
To: qemu-devel
Cc: dinechin, Paolo Bonzini, Daniel P. Berrangé, Gerd Hoffmann,
Eduardo Habkost
See comment. Feels quite hackish. Better ideas anyone?
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
Makefile.target | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/Makefile.target b/Makefile.target
index 8ed1eba95b9c..c70325df5796 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -179,6 +179,13 @@ endif # CONFIG_SOFTMMU
dummy := $(call unnest-vars,,obj-y)
all-obj-y := $(obj-y)
+#
+# common-obj-m has some crap here, probably as side effect from
+# filling obj-y. Clear it. Fixes suspious dependency errors when
+# building devices as modules.
+#
+common-obj-m :=
+
include $(SRC_PATH)/Makefile.objs
dummy := $(call unnest-vars,.., \
authz-obj-y \
--
2.18.4
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH v3 3/7] ccid: build smartcard as module
2020-06-11 8:21 [PATCH v3 0/7] build some devices as modules Gerd Hoffmann
2020-06-11 8:21 ` [PATCH v3 1/7] qdev: add support for device module loading Gerd Hoffmann
2020-06-11 8:21 ` [PATCH v3 2/7] build: fix device module builds Gerd Hoffmann
@ 2020-06-11 8:21 ` Gerd Hoffmann
2020-06-11 8:21 ` [PATCH v3 4/7] usb: build usb-redir " Gerd Hoffmann
` (3 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Gerd Hoffmann @ 2020-06-11 8:21 UTC (permalink / raw)
To: qemu-devel
Cc: dinechin, Paolo Bonzini, Daniel P. Berrangé, Gerd Hoffmann,
Eduardo Habkost
Drops libcacard.so dependency from core qemu.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
Makefile.objs | 1 +
hw/core/qdev.c | 2 ++
hw/Makefile.objs | 1 +
hw/usb/Makefile.objs | 4 +++-
4 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/Makefile.objs b/Makefile.objs
index 99774cfd2545..28c165c0e623 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -59,6 +59,7 @@ common-obj-y += migration/
common-obj-y += audio/
common-obj-m += audio/
common-obj-y += hw/
+common-obj-m += hw/
common-obj-y += replay/
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 342b5b64871e..0388efe2190b 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -156,6 +156,8 @@ static struct {
const char *type;
const char *mod;
} const hwmodules[] = {
+ { .type = "ccid-card-passthru", .mod = "usb-smartcard" },
+ { .type = "ccid-card-emulated", .mod = "usb-smartcard" },
};
static bool qdev_module_loaded_all;
diff --git a/hw/Makefile.objs b/hw/Makefile.objs
index 660e2b437348..71843591fe43 100644
--- a/hw/Makefile.objs
+++ b/hw/Makefile.objs
@@ -43,4 +43,5 @@ devices-dirs-y += smbios/
endif
common-obj-y += $(devices-dirs-y)
+common-obj-m += usb/
obj-y += $(devices-dirs-y)
diff --git a/hw/usb/Makefile.objs b/hw/usb/Makefile.objs
index fa5c3fa1b877..3c5b3d4fadd3 100644
--- a/hw/usb/Makefile.objs
+++ b/hw/usb/Makefile.objs
@@ -29,11 +29,13 @@ common-obj-$(CONFIG_USB_NETWORK) += dev-network.o
ifeq ($(CONFIG_USB_SMARTCARD),y)
common-obj-y += dev-smartcard-reader.o
-common-obj-$(CONFIG_SMARTCARD) += smartcard.mo
+ifeq ($(CONFIG_SMARTCARD),y)
+common-obj-m += smartcard.mo
smartcard.mo-objs := ccid-card-passthru.o ccid-card-emulated.o
smartcard.mo-cflags := $(SMARTCARD_CFLAGS)
smartcard.mo-libs := $(SMARTCARD_LIBS)
endif
+endif
ifeq ($(CONFIG_POSIX),y)
common-obj-$(CONFIG_USB_STORAGE_MTP) += dev-mtp.o
--
2.18.4
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH v3 4/7] usb: build usb-redir as module
2020-06-11 8:21 [PATCH v3 0/7] build some devices as modules Gerd Hoffmann
` (2 preceding siblings ...)
2020-06-11 8:21 ` [PATCH v3 3/7] ccid: build smartcard as module Gerd Hoffmann
@ 2020-06-11 8:21 ` Gerd Hoffmann
2020-06-11 8:21 ` [PATCH v3 5/7] vga: build qxl " Gerd Hoffmann
` (2 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: Gerd Hoffmann @ 2020-06-11 8:21 UTC (permalink / raw)
To: qemu-devel
Cc: dinechin, Paolo Bonzini, Daniel P. Berrangé, Gerd Hoffmann,
Eduardo Habkost
Drops libusbredirparser.so dependency from core qemu.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/core/qdev.c | 1 +
hw/usb/Makefile.objs | 9 ++++++---
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 0388efe2190b..676707e64191 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -158,6 +158,7 @@ static struct {
} const hwmodules[] = {
{ .type = "ccid-card-passthru", .mod = "usb-smartcard" },
{ .type = "ccid-card-emulated", .mod = "usb-smartcard" },
+ { .type = "usb-redir", .mod = "usb-redirect" },
};
static bool qdev_module_loaded_all;
diff --git a/hw/usb/Makefile.objs b/hw/usb/Makefile.objs
index 3c5b3d4fadd3..3bb8dd53421a 100644
--- a/hw/usb/Makefile.objs
+++ b/hw/usb/Makefile.objs
@@ -43,9 +43,12 @@ endif
# usb redirection
ifeq ($(CONFIG_USB),y)
-common-obj-$(CONFIG_USB_REDIR) += redirect.o quirks.o
-redirect.o-cflags = $(USB_REDIR_CFLAGS)
-redirect.o-libs = $(USB_REDIR_LIBS)
+ifeq ($(CONFIG_USB-REDIR),y)
+common-obj-m += redirect.mo
+redirect.mo-objs = redirect.o quirks.o
+redirect.mo-cflags = $(USB_REDIR_CFLAGS)
+redirect.mo-libs = $(USB_REDIR_LIBS)
+endif
endif
# usb pass-through
--
2.18.4
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH v3 5/7] vga: build qxl as module
2020-06-11 8:21 [PATCH v3 0/7] build some devices as modules Gerd Hoffmann
` (3 preceding siblings ...)
2020-06-11 8:21 ` [PATCH v3 4/7] usb: build usb-redir " Gerd Hoffmann
@ 2020-06-11 8:21 ` Gerd Hoffmann
2020-06-11 8:21 ` [PATCH v3 6/7] vga: build virtio-gpu only once Gerd Hoffmann
2020-06-11 8:21 ` [PATCH v3 7/7] vga: build virtio-gpu as module Gerd Hoffmann
6 siblings, 0 replies; 8+ messages in thread
From: Gerd Hoffmann @ 2020-06-11 8:21 UTC (permalink / raw)
To: qemu-devel
Cc: dinechin, Paolo Bonzini, Daniel P. Berrangé, Gerd Hoffmann,
Eduardo Habkost
First step in making spice support modular.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/core/qdev.c | 2 ++
hw/Makefile.objs | 1 +
hw/display/Makefile.objs | 5 ++++-
3 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 676707e64191..e6b1fabac924 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -159,6 +159,8 @@ static struct {
{ .type = "ccid-card-passthru", .mod = "usb-smartcard" },
{ .type = "ccid-card-emulated", .mod = "usb-smartcard" },
{ .type = "usb-redir", .mod = "usb-redirect" },
+ { .type = "qxl-vga", .mod = "display-qxl" },
+ { .type = "qxl", .mod = "display-qxl" },
};
static bool qdev_module_loaded_all;
diff --git a/hw/Makefile.objs b/hw/Makefile.objs
index 71843591fe43..fd6519e8af3f 100644
--- a/hw/Makefile.objs
+++ b/hw/Makefile.objs
@@ -43,5 +43,6 @@ devices-dirs-y += smbios/
endif
common-obj-y += $(devices-dirs-y)
+common-obj-m += display/
common-obj-m += usb/
obj-y += $(devices-dirs-y)
diff --git a/hw/display/Makefile.objs b/hw/display/Makefile.objs
index 77a7d622bd2d..76b3571e4902 100644
--- a/hw/display/Makefile.objs
+++ b/hw/display/Makefile.objs
@@ -44,7 +44,10 @@ common-obj-$(CONFIG_ARTIST) += artist.o
obj-$(CONFIG_VGA) += vga.o
-common-obj-$(CONFIG_QXL) += qxl.o qxl-logger.o qxl-render.o
+ifeq ($(CONFIG_QXL),y)
+common-obj-m += qxl.mo
+qxl.mo-objs = qxl.o qxl-logger.o qxl-render.o
+endif
obj-$(CONFIG_VIRTIO_GPU) += virtio-gpu-base.o virtio-gpu.o virtio-gpu-3d.o
obj-$(CONFIG_VHOST_USER_GPU) += vhost-user-gpu.o
--
2.18.4
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH v3 6/7] vga: build virtio-gpu only once
2020-06-11 8:21 [PATCH v3 0/7] build some devices as modules Gerd Hoffmann
` (4 preceding siblings ...)
2020-06-11 8:21 ` [PATCH v3 5/7] vga: build qxl " Gerd Hoffmann
@ 2020-06-11 8:21 ` Gerd Hoffmann
2020-06-11 8:21 ` [PATCH v3 7/7] vga: build virtio-gpu as module Gerd Hoffmann
6 siblings, 0 replies; 8+ messages in thread
From: Gerd Hoffmann @ 2020-06-11 8:21 UTC (permalink / raw)
To: qemu-devel
Cc: dinechin, Paolo Bonzini, Daniel P. Berrangé, Gerd Hoffmann,
Eduardo Habkost
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
hw/display/Makefile.objs | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/hw/display/Makefile.objs b/hw/display/Makefile.objs
index 76b3571e4902..d619594ad4d3 100644
--- a/hw/display/Makefile.objs
+++ b/hw/display/Makefile.objs
@@ -49,12 +49,12 @@ common-obj-m += qxl.mo
qxl.mo-objs = qxl.o qxl-logger.o qxl-render.o
endif
-obj-$(CONFIG_VIRTIO_GPU) += virtio-gpu-base.o virtio-gpu.o virtio-gpu-3d.o
-obj-$(CONFIG_VHOST_USER_GPU) += vhost-user-gpu.o
-obj-$(call land,$(CONFIG_VIRTIO_GPU),$(CONFIG_VIRTIO_PCI)) += virtio-gpu-pci.o
-obj-$(call land,$(CONFIG_VHOST_USER_GPU),$(CONFIG_VIRTIO_PCI)) += vhost-user-gpu-pci.o
-obj-$(CONFIG_VIRTIO_VGA) += virtio-vga.o
-obj-$(CONFIG_VHOST_USER_VGA) += vhost-user-vga.o
+common-obj-$(CONFIG_VIRTIO_GPU) += virtio-gpu-base.o virtio-gpu.o virtio-gpu-3d.o
+common-obj-$(CONFIG_VHOST_USER_GPU) += vhost-user-gpu.o
+common-obj-$(call land,$(CONFIG_VIRTIO_GPU),$(CONFIG_VIRTIO_PCI)) += virtio-gpu-pci.o
+common-obj-$(call land,$(CONFIG_VHOST_USER_GPU),$(CONFIG_VIRTIO_PCI)) += vhost-user-gpu-pci.o
+common-obj-$(CONFIG_VIRTIO_VGA) += virtio-vga.o
+common-obj-$(CONFIG_VHOST_USER_VGA) += vhost-user-vga.o
virtio-gpu.o-cflags := $(VIRGL_CFLAGS)
virtio-gpu.o-libs += $(VIRGL_LIBS)
virtio-gpu-3d.o-cflags := $(VIRGL_CFLAGS)
--
2.18.4
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH v3 7/7] vga: build virtio-gpu as module
2020-06-11 8:21 [PATCH v3 0/7] build some devices as modules Gerd Hoffmann
` (5 preceding siblings ...)
2020-06-11 8:21 ` [PATCH v3 6/7] vga: build virtio-gpu only once Gerd Hoffmann
@ 2020-06-11 8:21 ` Gerd Hoffmann
6 siblings, 0 replies; 8+ messages in thread
From: Gerd Hoffmann @ 2020-06-11 8:21 UTC (permalink / raw)
To: qemu-devel
Cc: dinechin, Paolo Bonzini, Daniel P. Berrangé, Gerd Hoffmann,
Eduardo Habkost
Drops libvirglrenderer.so dependency from core qemu.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
hw/core/qdev.c | 6 ++++++
hw/display/Makefile.objs | 23 +++++++++++++----------
2 files changed, 19 insertions(+), 10 deletions(-)
diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index e6b1fabac924..126cb284be00 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -161,6 +161,12 @@ static struct {
{ .type = "usb-redir", .mod = "usb-redirect" },
{ .type = "qxl-vga", .mod = "display-qxl" },
{ .type = "qxl", .mod = "display-qxl" },
+ { .type = "virtio-gpu-device", .mod = "display-virtio-gpu" },
+ { .type = "virtio-gpu-pci", .mod = "display-virtio-gpu" },
+ { .type = "virtio-vga", .mod = "display-virtio-gpu" },
+ { .type = "vhost-user-gpu-device", .mod = "display-virtio-gpu" },
+ { .type = "vhost-user-gpu-pci", .mod = "display-virtio-gpu" },
+ { .type = "vhost-user-vga", .mod = "display-virtio-gpu" },
};
static bool qdev_module_loaded_all;
diff --git a/hw/display/Makefile.objs b/hw/display/Makefile.objs
index d619594ad4d3..e907f3182b0c 100644
--- a/hw/display/Makefile.objs
+++ b/hw/display/Makefile.objs
@@ -49,16 +49,19 @@ common-obj-m += qxl.mo
qxl.mo-objs = qxl.o qxl-logger.o qxl-render.o
endif
-common-obj-$(CONFIG_VIRTIO_GPU) += virtio-gpu-base.o virtio-gpu.o virtio-gpu-3d.o
-common-obj-$(CONFIG_VHOST_USER_GPU) += vhost-user-gpu.o
-common-obj-$(call land,$(CONFIG_VIRTIO_GPU),$(CONFIG_VIRTIO_PCI)) += virtio-gpu-pci.o
-common-obj-$(call land,$(CONFIG_VHOST_USER_GPU),$(CONFIG_VIRTIO_PCI)) += vhost-user-gpu-pci.o
-common-obj-$(CONFIG_VIRTIO_VGA) += virtio-vga.o
-common-obj-$(CONFIG_VHOST_USER_VGA) += vhost-user-vga.o
-virtio-gpu.o-cflags := $(VIRGL_CFLAGS)
-virtio-gpu.o-libs += $(VIRGL_LIBS)
-virtio-gpu-3d.o-cflags := $(VIRGL_CFLAGS)
-virtio-gpu-3d.o-libs += $(VIRGL_LIBS)
+ifeq ($(CONFIG_VIRTIO_GPU),y)
+common-obj-m += virtio-gpu.mo
+virtio-gpu-obj-$(CONFIG_VIRTIO_GPU) += virtio-gpu-base.o virtio-gpu.o virtio-gpu-3d.o
+virtio-gpu-obj-$(CONFIG_VHOST_USER_GPU) += vhost-user-gpu.o
+virtio-gpu-obj-$(call land,$(CONFIG_VIRTIO_GPU),$(CONFIG_VIRTIO_PCI)) += virtio-gpu-pci.o
+virtio-gpu-obj-$(call land,$(CONFIG_VHOST_USER_GPU),$(CONFIG_VIRTIO_PCI)) += vhost-user-gpu-pci.o
+virtio-gpu-obj-$(CONFIG_VIRTIO_VGA) += virtio-vga.o
+virtio-gpu-obj-$(CONFIG_VHOST_USER_VGA) += vhost-user-vga.o
+virtio-gpu.mo-objs := $(virtio-gpu-obj-y)
+virtio-gpu.mo-cflags := $(VIRGL_CFLAGS)
+virtio-gpu.mo-libs := $(VIRGL_LIBS)
+endif
+
common-obj-$(CONFIG_DPCD) += dpcd.o
common-obj-$(CONFIG_XLNX_ZYNQMP_ARM) += xlnx_dp.o
--
2.18.4
^ permalink raw reply related [flat|nested] 8+ messages in thread