* [Qemu-devel] Seeking QEMU makefile advice
@ 2019-02-13 9:49 Markus Armbruster
2019-02-13 14:18 ` Paolo Bonzini
0 siblings, 1 reply; 5+ messages in thread
From: Markus Armbruster @ 2019-02-13 9:49 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: qemu-devel
Hi Paolo,
I'm trying to resolve a FIXME in a patch I recently posted. Here's what
I want to do:
QAPI_COMMON_MODULES = block-core block char common crypto introspect
QAPI_COMMON_MODULES += job migration misc net rdma rocker run-state
QAPI_COMMON_MODULES += sockets tpm trace transaction ui
QAPI_TARGET_MODULES = target
QAPI_MODULES = $(QAPI_COMMON_MODULES) $(QAPI_TARGET_MODULES)
util-obj-y += qapi/qapi-builtin-types.o
util-obj-y += $(QAPI_COMMON_MODULES:%=qapi/qapi-types-%.o)
util-obj-y += qapi/qapi-builtin-visit.o
util-obj-y += $(QAPI_COMMON_MODULES:%=qapi/qapi-visit-%.o)
util-obj-y += qapi/qapi-emit-events.o
util-obj-y += $(QAPI_COMMON_MODULES:%=qapi/qapi-events-%.o)
obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-types-%.o)
obj-y += qapi/qapi-types.o
obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-visit-%.o)
obj-y += qapi/qapi-visit.o
obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-events-%.o)
obj-y += qapi/qapi-events.o
obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-commands-%.o)
obj-y += qapi/qapi-commands.o
obj-y += qapi/qapi-introspect.o
Simple enough, except which part goes where?
First attempt:
* Define QAPI_COMMON_MODULES, QAPI_TARGET_MODULES and QAPI_MODULES in
Makefile.obj
* Add to util-obj-y in Makefile.obj
* Add to obj-y in Makefile.target
No go, because QAPI_TARGET_MODULES is blank there. To make progress,
I duplicated its definition there, marked FIXME.
Message-Id: <20190206181725.14337-8-armbru@redhat.com>
https://lists.nongnu.org/archive/html/qemu-devel/2019-02/msg01652.html
Diff appended for your convenience.
I've since realized QAPI_TARGET_MODULES is blank there because it only
gets defined further down, via include $(SRC_PATH)/Makefile.objs.
This leads me to my problem:
* On the one hand, I want to add to obj-y after the include defines
QAPI_TARGET_MODULES.
* On the other hand, I need to be done with adding to obj-y before the
all-obj-y := $(obj-y) line.
Can't satisfy both. Any ideas on how to better distribute the work
between the makefiles?
diff --git a/Makefile.objs b/Makefile.objs
index 70ee51742f..5f0a7a8ca5 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -1,20 +1,19 @@
-QAPI_MODULES = block-core block char common crypto introspect job migration
-QAPI_MODULES += misc net rdma rocker run-state sockets tpm trace transaction
-QAPI_MODULES += ui
+QAPI_COMMON_MODULES = block-core block char common crypto introspect
+QAPI_COMMON_MODULES += job migration misc net rdma rocker run-state
+QAPI_COMMON_MODULES += sockets tpm trace transaction ui
+QAPI_TARGET_MODULES = target
+QAPI_MODULES = $(QAPI_COMMON_MODULES) $(QAPI_TARGET_MODULES)
#######################################################################
# Common libraries for tools and emulators
stub-obj-y = stubs/ crypto/
util-obj-y = util/ qobject/ qapi/
util-obj-y += qapi/qapi-builtin-types.o
-util-obj-y += qapi/qapi-types.o
-util-obj-y += $(QAPI_MODULES:%=qapi/qapi-types-%.o)
+util-obj-y += $(QAPI_COMMON_MODULES:%=qapi/qapi-types-%.o)
util-obj-y += qapi/qapi-builtin-visit.o
-util-obj-y += qapi/qapi-visit.o
-util-obj-y += $(QAPI_MODULES:%=qapi/qapi-visit-%.o)
+util-obj-y += $(QAPI_COMMON_MODULES:%=qapi/qapi-visit-%.o)
util-obj-y += qapi/qapi-emit-events.o
-util-obj-y += qapi/qapi-events.o
-util-obj-y += $(QAPI_MODULES:%=qapi/qapi-events-%.o)
+util-obj-y += $(QAPI_COMMON_MODULES:%=qapi/qapi-events-%.o)
chardev-obj-y = chardev/
slirp-obj-$(CONFIG_SLIRP) = slirp/
@@ -92,8 +91,7 @@ common-obj-$(CONFIG_FDT) += device_tree.o
######################################################################
# qapi
-common-obj-y += qapi/qapi-commands.o
-common-obj-y += $(QAPI_MODULES:%=qapi/qapi-commands-%.o)
+common-obj-y += $(QAPI_COMMON_MODULES:%=qapi/qapi-commands-%.o)
common-obj-y += qmp.o hmp.o
endif
diff --git a/Makefile.target b/Makefile.target
index d8af835890..f908477040 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -164,6 +164,16 @@ endif
GENERATED_FILES += hmp-commands.h hmp-commands-info.h
+# FIXME duplicates Makefile.obj's
+QAPI_TARGET_MODULES = target
+obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-types-%.o)
+obj-y += qapi/qapi-types.o
+obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-visit-%.o)
+obj-y += qapi/qapi-visit.o
+obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-events-%.o)
+obj-y += qapi/qapi-events.o
+obj-y += $(QAPI_TARGET_MODULES:%=qapi/qapi-commands-%.o)
+obj-y += qapi/qapi-commands.o
obj-y += qapi/qapi-introspect.o
endif # CONFIG_SOFTMMU
diff --git a/qapi/qapi-schema.json b/qapi/qapi-schema.json
index 1845aa78ff..db61bfd688 100644
--- a/qapi/qapi-schema.json
+++ b/qapi/qapi-schema.json
@@ -97,3 +97,4 @@
{ 'include': 'trace.json' }
{ 'include': 'introspect.json' }
{ 'include': 'misc.json' }
+{ 'include': 'target.json' }
diff --git a/qapi/target.json b/qapi/target.json
new file mode 100644
index 0000000000..8054926293
--- /dev/null
+++ b/qapi/target.json
@@ -0,0 +1,13 @@
+# -*- Mode: Python -*-
+#
+
+##
+# = Target-specific commands & events
+##
+
+##
+# @TARGET-TEMPORARY-DUMMY:
+# Will go away in the next commit. Needed in this one because empty
+# modules don't generate anything, defeating this commit's purpose.
+##
+{ 'event': 'TARGET-TEMPORARY-DUMMY' }
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] Seeking QEMU makefile advice
2019-02-13 9:49 [Qemu-devel] Seeking QEMU makefile advice Markus Armbruster
@ 2019-02-13 14:18 ` Paolo Bonzini
2019-02-13 16:15 ` Markus Armbruster
0 siblings, 1 reply; 5+ messages in thread
From: Paolo Bonzini @ 2019-02-13 14:18 UTC (permalink / raw)
To: Markus Armbruster; +Cc: qemu-devel
On 13/02/19 10:49, Markus Armbruster wrote:
> * Define QAPI_COMMON_MODULES, QAPI_TARGET_MODULES and QAPI_MODULES in
> Makefile.obj
>
> * Add to util-obj-y in Makefile.obj
>
> * Add to obj-y in Makefile.target
Why can't both be in Makefile.objs, or in qapi/Makefile.objs?
Paolo
> No go, because QAPI_TARGET_MODULES is blank there. To make progress,
> I duplicated its definition there, marked FIXME.
>
> Message-Id: <20190206181725.14337-8-armbru@redhat.com>
> https://lists.nongnu.org/archive/html/qemu-devel/2019-02/msg01652.html
> Diff appended for your convenience.
>
> I've since realized QAPI_TARGET_MODULES is blank there because it only
> gets defined further down, via include $(SRC_PATH)/Makefile.objs.
>
> This leads me to my problem:
>
> * On the one hand, I want to add to obj-y after the include defines
> QAPI_TARGET_MODULES.
>
> * On the other hand, I need to be done with adding to obj-y before the
> all-obj-y := $(obj-y) line.
>
> Can't satisfy both. Any ideas on how to better distribute the work
> between the makefiles?
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] Seeking QEMU makefile advice
2019-02-13 14:18 ` Paolo Bonzini
@ 2019-02-13 16:15 ` Markus Armbruster
2019-02-13 16:19 ` Paolo Bonzini
0 siblings, 1 reply; 5+ messages in thread
From: Markus Armbruster @ 2019-02-13 16:15 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: qemu-devel
Paolo Bonzini <pbonzini@redhat.com> writes:
> On 13/02/19 10:49, Markus Armbruster wrote:
>> * Define QAPI_COMMON_MODULES, QAPI_TARGET_MODULES and QAPI_MODULES in
>> Makefile.obj
>>
>> * Add to util-obj-y in Makefile.obj
>>
>> * Add to obj-y in Makefile.target
>
> Why can't both be in Makefile.objs, or in qapi/Makefile.objs?
When I try either place, I get
LINK x86_64-softmmu/qemu-system-x86_64
monitor.o: In function `qmp_query_qmp_schema':
/work/armbru/qemu/monitor.c:1136: undefined reference to `qmp_schema_qlit'
[more errors...]
Compiling with V=1 confirms qapi-introspect.o isn't in $(all-obj-y).
I think this is the case because Makefile.target has
all-obj-y := $(obj-y)
before
include $(SRC_PATH)/Makefile.objs
If I move the former below the latter (without really understanding the
consequences), I get
make[1]: *** No rule to make target '9pfs/', needed by 'qemu-system-x86_64'.
make[1]: *** No rule to make target 'acpi/', needed by 'qemu-system-x86_64'.
make[1]: *** No rule to make target 'adc/', needed by 'qemu-system-x86_64'.
[many, many more...]
What now?
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] Seeking QEMU makefile advice
2019-02-13 16:15 ` Markus Armbruster
@ 2019-02-13 16:19 ` Paolo Bonzini
2019-02-14 8:30 ` Markus Armbruster
0 siblings, 1 reply; 5+ messages in thread
From: Paolo Bonzini @ 2019-02-13 16:19 UTC (permalink / raw)
To: Markus Armbruster; +Cc: qemu-devel
On 13/02/19 17:15, Markus Armbruster wrote:
> Paolo Bonzini <pbonzini@redhat.com> writes:
>
>> On 13/02/19 10:49, Markus Armbruster wrote:
>>> * Define QAPI_COMMON_MODULES, QAPI_TARGET_MODULES and QAPI_MODULES in
>>> Makefile.obj
>>>
>>> * Add to util-obj-y in Makefile.obj
>>>
>>> * Add to obj-y in Makefile.target
>>
>> Why can't both be in Makefile.objs, or in qapi/Makefile.objs?
>
> When I try either place, I get
>
> LINK x86_64-softmmu/qemu-system-x86_64
> monitor.o: In function `qmp_query_qmp_schema':
> /work/armbru/qemu/monitor.c:1136: undefined reference to `qmp_schema_qlit'
> [more errors...]
>
> Compiling with V=1 confirms qapi-introspect.o isn't in $(all-obj-y).
Oh, ok. Then I suggest placing it in qapi/Makefile.objs, and you'll
have to add "obj-y += qapi/" in Makefile.target (I'm not sure if it's
under "ifdef CONFIG_SOFTMMU" or outside, but you'd know that).
Thanks,
Paolo
> I think this is the case because Makefile.target has
>
> all-obj-y := $(obj-y)
>
> before
>
> include $(SRC_PATH)/Makefile.objs
>
> If I move the former below the latter (without really understanding the
> consequences), I get
>
> make[1]: *** No rule to make target '9pfs/', needed by 'qemu-system-x86_64'.
> make[1]: *** No rule to make target 'acpi/', needed by 'qemu-system-x86_64'.
> make[1]: *** No rule to make target 'adc/', needed by 'qemu-system-x86_64'.
> [many, many more...]
>
> What now?
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] Seeking QEMU makefile advice
2019-02-13 16:19 ` Paolo Bonzini
@ 2019-02-14 8:30 ` Markus Armbruster
0 siblings, 0 replies; 5+ messages in thread
From: Markus Armbruster @ 2019-02-14 8:30 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: qemu-devel
Paolo Bonzini <pbonzini@redhat.com> writes:
> On 13/02/19 17:15, Markus Armbruster wrote:
>> Paolo Bonzini <pbonzini@redhat.com> writes:
>>
>>> On 13/02/19 10:49, Markus Armbruster wrote:
>>>> * Define QAPI_COMMON_MODULES, QAPI_TARGET_MODULES and QAPI_MODULES in
>>>> Makefile.obj
>>>>
>>>> * Add to util-obj-y in Makefile.obj
>>>>
>>>> * Add to obj-y in Makefile.target
>>>
>>> Why can't both be in Makefile.objs, or in qapi/Makefile.objs?
>>
>> When I try either place, I get
>>
>> LINK x86_64-softmmu/qemu-system-x86_64
>> monitor.o: In function `qmp_query_qmp_schema':
>> /work/armbru/qemu/monitor.c:1136: undefined reference to `qmp_schema_qlit'
>> [more errors...]
>>
>> Compiling with V=1 confirms qapi-introspect.o isn't in $(all-obj-y).
>
> Oh, ok. Then I suggest placing it in qapi/Makefile.objs, and you'll
> have to add "obj-y += qapi/" in Makefile.target (I'm not sure if it's
> under "ifdef CONFIG_SOFTMMU" or outside, but you'd know that).
I think I got that to work. Thanks for your help!
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2019-02-14 8:40 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-02-13 9:49 [Qemu-devel] Seeking QEMU makefile advice Markus Armbruster
2019-02-13 14:18 ` Paolo Bonzini
2019-02-13 16:15 ` Markus Armbruster
2019-02-13 16:19 ` Paolo Bonzini
2019-02-14 8:30 ` Markus Armbruster
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).