Waf migration proposal.
Amar Takhar
amar at rtems.org
Sat Mar 7 01:46:41 UTC 2015
The following is a proposal to lay out the beginnings of a plan to move from the
current auto* build system to the new waf build located at
http://git.rtems.org/amar/waf.git.
This is meant as an initial overview open for discussion. The entire project
will be fleshed out on the wiki and using milestones on the roadmap populated
with tickets for each task that needs to be completed. This will help give
everyone an idea of progress and a place to collect any issues that may arise.
* 1 Initial commit
~~~~~~~~~~~~~~~~
1.1 move headers
1.2 introduce waf
1.3 apply all include fixes (from 'fix' branch)
1.4 remove documentation
* 2 Tests
~~~~~~~
2.1 migrate tests to waf
* 3 Source Move
~~~~~~~~~~~~~
3.1 new source layout
* 4 Buildbot
~~~~~~~~~~
4.1 Introduce automated building using buildbot
* 5 Tools
~~~~~~~
5.1 build all tools, run all test suites to ensure RTEMS builds as
expected.
* 6 Verification
~~~~~~~~~~~~~~
6.1 Final version containing all testing required in order to verify the
build.
6.2 create new rtems-docs repository with new reST + Sphinx documentation
containing data from docs/ (This is already complete)
It was brought up previously the above may be too much at once. I've had a lot
of time to think about it and I believe there is no other way to do it for the
following reasons:
* The current build is monolithic in nature. It literally touches everything
if you only want to build 1 BSP.
* There is no way to verify old+new other than hashing the important parts of
the resulting object files. Using this method it does not matter how much we
change at once.
* The incremental changes, in their smallest units are so large that each one
is a radical change that requires a lot of testing. If we do each one then
test or do it all and test we garner no benefit doing it in between steps
other than 5 times the work. This is due to our test method: object
checking and testsuite.
* Trying to make changes using the current build system is worse as the auto*
build provides no way to verify itself whereas waf does.
* waf offers us the opportunity to build RTEMS in an extremely concise manner.
Once we verify it we know it will build that way on every system or fail
during the build.
While moving forward with this we will still have 4.11,4.12 or however many
iterations of the 4.x branch until the waf build can be called stable. While
there are concerns about RTEMS being seen as unstable this can be mitigated or
completely removed by detailing our intentions and not cutting any releases of
the 'master' branch.
I will be writing a tool that will map old source paths to new ones. You could
for example go:
# ./find.py <file>
- get a list of files that match that file in their new location
# ./find <path/to/file>
- same a above just a more exact search
# ./find.py <hash>
- locate a file based on old file hash
This will be useful to allow users to make their way around the new source. It
will also offer an easy way to port patches to the new branch from 4.x.
Also, no code freeze will be necessary. None of the source file contents will
change only their names. It should be possible to use the above tool to write
something that will automatically convert patches if someone want to do this.
Otherwise as long as you point it to the new file all patches will apply
cleanly.
The expected timeline from milestones 1-5 inclusive is 1 month.
To be clear: this is a proposal where all development moves to the 4.x branches
until this project is complete. Once done commits into the 4.x branches can be
merged into master one by one where they will go through review and testing via
Buildbot. Porting should in most cases be trivial as pointing to the new file
location. Any build changes will be trivial to port to waf from auto*.
Any and all comments welcome feel free to ask for clarification on any points!
Amar.
More information about the devel
mailing list