overview of sysroot/multilib patches

Stefan Fiedler <e0155490-oe7qfRrRQffzPE21tAIdciO7C/[email protected]> Fri, 2 Nov 2007 00:07:51 +0100
Newsgroups gmane.linux.distributions.rock.devel
Message-ID <[email protected]>
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