Patch series available in this git branch:
https://xenbits.xen.org/git-http/people/aperard/xen-unstable.git br.toolstack-build-system-v1
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.
stubdom has some changes also as it won't be able to use tools/ Makefiles
as-is anymore.
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 (57):
.gitignore: Non existing toolcore/include files.
tools/configure.ac: Remove left over system_aio
tools/Rules.mk: Remove $(CFLAGS.opic) from %.opic: %.S
libs: Remove _paths.h from libs ctrl and util.
libs: Remove -Iinclude from CFLAGS
libs/libs.mk: Remove generic variable that already exist
libs/guest: Drop spurious include in Makefile
libs/light: Remove non-existing CFLAGS_libxl.o var
libs/light: Remove -I.
libs/stat: Remove duplicated CFLAGS from deps
libs/store: Remove PKG_CONFIG_REMOVE
tools: remove some unneeded subdir-distclean-* targets
tools/firmware/hvmloader: remove "subdirs-*" prerequisite
tools/flask/utils: remove unused variables/targets from Makefile
tools/libacpi: cleanup Makefile, don't check for iasl binary
tools/ocaml: Remove generation of _paths.h
tools/xl: Remove unnecessary -I. from CFLAGS
tools: Use config.h from autoconf instead of "buildmakevars2header"
tools/configure.ac: Create ZLIB_LIBS and ZLIB_CFLAGS
tools/Rules.mk: introduce FORCE target
tools/include/xen-foreign: avoid to rely on default .SUFFIXES
tools/console: have one Makefile per program/directory
tools/debugger: Allow make to recurse into debugger/
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/helper: Cleanup Makefile
tools/hotplug: cleanup Makefiles
tools/libfsimage: Cleanup makefiles
tools/misc: rework Makefile
tools/vchan: Collect targets in TARGETS
tools/xcutils: rework Makefile
tools/xenpaging: Rework makefile
tools/xenstore: Cleanup makefile
tools/xentop: rework makefile
tools/xenstrace: rework Makefile
libs: Remove both "libs" and "build" target
libs: rename LDUSELIBS to LDLIBS and use it instead of APPEND_LDFLAGS
libs: Remove need for *installlocal targets
libs,tools/include: Clean "clean" targets
libs: Rename $(SRCS-y) to $(OBJS-y)
libs/guest: rename ELF_OBJS to LIBELF_OBJS
libs/guest: rework CFLAGS
libs/store: use of -iquote instead of -I
libs/stat: Fix and rework python-bindings build
libs/stat: Fix and rework perl-binding build
libs/toolcore: don't install xentoolcore_internal.h anymore
tools/Rules.mk: Cleanup %.pc rules
.gitignore: Cleanup ignores of tools/libs/*/{headers.chk,*.pc}
stubdom: only build libxen*.a from tools/libs/
stubdom: introduce xenlibs.mk
tools/libs: create Makefile.common to be used by stubdom build system
tools/xenstore: introduce Makefile.common to be used by stubdom
stubdom: build xenstore*-stubdom using new Makefile.common
stubdom: xenlibs linkfarm, ignore non-regular files
tools/configure.ac | 20 +-
Config.mk | 9 -
stubdom/xenlibs.mk | 13 ++
tools/Rules.mk | 9 +-
tools/libfsimage/Rules.mk | 26 +--
tools/libfsimage/common.mk | 11 +
tools/libs/libs.mk | 36 +--
.gitignore | 44 +---
config/Tools.mk.in | 3 +-
configure | 45 ++++
docs/configure | 45 ++++
m4/paths.m4 | 9 +
stubdom/Makefile | 26 ++-
tools/Makefile | 32 +--
tools/config.h.in | 27 +++
tools/configure | 67 +++++-
tools/console/Makefile | 57 +----
tools/console/client/Makefile | 39 ++++
tools/console/client/main.c | 1 -
tools/console/daemon/Makefile | 50 +++++
tools/console/daemon/main.c | 1 -
tools/debugger/Makefile | 8 +
tools/debugger/gdbsx/Makefile | 20 +-
tools/debugger/gdbsx/gx/Makefile | 15 +-
tools/debugger/gdbsx/xg/Makefile | 25 +--
tools/examples/Makefile | 21 +-
tools/firmware/Makefile | 3 -
tools/firmware/hvmloader/Makefile | 18 +-
tools/flask/utils/Makefile | 16 +-
tools/fuzz/libelf/Makefile | 21 +-
tools/fuzz/x86_instruction_emulator/Makefile | 32 ++-
tools/helpers/Makefile | 31 +--
tools/helpers/init-xenstore-domain.c | 1 -
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/include/Makefile | 1 +
tools/include/xen-foreign/Makefile | 9 +-
tools/libacpi/Makefile | 17 +-
tools/libacpi/README | 6 -
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/call/Makefile | 7 +-
tools/libs/call/Makefile.common | 6 +
tools/libs/ctrl/Makefile | 55 +----
tools/libs/ctrl/Makefile.common | 44 ++++
tools/libs/ctrl/xc_private.h | 2 -
tools/libs/devicemodel/Makefile | 7 +-
tools/libs/devicemodel/Makefile.common | 6 +
tools/libs/evtchn/Makefile | 7 +-
tools/libs/evtchn/Makefile.common | 6 +
tools/libs/foreignmemory/Makefile | 7 +-
tools/libs/foreignmemory/Makefile.common | 6 +
tools/libs/gnttab/Makefile | 9 +-
tools/libs/gnttab/Makefile.common | 8 +
tools/libs/guest/Makefile | 109 +--------
tools/libs/guest/Makefile.common | 84 +++++++
tools/libs/guest/xg_dom_core.c | 1 -
tools/libs/guest/xg_offline_page.c | 2 +-
tools/libs/hypfs/Makefile | 4 +-
tools/libs/light/Makefile | 222 +++++++++----------
tools/libs/light/libxl_dom.c | 2 -
tools/libs/light/libxl_internal.h | 1 -
tools/libs/light/libxl_utils.c | 1 -
tools/libs/stat/Makefile | 70 +++---
tools/libs/stat/bindings/swig/perl/.empty | 1 -
tools/libs/stat/bindings/swig/python/.empty | 1 -
tools/libs/stat/xenstat_qmp.c | 1 -
tools/libs/store/Makefile | 20 +-
tools/libs/toolcore/Makefile | 10 +-
tools/libs/toolcore/Makefile.common | 9 +
tools/libs/toollog/Makefile | 3 +-
tools/libs/toollog/Makefile.common | 2 +
tools/libs/util/Makefile | 27 +--
tools/libs/vchan/Makefile | 9 +-
tools/misc/Makefile | 16 +-
tools/ocaml/xenstored/Makefile | 7 -
tools/ocaml/xenstored/systemd_stubs.c | 2 -
tools/vchan/Makefile | 6 +-
tools/xcutils/Makefile | 15 +-
tools/xenpaging/Makefile | 24 +-
tools/xenstore/Makefile | 83 +++----
tools/xenstore/Makefile.common | 34 +++
tools/xentop/Makefile | 19 +-
tools/xentrace/Makefile | 11 +-
tools/xl/Makefile | 9 +-
tools/xl/xl.h | 1 -
96 files changed, 953 insertions(+), 990 deletions(-)
create mode 100644 stubdom/xenlibs.mk
create mode 100644 tools/libfsimage/common.mk
create mode 100644 tools/console/client/Makefile
create mode 100644 tools/console/daemon/Makefile
create mode 100644 tools/debugger/Makefile
create mode 100644 tools/libs/call/Makefile.common
create mode 100644 tools/libs/ctrl/Makefile.common
create mode 100644 tools/libs/devicemodel/Makefile.common
create mode 100644 tools/libs/evtchn/Makefile.common
create mode 100644 tools/libs/foreignmemory/Makefile.common
create mode 100644 tools/libs/gnttab/Makefile.common
create mode 100644 tools/libs/guest/Makefile.common
delete mode 100644 tools/libs/stat/bindings/swig/perl/.empty
delete mode 100644 tools/libs/stat/bindings/swig/python/.empty
create mode 100644 tools/libs/toolcore/Makefile.common
create mode 100644 tools/libs/toollog/Makefile.common
create mode 100644 tools/xenstore/Makefile.common
--
Anthony PERARD