qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [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).