qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 00/24] per-directory Makefile snippets, limit vp


From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH 00/24] per-directory Makefile snippets, limit vpath abuse
Date: Mon, 04 Jun 2012 06:55:34 +0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:11.0) Gecko/20120329 Thunderbird/11.0.1

On 06/03/2012 08:25 PM, Paolo Bonzini wrote:
One source of complexity in the QEMU source is that we have a very
shallow tree for a source code of over 750,000 lines of code.  In
fact, one third of these lines alone is in one directory, hw/.

As a prerequisite to cleaning up the structure, but as a worthwhile
step on its own, this patchset cleans up the build system so that
separate directories have their own Makefile snippet.  As in the Linux
kernel build system, the overall build system is generally flat (in
the case of QEMU, with one recursive invocation per emulation target).
Subdirectories do not include complete Makefiles, instead they only host
the declarations for a few variables (common-obj-y, universal-obj-y,
obj-y, etc.).  Definitions for all the directories are merged with a
little GNU Make magic (not much, only 20 lines).

Two nice side effects are:

- we can match the source tree and the object tree (for example the
   per-target device models will be in XYZ-softmmu/hw, not in
   XYZ-softmmu; those that are compiled once will be in hw/ rather
   than in the root).

- because the resolution of nested makefiles tracks the nested
   directory, there is no need to use VPATH to find sources in
   the hw/ and target-*/ directory.

- there is a lot less Makefile programming (conditionals, addprefix,
   etc.), replaced by only 20 lines in rules.mak and 1 in Makefile.objs.

The series is entirely bisectable, and mostly consists of boring patches.
If the concept is accepted, I would like to get it in as soon as possible.
I have a few other cleanups on top (I stopped once I undid the diffstat
of this series :)), but they can be covered later.

Thoughts, approvals, rejections?

Awesomness!

Reviewed-by: Anthony Liguori <address@hidden>

I tried to do something similar but my make-magic isn't quite as good as yours.

If you do a v2 fixing the whitespace issues Blue pointed out, I'll apply ASAP.

Regards,

Anthony Liguori


Paolo


Paolo Bonzini (24):
   remove trace-nested-y
   do not sprinkle around GENERATED_HEADERS dependencies
   add rules for nesting
   move *-user/ objects to nested Makefile
   move obj-TARGET-y variables to nested Makefile
   move libobj-y variable to nested Makefile
   move other target-*/ objects to nested Makefiles
   move rules for nesting to Makefile.objs
   use nested Makefile rules for qom/ objects
   move block/ objects to nested Makefile
   move net/ objects to nested Makefile
   move fsdev/ objects to nested Makefile
   move ui/ objects to nested Makefile
   move audio/ objects to nested Makefile
   move slirp/ objects to nested Makefile
   move qapi/ objects to nested Makefile
   move qga/ objects to nested Makefile
   move target-independent hw/ objects to nested Makefiles
   convert libhw to nested Makefiles
   move per-target hw/ objects to nested Makefiles
   move device tree to per-target Makefile
   libcacard Makefile cleanups
   limit usage of vpath
   compile oslib-obj-y once

  Makefile                                     |   30 ++-
  Makefile.hw                                  |    7 +-
  Makefile.objs                                |  316 ++++---------------------
  Makefile.target                              |  325 ++++----------------------
  audio/Makefile                               |   15 ++
  block/Makefile                               |   11 +
  bsd-user/Makefile                            |    3 +
  configure                                    |   70 +++---
  fsdev/Makefile                               |    6 +
  hw/9pfs/Makefile                             |    9 +
  hw/Makefile                                  |  162 +++++++++++++
  hw/alpha/Makefile                            |    4 +
  hw/arm/Makefile                              |   40 ++++
  hw/cris/Makefile                             |   13 ++
  hw/i386/Makefile                             |   13 ++
  hw/ide/Makefile                              |   10 +
  hw/lm32/Makefile                             |   23 ++
  hw/m68k/Makefile                             |    4 +
  hw/microblaze/Makefile                       |   14 ++
  hw/mips/Makefile                             |    6 +
  hw/ppc/Makefile                              |   32 +++
  hw/s390x/Makefile                            |    3 +
  hw/sh4/Makefile                              |    5 +
  hw/sparc/Makefile                            |    8 +
  hw/sparc64/Makefile                          |    4 +
  hw/usb/Makefile                              |   13 ++
  hw/xtensa/Makefile                           |    5 +
  libcacard/Makefile                           |   17 +-
  linux-user/Makefile                          |    7 +
  linux-user/arm/nwfpe/Makefile                |    3 +
  net/Makefile                                 |   13 ++
  qapi/Makefile                                |    3 +
  qga/Makefile                                 |    4 +
  qom/Makefile                                 |    6 +-
  rules.mak                                    |   21 ++
  slirp/Makefile                               |    4 +
  target-alpha/Makefile                        |    3 +
  target-arm/Makefile                          |    4 +
  arm-semi.c =>  target-arm/arm-semi.c          |    0
  target-cris/Makefile                         |    2 +
  target-i386/Makefile                         |    6 +
  ioport-user.c =>  target-i386/ioport-user.c   |    0
  target-lm32/Makefile                         |    2 +
  target-m68k/Makefile                         |    3 +
  m68k-semi.c =>  target-m68k/m68k-semi.c       |    0
  target-microblaze/Makefile                   |    2 +
  target-mips/Makefile                         |    2 +
  target-ppc/Makefile                          |    3 +
  target-s390x/Makefile                        |    3 +
  target-sh4/Makefile                          |    2 +
  target-sparc/Makefile                        |    6 +
  target-unicore32/Makefile                    |    2 +
  target-xtensa/Makefile                       |    6 +
  xtensa-semi.c =>  target-xtensa/xtensa-semi.c |    0
  tests/Makefile                               |    1 -
  ui/Makefile                                  |   18 ++
  56 files changed, 674 insertions(+), 620 deletions(-)
  create mode 100644 audio/Makefile
  create mode 100644 block/Makefile
  create mode 100644 bsd-user/Makefile
  create mode 100644 fsdev/Makefile
  create mode 100644 hw/9pfs/Makefile
  create mode 100644 hw/Makefile
  create mode 100644 hw/alpha/Makefile
  create mode 100644 hw/arm/Makefile
  create mode 100644 hw/cris/Makefile
  create mode 100644 hw/i386/Makefile
  create mode 100644 hw/ide/Makefile
  create mode 100644 hw/lm32/Makefile
  create mode 100644 hw/m68k/Makefile
  create mode 100644 hw/microblaze/Makefile
  create mode 100644 hw/mips/Makefile
  create mode 100644 hw/ppc/Makefile
  create mode 100644 hw/s390x/Makefile
  create mode 100644 hw/sh4/Makefile
  create mode 100644 hw/sparc/Makefile
  create mode 100644 hw/sparc64/Makefile
  create mode 100644 hw/usb/Makefile
  create mode 100644 hw/xtensa/Makefile
  create mode 100644 linux-user/Makefile
  create mode 100644 linux-user/arm/nwfpe/Makefile
  create mode 100644 net/Makefile
  create mode 100644 qapi/Makefile
  create mode 100644 qga/Makefile
  create mode 100644 slirp/Makefile
  create mode 100644 target-alpha/Makefile
  create mode 100644 target-arm/Makefile
  rename arm-semi.c =>  target-arm/arm-semi.c (100%)
  create mode 100644 target-cris/Makefile
  create mode 100644 target-i386/Makefile
  rename ioport-user.c =>  target-i386/ioport-user.c (100%)
  create mode 100644 target-lm32/Makefile
  create mode 100644 target-m68k/Makefile
  rename m68k-semi.c =>  target-m68k/m68k-semi.c (100%)
  create mode 100644 target-microblaze/Makefile
  create mode 100644 target-mips/Makefile
  create mode 100644 target-ppc/Makefile
  create mode 100644 target-s390x/Makefile
  create mode 100644 target-sh4/Makefile
  create mode 100644 target-sparc/Makefile
  create mode 100644 target-unicore32/Makefile
  create mode 100644 target-xtensa/Makefile
  rename xtensa-semi.c =>  target-xtensa/xtensa-semi.c (100%)
  create mode 100644 ui/Makefile





reply via email to

[Prev in Thread] Current Thread [Next in Thread]