Known Issues

From Void Linux Wiki
Jump to: navigation, search

Creating base chroot for other architectures on x86_64-glibc

After bootstrapping the x86_64 architecture as described in the XBPS source packages collection you may wish to also create the base-chroot and base-chroot-musl meta packages for some or all of the other architectures.

Accomplishing this is actually as simple as running the following command for e.g. i686-musl:

./xbps-src -a i686-musl -N pkg base-chroot-musl

There is, however, at least one known issue with a cross built python-2.7 for i686, the 32 bit variant. It fails to run certain scripts such as the gn or gyp scripts used to generate ninja which are found in Chromium builds that are part of some packages (chromium, webkitgtk, webkit2gtk, qt5-webengine ...).

Thus it is strongly recommended to rebuild python-2.7 using the native i686 environment once the base chroot for this architecture was cross built.

./xbps-src -m master-i686 zap
./xbps-src -m master-i686 -r hostdir/binpkgs binary-bootstrap i686
./xbps-src -m master-i686 -f pkg python

The -f here makes sure the already existing package is overwritten and registered.

The exact reason why a cross-built python-2.7 for i686 fails for these specific scripts is yet unknown. It possibly has to do with the not easy to solve problem of defining the corrent value for sizeof(off_t) in the autoconf cache presets found in the common/environment/configure/autoconf_cache architecture specific scripts. The value of sizeof(off_t) cannot be determined by configure when cross compiling, because cross compiled test programs cannot run on the host architecture.

Re-building gcc for gcc-fortran, gcc-objc, gcc-objc++ ...

After a manual bootstrap, gcc was built in bootstrap mode, which skips some languages that are later on required for certain packages. Most importanly this is gcc-fortran which is not yet there.

In order to make the compilers for the additional languages available, gcc needs to be built again using the native environment(s).

There also seem to be issues at least for a cross compiled gcc for i686 and i686-musl which may bite you late in building up a repository from scratch.

The best way to go here is to fore register the gcc packages and subpackages when building them in a native environment.

For example to not only build the gcc-fortran packages for the architectures which can provide a native environment on a x86_64-glibc system, but also rebuild gcc and all its already registered libraries again, run:

./xbps-src -m master-i686 -f pkg gcc
./xbps-src -m master-x86_64-musl -f pkg gcc
./xbps-src -m master-i686-musl -f pkg gcc

After you rebuilt the entire GNU compiler collection, don't forget to update or re-initialize the build environments. You may wish to create a tiny script, because it could be required to do that again in case some (bad) package breaks your environment(s).

#!/bin/sh
# Initialize xbps-src build environments for x86_64, i686, x86_64-musl and i686-musl
./xbps-src zap
./xbps-src -r hostdir/binpkgs binary-bootstrap
for arch in i686 x86_64-musl i686-musl; do
    ./xbps-src -m masterdir-${arch} zap
    ./xbps-src -m masterdir-${arch} -r hostdir/binpkgs binary-bootstrap ${arch}
done