Hi all,
I want to give my opinion on the discussions that happened here in
Berlin regarding the build system evolution.
And also, choose the direction for next development steps.
# Laze presentation #
Kaspar presented his new tool that replaces the current Make based build
system based on a custom python software reading the configuration and
generating `ninja` files to builds.
It uses YAML description for modules, application, and toolchain elements.
GOOD
* The YAML description is a good direction into what I need as a
"descriptive language" for the modules.
* Using a meta build-system, removes the need to parse all the
configuration from scratch each times an application is build which is a
static time consumption for CI.
It could be done in make but may be more cumbersome to write and maintain.
* Refined module build configuration to only show the needed flags and
dependencies, it will help a lot for caching.
* I love python.
BAD
* Python is not a build system language, so not designed to do 'targets'
generation but more executing commands after the other.
* Introducing our own custom build language framework instead of using
an existing one, so a non standard tool.
* The build system implementation (how to parse yaml files, generate
build rules), is not separated from the laze tool itself, so hard to
have the implementation stored in the repository while having a generic
tool installed globally.
* Many argument are based on speed, but the speed improvement are not
all a result of using 'laze' only, but cleaning up concepts in general.
# Criticism of the current make build system #
However, I agree that our current build system has a lot of flaws that I
would like to see solved.
* Its necessary to run `make clean` all the time because there are
changes that do not correctly trigger rebuild, so you are never sure
* The module definition/configuration is not structured and descriptive
so is problematic to provide finer granularity module building, all
modules see all CFLAGS, INCLUDES, and included modules MODULE_ macros.
* Its now impossible to cache results between applications as they
are done with different config.
* Not all dependencies are explicitly described, so hard to understand
the optional dependencies, the dependencies on interface, dependencies
depending on configuration. This would also help refining module build
configuration.
* Our current build system only takes care of building one application
for one board. For the CI and maintainers, when building several
targets, they must re-execute make from scratch for each configuration.
* And the initial tool checking, is it linux, modules discovery, should
be done every time. And this really adds up on many targets builds
* It can only be solved correctly by first having structured module
description as you can parse it once and apply it to different
configurations
* There is no support for building in a common build directory so it
takes a lot of space and also rebuilds multiple time the same thing.
* It currently makes no sense, as module have different
configurations, but after fixing the previous issues, one built module
configuration could be shared between different apps, saving space and
compile time.
# Next steps together #
To go forward and use what he developed as a possible solution, I
proposed to start a documentation phase, on both his new system + YAML
module format, and on what and how things are currently done in the
build system.
Adding user and developer documentation for the current system would
fill the lack of documentation and also help describing all the
currently existing features, show the problems, find forgotten requirements.
And documenting his description format and his tool could show what are
the benefits of his choices and also the tradeoffs.
One of my question is, is it interesting to integrate some changes in
the current make system, like some early module description, even if
replaced later by another build system ?
I will open issues on github to follow the next steps.
Cheers,
Gaëtan
On 01.12.2017 10:49, Kaspar Schleiser wrote:
Hi Matthias,
On 12/01/2017 10:29 AM, Matthias Waehlisch wrote:
When are you gonna take a look at my ninja-based build system? It
solves 1-3 quite nicely, and more. You could save a lot of time.
Pointer?
https://github.com/kaspar030/RIOT/tree/add_laze_buildfiles
Don't expect a nice out-of-the-box experience (yet).
Kaspar
_______________________________________________
devel mailing list
devel@riot-os.org
https://lists.riot-os.org/mailman/listinfo/devel
_______________________________________________
devel mailing list
devel@riot-os.org
https://lists.riot-os.org/mailman/listinfo/devel