Buildroot

Buildroot is a nice, simple, and efficient embedded Linux build system.

Important links

 * Buildroot main page
 * Bug tracker
 * Autobuilders results
 * Project patchwork

Developer days
Upcoming:
 * Buildroot Developer Days, October 2014, Düsseldorf, Germany, before or after ELC-E.

Past:
 * Buildroot Developer Days, 3-4 February 2014, Brussels, Belgium, after FOSDEM.
 * Buildroot Developer Days, 26-27 October 2013, Edinburgh UK, after ELC-E.
 * Buildroot Developer Days, 4-5 February 2013, Brussels Belgium, after FOSDEM.
 * Buildroot Developer Days, 3-4 November 2012, Barcelona Spain, before ELC-E.
 * Buildroot Developer Days, 3 February 2012, Brussels Belgium, before FOSDEM (report)
 * Buildroot Developer Days, 29 October 2011, Prague, Czech Republic, after ELCE (report)

List of forks

 * . A Rasberry-Pi related fork.
 * . Another RPi related fork, with a lot of focus on Qt5 and GStreamer.

Todo list
This is a list of improvements that we would like to see in buildroot. Feel free to add suggestions here. If you're working on one of these items, put your name and the date behind it, to avoid duplicate work.

There are a number of patches that have been determined to be useful but for various reasons nobody currently has time to review or test them. Anybody, especially a person new to buildroot, is welcome to adopt these patches and resubmit them to the mailing list. These patches can be viewed by looking at the following link - http://patchwork.ozlabs.org/project/buildroot/list/?state=1&delegate=7151

Packages

 * Create a package for the x86-video-fbturbo driver. See https://github.com/ssvb/xf86-video-fbturbo.
 * Create a package for the Qt5 Cinematic Experience demonstration. See http://quitcoding.com/?page=work.
 * Create a package for the Qt5 demo/benchmark application at https://github.com/prabindh/xgxperf.
 * Bump Valgrind to 3.9.0. This allows to enable MIPS32 and MIPS64 support.
 * Switch the procps package to use http://sourceforge.net/projects/procps-ng/ which is the new active upstream.
 * Remove the texinfo package, no longer needed after ct-ng backend removal
 * Create a package for WebkitNix. See https://github.com/WebKitNix/webkitnix.
 * Allow a second Barebox build, to build the MLO/SPL. See http://patchwork.ozlabs.org/patch/207942/ and http://patchwork.ozlabs.org/patch/207943/. The proposed design is to have boot/barebox/ containing the common stuff, and then two separate packages boot/barebox-first/ and boot/barebox-second/ (names to be chosen). There is only one version selection, but each package allows to define the configuration to be used. Design should be a little bit like package/gcc, where we have multiple gcc builds, but share a lot of common definitions between the packages.

Documentation

 * Document how to contribute (patches to list instead of bugzilla, SOB, formatting rules, acked-by and tested-by, how often to repost, what to expect, CC's, ...) basic guide
 * Document how a package patch should be formatted (Comment, SOB, file naming rules, ...) + send upstream + CC sendpatches
 * In documentation, explain how to report a bug
 * Upgrade the buildroot website (ThomasP has a mockup of a new website)

Build/release infrastructure

 * Peter sets up a planet on whatever server and links to it from buildroot website

Core Buildroot infrastructure

 * ldconfig handling is broken, see http://patchwork.ozlabs.org/patch/255486/


 * Locale handling is broken: it doesn't take into account the alias file when purging aliases. See this mail from patchwork cleanup #3 and this patch that also fixes a locale problem, but not everything


 * It would be nice to add a br-configure script in host/usr/bin for autotools-based packages. Run ...BUILDROOTSDK/usr/bin/br-configure --enable-foo --disable-bar, and the br-configure script would call the ./configure script in the current directory passing all the right options (--host, and all environment variables CC, LD, AS, AR and such).


 * Make the HOST-directory a relocatable SDK:
 * Make sure that all binaries and libraries built for the host are built with a rpath pointing to host/usr/lib. Normally, this should already be the case, but it's worth checking.
 * Change the rpath value to $ORIGIN/../lib instead of the current absolute path $(O)/host/usr/lib.
 * Modify the compiler wrapper program of external toolchains so that instead of using a fixed location for the compiler tools, it deduces their location in a relative manner from its current location.
 * Modify/patch pkg-config so that instead of having a fixed location for the PKG_CONFIG_PATH and PKG_CONFIG_SYSROOT_DIR, those are deduced from the location of the pkg-config binary. This will allow a pkg-config binary that has been moved to still operate properly, without having to set any environment variable.
 * Write a shell script, installed in host/usr/bin, which would mungle the libtool .la files, the qmake.conf file and the CMake toolchain file to set the correct path. This script reads a file (can be host/usr/share/buildroot/location) which contains the original location of the SDK. This allows the script to do the right modifications on all the libtool, qmake.conf and cmake files. Once this is done, the script changes the host/usr/share/buildroot/location file so that it contains the new location.
 * Modify the external toolchain wrapper so that it bails out and warns the user if the directory it is executed in doesn't match the location of host/usr/share/buildroot/location. We haven't discussed how this could work with internal and crosstool-NG toolchains, though.


 * Properly detect thread and TLS support in external toolchains, or make TLS knob driven by thread availability in the toolchain. See the discussion in http://patchwork.ozlabs.org/patch/288051/ as reference)


 * Add intrumentation scripts to analyse package installed files:
 * identify what package installed what files, identify files overriden by a later package
 * find libraries with wrong RPATH/RUNPATH tags
 * detect unused .so libs (eg. shared libs that are not DT_NEEDED by anything - note: only detect those libs, don't remove: can be used as plugin (dlopen), or used by an pplication built outside Buidlroot)

TODO items under discussion
Here are some nice-to-have's for which it is not entirely clear if and how they could be implemented:


 * Out-of-tree builds, which allows the package source to be shared between different output directories and between host and target compiles.
 * It would be nice if you could run a buildroot command that prepares a local copy of a package's source, and allows you to generate patches for it later. This could use git or quilt to keep track of the patches.
 * It would be nice if there was a make target to reinstall everything to the target (i.e. remove all the target-installed stamps, remove the root stamp, maybe remove the target too). However, what is missing is the copying of the toolchain support files (libc.so etc.).  It's not obvious that this can be done in a reliable way.
 * It would be nice if there was some common infrastructure to combine the images into one final flash or SD card or whatever image. However, it is probably difficult to find the commonality of all the different use cases.  And we don't even see all these use cases.
 * Yann E. Morin is working on this topic.
 * To facilitate debugging, all packages should be installed to the staging directory. The target directory should in fact be a subset of the staging directory. See the FOSDEM 2013 discussion at http://elinux.org/Buildroot:DeveloperDaysFOSDEM2013, and the discussion around patch http://patchwork.ozlabs.org/patch/252718/. This is however a significant change in Buildroot, so probably difficult to implement, and will raise a number of quite complicated questions.