[rock-devel] overview of sysroot/multilib patches

ROCK Mailing List Archives

Entire message
+ (text/plain)
Author: Stefan Fiedler
To: ROCK Development Mailing List
Subject: [rock-devel] overview of sysroot/multilib patches
Hi all,

here is an overview of changes in the sysroot/multilib journal. The complete
journal can be found at
http://rocklinux.net/submaster/index.websplb?mode=journal&id=50 . The patches
have been tested with various cross-builds (arm, sparc, x86_64 multilib and
64-bit only) and the usual bootdisk and crystal builds. I have tested
different gcc versions and cross-toolchain packages as well.

The toolchain packages have been rewritten with less code to be more easily
understandable and maintable. gcc and binutils now use the --sysroot
configure option which makes e.g. modifying the gcc specs file unecessary and
is generally much less error prone.

The gcc is now build three times before chroot stages to get complete C/C++
cross-compilers with shared libraries including libstdc++. For this a third
build stage before chroot is required. Most packages from stages 1, 2 and 3
are now built one stage later and stage 3 is the first chroot stage.

The build scripts now support separate 32-/64-bit packages in multilib builds.
Packages named *-32bit are built as 32-bit and $bindir etc. point to a
temporary directory as not to overwrite 64-bit files. $libdir however
contains the real location, so that packages with a configure script (or
which consider $libdir otherwise) usually install libraries to the correct
location. The build variable $multilib contains 'lib' or 'lib64' and
indicates where to install libraries, e.g. if a package sets $libdir, it
should do it like this: libdir="$root/usr/$multilib". Packages containing the
MULTILIB flag will be automatically built as 32- and 64-bit in all stages.

The default $confopt now passes $prefix, $bindir, etc. without the $root
prefix to configure. Packages may hard-code these paths into their files, so
they should never contain $root. This fixes e.g. cross-builds of ncurses and
file, and makes it unnecessary to change the paths in $makeopt. In
$makeinstopt, $root is added to the installation paths not via prefix=, but
via DESTDIR=. Packages that understand prefix in $makeopt usually understand
DESTDIR as well, plus some packages only know DESTDIR. For cross-building
packages that don't know DESTDIR one usually has to
add 'prefix=$root/$prefix' to $makeinstopt.

Cross-toolchain packages can now be built for linux26-headers and glibc26.

Various bugfixes and multilib support for basic packages (glibc, ncurses,
grub, ...) are also included.

With best regards,
Stefan Fiedler
rock-devel mailing list