For the past couple of weeks I have been working on streamlining the handling of packages in crosstool-NG. Making all the packages handled consistently was the primary goal, since this will facilitate further changes, such as adding download validation, etc.

At this time, this means all packages now support building from either released tarballs (unless a package uses rolling releases, like elf2flt); or from a checked out copy out of vendor’s repository (or really, from any repository), or from a custom location (tarball or directory). For version control systems, CVS/Subversion/Git/Mercurial are supported (Mercurial support had to be added to support checking out the GMP out of the vendor’s repository).

A caveat is that many of the packages fail when built out of the vendor’s VCS: in that case, the patches distributed with crosstool-NG are not applied. I hope that eventually more patches will find their way upstream and most of the stuff will work in a “bleeding edge” configuration, too.

Unfortunately, I didn’t find a way to make this change backward compatible with regard to the configuration files using Kconfig. It may be possible to write a shell script to do such conversion, but I don’t want to waste the time on that. If anyone feels like doing that, submit a PR - I’ll gladly merge it.

I am also considering two options with regard to bootstrap script and the generated files for kconfig. I currently made all the auto-generated files be generated from bootstrap. This takes some time, though: as it was written in Bash (to support current requirements for Crosstool-NG installations), it is somewhat slow - taking about a minute to generate all the files on my machine. I can check in these files into the repository, switching to gcc-like process (where auto-generated stuff is in the repository and it is a responsibility of the developer to regenerate it when making changes). Opinions welcome.

A few other caveats worth noting:

  • Custom GLIBC add-ons are no longer supported. They never were fully supported (as they would have failed to download, they had to be placed into the saved tarballs’ location manually). If this affects you, post to the mailing list with the description of the add-on (download location, name, etc) and I’ll consider how to support it.

  • Pre-generated locale support in uClibc is retired. It is currently broken on master (and seems like noone has noticed it in at least a few years), and this is not supported at all by uClibc-ng.

Future work:

  • Make config.sub/config.guess also a package that will override the default scripts shipped with Crosstool-NG.

  • Create autoconf-archive and gnulib packages, needed to rebuild certain components out of their version control systems (gettext, m4, libiconv, libtool).

  • Switch the build process from being step-based (i.e. “companion libs for host”) to package based (e.g. “gettext for host”). This will allow for finer tuning of dependencies, and making cross-native toolchains first class citizens.

Happy 4th of July, all.