[XEN PATCH v3 00/25] Toolstack build system improvement, toward non-recursive makefiles

Anthony PERARD posted 25 patches 1 year, 10 months ago
Patches applied successfully (tree, apply log)
git fetch https://gitlab.com/xen-project/patchew/xen tags/patchew/20220624160422.53457-1-anthony.perard@citrix.com
Test gitlab-ci failed
There is a newer version of this series
tools/configure.ac                            |  1 +
tools/Makefile                                |  2 +-
tools/console/Makefile                        | 49 +----------------
tools/console/client/Makefile                 | 37 +++++++++++++
tools/console/daemon/Makefile                 | 45 +++++++++++++++
tools/debugger/gdbsx/Makefile                 | 20 +++----
tools/debugger/gdbsx/gx/Makefile              | 15 +++--
tools/debugger/gdbsx/xg/Makefile              | 25 +++------
tools/debugger/kdd/Makefile                   |  1 -
tools/examples/Makefile                       | 25 ++-------
tools/firmware/hvmloader/Makefile             | 16 +++---
tools/flask/utils/Makefile                    | 11 ++--
tools/fuzz/cpu-policy/Makefile                |  2 +-
tools/fuzz/libelf/Makefile                    | 21 ++++---
tools/fuzz/x86_instruction_emulator/Makefile  | 32 +++++------
tools/golang/xenlight/Makefile                |  2 +-
tools/helpers/Makefile                        | 23 ++++----
tools/hotplug/FreeBSD/Makefile                | 11 +---
tools/hotplug/Linux/Makefile                  | 16 ++----
tools/hotplug/Linux/systemd/Makefile          | 16 +++---
tools/hotplug/NetBSD/Makefile                 |  9 +--
tools/hotplug/common/Makefile                 | 16 ++----
tools/libfsimage/common/Makefile              | 11 +---
tools/libfsimage/ext2fs-lib/Makefile          |  9 ---
tools/libfsimage/ext2fs/Makefile              |  9 ---
tools/libfsimage/fat/Makefile                 |  9 ---
tools/libfsimage/iso9660/Makefile             | 11 ----
tools/libfsimage/reiserfs/Makefile            |  9 ---
tools/libfsimage/ufs/Makefile                 |  9 ---
tools/libfsimage/xfs/Makefile                 |  9 ---
tools/libfsimage/zfs/Makefile                 |  9 ---
tools/libs/util/Makefile                      |  3 +-
tools/misc/Makefile                           |  1 -
tools/tests/cpu-policy/Makefile               |  2 +-
tools/tests/depriv/Makefile                   |  2 +-
tools/tests/resource/Makefile                 |  1 -
tools/tests/tsx/Makefile                      |  1 -
tools/tests/xenstore/Makefile                 |  1 -
tools/xcutils/Makefile                        |  2 -
tools/xenmon/Makefile                         |  1 -
tools/xenpaging/Makefile                      | 25 ++++-----
tools/xenpmd/Makefile                         |  1 -
tools/xentop/Makefile                         | 23 ++++----
tools/xentrace/Makefile                       | 21 +++----
tools/xl/Makefile                             |  2 +-
tools/Rules.mk                                | 55 ++++++++++++++-----
tools/debugger/gdbsx/Rules.mk                 |  2 +-
tools/firmware/Rules.mk                       |  2 -
tools/libfsimage/Rules.mk                     | 26 +++------
tools/libfsimage/common.mk                    | 11 ++++
tools/libs/libs.mk                            | 31 +++++------
tools/helpers/xen-init-dom0.c                 |  2 +
tools/ocaml/common.make                       |  2 +-
.gitignore                                    | 35 ------------
config/Tools.mk.in                            |  1 +
tools/configure                               | 26 +++++++++
tools/console/client/.gitignore               |  1 +
tools/console/daemon/.gitignore               |  1 +
tools/fuzz/libelf/.gitignore                  |  2 +
.../fuzz/x86_instruction_emulator/.gitignore  |  7 +++
tools/libs/.gitignore                         |  2 +
tools/xenstore/Makefile.common                |  1 -
62 files changed, 349 insertions(+), 424 deletions(-)
create mode 100644 tools/console/client/Makefile
create mode 100644 tools/console/daemon/Makefile
create mode 100644 tools/libfsimage/common.mk
create mode 100644 tools/console/client/.gitignore
create mode 100644 tools/console/daemon/.gitignore
create mode 100644 tools/fuzz/libelf/.gitignore
create mode 100644 tools/fuzz/x86_instruction_emulator/.gitignore
[XEN PATCH v3 00/25] Toolstack build system improvement, toward non-recursive makefiles
Posted by Anthony PERARD 1 year, 10 months ago
Patch series available in this git branch:
https://xenbits.xen.org/git-http/people/aperard/xen-unstable.git br.toolstack-build-system-v3

Changes in v3:
- rebased
- several new patches, starting with 13/25 "tools/libs/util: cleanup Makefile"
- introducing macros to deal with linking with in-tree xen libraries
- Add -Werror to CFLAGS for all builds in tools/

Changes in v2:
- one new patch
- other changes described in patch notes

Hi everyone,

I've been looking at reworking the build system we have for the "tools/", and
transforming it to something that suit it better. There are a lot of
dependencies between different sub-directories so it would be nice if GNU make
could actually handle them. This is possible with "non-recursive makefiles".

With non-recursive makefiles, make will have to load/include all the makefiles
and thus will have complete overview of all the dependencies. This will allow
make to build the necessary targets in other directory, and we won't need to
build sub-directories one by one.

To help with this transformation, I've chosen to go with a recent project
called "subdirmk". It help to deal with the fact that all makefiles will share
the same namespace, it is hooked into autoconf, we can easily run `make` from
any subdirectory. Together "autoconf" and "subdirmk" will also help to get
closer to be able to do out-of-tree build of the tools, but I'm mainly looking
to have non-recursive makefile.

Link to the project:
    https://www.chiark.greenend.org.uk/ucgi/~ian/git/subdirmk.git/

But before getting to the main course, I've got quite a few cleanup and some
changes to the makefiles. I start the patch series with patches that remove old
left over stuff, then start reworking makefiles. They are some common changes like
removing the "build" targets in many places as "all" would be the more common
way to spell it and "all" is the default target anyway. They are other changes
related to the conversion to "subdirmk", I start to use the variable $(TARGETS)
in several makefiles, this variable will have a special meaning in subdirmk
which will build those target by default.

As for the conversion to non-recursive makefile, with subdirmk, I have this WIP
branch, it contains some changes that I'm trying out, some notes, and the
conversion, one Makefile per commit. Cleanup are still needed, some makefile
not converted yet, but it's otherwise mostly done.

    https://xenbits.xen.org/git-http/people/aperard/xen-unstable.git br.toolstack-build-system-v1-wip-extra

With that branch, you could tried something like:
    ./configure; cd tools/xl; make
and `xl` should be built as well as all the xen library needed.
Also, things like `make clean` or rebuild should be faster in the all tools/
directory.

Cheers,

Anthony PERARD (25):
  tools/console: have one Makefile per program/directory
  tools/debugger/gdbsx: Fix and cleanup makefiles
  tools/examples: cleanup Makefile
  tools/firmware/hvmloader: rework Makefile
  tools/fuzz/libelf: rework makefile
  tools/fuzz/x86_instruction_emulator: rework makefile
  tools/hotplug: cleanup Makefiles
  tools/libfsimage: Cleanup makefiles
  tools/xenpaging: Rework makefile
  tools/xentop: rework makefile
  tools/xentrace: rework Makefile
  .gitignore: Cleanup ignores of tools/libs/*/{headers.chk,*.pc}
  tools/libs/util: cleanup Makefile
  tools/flask/utils: list build targets in $(TARGETS)
  libs/libs.mk: Rename $(LIB) to $(TARGETS)
  libs/libs.mk: Remove the need for $(PKG_CONFIG_INST)
  libs/libs.mk: Rework target headers.chk dependencies
  tools: Introduce $(xenlibs-rpath,..) to replace $(SHDEPS_lib*)
  tools: Introduce $(xenlibs-ldlibs, ) macro
  tools: Introduce $(xenlibs-ldflags, ) macro
  tools/helper: Cleanup Makefile
  tools/console: Use $(xenlibs-ldlibs,)
  tools/helpers: Fix build of xen-init-dom0 with -Werror
  tools: Add -Werror by default to all tools/
  tools: Remove -Werror everywhere else

 tools/configure.ac                            |  1 +
 tools/Makefile                                |  2 +-
 tools/console/Makefile                        | 49 +----------------
 tools/console/client/Makefile                 | 37 +++++++++++++
 tools/console/daemon/Makefile                 | 45 +++++++++++++++
 tools/debugger/gdbsx/Makefile                 | 20 +++----
 tools/debugger/gdbsx/gx/Makefile              | 15 +++--
 tools/debugger/gdbsx/xg/Makefile              | 25 +++------
 tools/debugger/kdd/Makefile                   |  1 -
 tools/examples/Makefile                       | 25 ++-------
 tools/firmware/hvmloader/Makefile             | 16 +++---
 tools/flask/utils/Makefile                    | 11 ++--
 tools/fuzz/cpu-policy/Makefile                |  2 +-
 tools/fuzz/libelf/Makefile                    | 21 ++++---
 tools/fuzz/x86_instruction_emulator/Makefile  | 32 +++++------
 tools/golang/xenlight/Makefile                |  2 +-
 tools/helpers/Makefile                        | 23 ++++----
 tools/hotplug/FreeBSD/Makefile                | 11 +---
 tools/hotplug/Linux/Makefile                  | 16 ++----
 tools/hotplug/Linux/systemd/Makefile          | 16 +++---
 tools/hotplug/NetBSD/Makefile                 |  9 +--
 tools/hotplug/common/Makefile                 | 16 ++----
 tools/libfsimage/common/Makefile              | 11 +---
 tools/libfsimage/ext2fs-lib/Makefile          |  9 ---
 tools/libfsimage/ext2fs/Makefile              |  9 ---
 tools/libfsimage/fat/Makefile                 |  9 ---
 tools/libfsimage/iso9660/Makefile             | 11 ----
 tools/libfsimage/reiserfs/Makefile            |  9 ---
 tools/libfsimage/ufs/Makefile                 |  9 ---
 tools/libfsimage/xfs/Makefile                 |  9 ---
 tools/libfsimage/zfs/Makefile                 |  9 ---
 tools/libs/util/Makefile                      |  3 +-
 tools/misc/Makefile                           |  1 -
 tools/tests/cpu-policy/Makefile               |  2 +-
 tools/tests/depriv/Makefile                   |  2 +-
 tools/tests/resource/Makefile                 |  1 -
 tools/tests/tsx/Makefile                      |  1 -
 tools/tests/xenstore/Makefile                 |  1 -
 tools/xcutils/Makefile                        |  2 -
 tools/xenmon/Makefile                         |  1 -
 tools/xenpaging/Makefile                      | 25 ++++-----
 tools/xenpmd/Makefile                         |  1 -
 tools/xentop/Makefile                         | 23 ++++----
 tools/xentrace/Makefile                       | 21 +++----
 tools/xl/Makefile                             |  2 +-
 tools/Rules.mk                                | 55 ++++++++++++++-----
 tools/debugger/gdbsx/Rules.mk                 |  2 +-
 tools/firmware/Rules.mk                       |  2 -
 tools/libfsimage/Rules.mk                     | 26 +++------
 tools/libfsimage/common.mk                    | 11 ++++
 tools/libs/libs.mk                            | 31 +++++------
 tools/helpers/xen-init-dom0.c                 |  2 +
 tools/ocaml/common.make                       |  2 +-
 .gitignore                                    | 35 ------------
 config/Tools.mk.in                            |  1 +
 tools/configure                               | 26 +++++++++
 tools/console/client/.gitignore               |  1 +
 tools/console/daemon/.gitignore               |  1 +
 tools/fuzz/libelf/.gitignore                  |  2 +
 .../fuzz/x86_instruction_emulator/.gitignore  |  7 +++
 tools/libs/.gitignore                         |  2 +
 tools/xenstore/Makefile.common                |  1 -
 62 files changed, 349 insertions(+), 424 deletions(-)
 create mode 100644 tools/console/client/Makefile
 create mode 100644 tools/console/daemon/Makefile
 create mode 100644 tools/libfsimage/common.mk
 create mode 100644 tools/console/client/.gitignore
 create mode 100644 tools/console/daemon/.gitignore
 create mode 100644 tools/fuzz/libelf/.gitignore
 create mode 100644 tools/fuzz/x86_instruction_emulator/.gitignore

-- 
Anthony PERARD
Re: [XEN PATCH v3 00/25] Toolstack build system improvement, toward non-recursive makefiles
Posted by Christian Lindig 1 year, 10 months ago

On 24 Jun 2022, at 17:03, Anthony PERARD <anthony.perard@citrix.com<mailto:anthony.perard@citrix.com>> wrote:

Changes in v3:
- rebased
- several new patches, starting with 13/25 "tools/libs/util: cleanup Makefile"
- introducing macros to deal with linking with in-tree xen libraries
- Add -Werror to CFLAGS for all builds in tools/

Acked-by: Christian Lindig <christian.lindig@citrix.com<mailto:christian.lindig@citrix.com>>