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: Blue Swirl
Subject: Re: [Qemu-devel] [PATCH 00/24] per-directory Makefile snippets, limit vpath abuse
Date: Sun, 3 Jun 2012 13:31:31 +0000

On Sun, Jun 3, 2012 at 12:25 PM, Paolo Bonzini <address@hidden> 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?

Neat. Could we (eventually) eliminate Makefile.dis, Makefile.hw,
Makefile.target and Makefile.user completely?

>
> 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
>
> --
> 1.7.10.1
>
>

reply via email to

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