From d894c48660a573f257f76fe075e512415fdd0f91 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 6 Mar 2019 14:41:00 +0100 Subject: new module "sourceset" to match source file lists against configuration data In QEMU a single set of source files is built against many different configurations in order to generate many executable. Each executable includes a different but overlapping subset of the source files; some of the files are compiled separately for each output, others are compiled just once. Using Makefiles, this is achieved with a complicated mechanism involving a combination of non-recursive and recursive make; Meson can do better, but because there are hundreds of such conditional rules, it's important to keep meson.build files brief and easy to follow. Therefore, this commit adds a new module to satisfy this use case while preserving Meson's declarative nature. Configurations are mapped to a configuration_data object, and a new "source set" object is used to store all the rules, and then retrieve the desired set of sources together with their dependencies. The test case shows how extract_objects can be used to satisfy both cases, i.e. when the object files are shared across targets and when they have to be separate. In the real-world case, a project would use two source set objects for the two cases and then do "executable(..., sources: ... , objects: ...)". The next commit adds such an example. --- docs/markdown/snippets/sourceset.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 docs/markdown/snippets/sourceset.md (limited to 'docs/markdown/snippets') diff --git a/docs/markdown/snippets/sourceset.md b/docs/markdown/snippets/sourceset.md new file mode 100644 index 0000000..7c09eb5 --- /dev/null +++ b/docs/markdown/snippets/sourceset.md @@ -0,0 +1,8 @@ +## New `sourceset` module + +A new module, `sourceset`, was added to help building many binaries +from the same source files. Source sets associate source files and +dependencies to keys in a `configuration_data` object or a dictionary; +they then take multiple `configuration_data` objects or dictionaries, +and compute the set of source files and dependencies for each of those +configurations. -- cgit v1.1