Wiki:toolchain
zuletzt geändert vor 17 Monate zuletzt geändert am 10.01.2011 17:16:21

Neue Toolchain (Work-In-Progress)

Hier werden z.Zt. alle neuen Informationen, Ideen, To-Do-Liste, etc. für das Toolchain Upgrade gesammelt.

Wo findet die Diskussion statt?

Interessenten verfolgen bitte Ticket #842 [1].
Im IRC auf #fritzbox [2] darf gerne mitdiskutiert werden.

Neu: Target Toolchain SysRoot Feature

Developer er13 hat einen Patch [3] zur Verfügung gestellt, um das BR2_TOOLCHAIN_SYSROOT Feature von buildroot (Upstream) analog im freetz Buildsystem als FREETZ_TARGET_TOOLCHAIN_SYSROOT nachzubilden. Damit die Toolchain verschiebbar (relocatable) ist (wichtig für die Download Toolchain) muss das sysroot-Verzeichnis ein Unterverzeichnis des Prefix sein. Beides wird beim configure Aufruf der gcc-final stage gesetzt.

(./) Bereits eingebaut.

Trouble-Shooting Native Language Support (NLS)?

Die grundsätzliche Frage, die immer wieder auf Router-Plattformen auftaucht:
Braucht man tatsächlich "Native Language Support" (kurz: NLS)?
NLS kann über die uClibc-locales zur Verfügung gestellt werden oder durch den Bau von libiconv (als zusätzliches Paket).

Ohne NLS sind Einsparungen für libc.so* bis zu ca. 200-250Kbytes auf der Box möglich.
Hier ein Bsp. für uClibc-0.9.30.3-git ohne NLS (Target-Toolchain: gcc-4.4.3, binutils-2.21.51.0.5):

/var/mod/root # ls -l /lib/libc.so* /lib/libuClibc-0.9.30.3.so
lrwxrwxrwx    1 root     root           21 Jan 23 23:54 /lib/libc.so -> libuClibc-0.9.30.3.so
lrwxrwxrwx    1 root     root           21 Jan 23 23:54 /lib/libc.so.0 -> libuClibc-0.9.30.3.so
-rwxr-xr-x    1 root     root       418792 Jan 23 20:45 /lib/libuClibc-0.9.30.3.so

Vorsicht ist geboten bei der ABI-Kompatibilität!

Aus uClibc-TODO [4]:

Options such as UCLIBC_HAS_SOFT_FLOAT, UCLIBC_HAS_THREADS, UCLIBC_HAS_LOCALE,
and perhaps others (finalize list) produce a lib with a differing ABI.

Standardmässig ist NLS bei freetz gesetzt.
Wie deaktiviere ich NLS bei uClibc (hier über Config.mod.0.9.30.3)?

cd freetz-trunk
CONFIG_MOD="toolchain/make/target/uclibc/Config.mod.0.9.30.3"
sed -i -r 's/UCLIBC_HAS_LOCALE=y/\# UCLIBC_HAS_LOCALE is not set/g' $CONFIG_MOD

(./) Stand: Die Download Toolchain uClibcs verwenden eine Minimal-Locale (en,de). Daher beträgt die Einsparung nur noch wenige Kilobyte.

Pakete, die NLS benötigen

  • davfs und ntfs (olistudent)

Trouble-Shooting gcc-target

Die Target Toolchain lässt sich jetzt (freetz-trunk svn-rev ≥4999) bauen.
Beim Bau des gcc-target (Phase #3 in toolchain/make/target/gcc/gcc.mk) - sprich gcc-Binary, der auf der Box laufen soll - gibt es noch Probleme.
In [6] wird der Fehler im Build beschrieben, ein Test-Case Script ist angehängt [7].

(./) Behoben.

Trouble-Shooting "moveable toolchain"

XXX: Problem Weitergabe/Nutzung der fertig kompilierten Toolchain auf Fremdsystemen.

[09:37:49] <olistudent> Das ist wichtig, weil der ld implizite Abhängigkeiten nicht in "-L /foo/bar" sucht, sondern nur im sysroot.

Test-Case sieht wie folgt aus:
Das freetz-trunk Verzeichnis umbenennen.
Die config.cache (s.w.u Code-Snippet Box) löschen, da der Pfad zum gcc nicht mehr stimmt.

mv freetz-trunk freetz-trunk.moved
cd freetz-trunk.moved
UCLIBC_VERSION="0.9.30.3"
rm -f source/target-mipsel_uClibc-$UCLIBC_VERSION/config.cache

Falls FREETZ_TARGET_CCACHE=y gesetzt wurde, muss noch das ccache Verzeichnis gelöscht werden (s.w.u. "Fehlermeldungen ccache").

make ccache-dirclean

Letzter Schritt in der Test-Case: Als. Bsp. bauen wir hier davfs:

make davfs2-precompiled

Fehlermeldungen ccache:

[ build.log from 'make davfs2-precompiled' ]
checking for mipsel-linux-gcc... /home/sd/pbuilder/freetz/freetz-trunk.moved/toolchain/target/bin/mipsel-linux-uclibc-gcc
checking for C compiler default output file name... configure: error: C compiler cannot create executables
See `config.log' for more details.

[ source/target-mipsel_uClibc-0.9.30.3/expat-2.0.1/config.log ]
configure:2456: checking for C compiler version
configure:2459: /home/sd/pbuilder/freetz/freetz-trunk.moved/toolchain/target/bin/mipsel-linux-uclibc-gcc --version </dev/null >&5
ccache: failed to create /home/sd/pbuilder/freetz/freetz-trunk/toolchain/build/gcc-4.4.4-uClibc-0.9.30.3/mipsel-linux-uclibc/var/cache (No such file or directory)

To-Do-Liste

[done] uClibc-Locales bauen ohne $UCLIBC_PREGENERATED_LOCALE_DATA
[done] Problem(e) bei Bau von gcc-target
[wip] Klären welche Boxen, freetz Packages, etc. NLS-support benötigen
[done] Cleanup FREETZ_TARGET_GCC_VERSION_4_X settings
[done] PIC? War ab gcc-4.3.x nötig. Vorher nicht. ld "no pic" Patch gebraucht? Problem Grösse der Binaries (Ohne PIC ist kleiner und wäre daher besser für die Box)
[open] …

Anm.: User dileks hat die uClibc-Locales ohne "pregenerated locale data" erfolgreich gebaut (siehe [5]).

Mögliche Stati: open (offen) - wip (in Arbeit) - done (beendet)

Referenzen

[1] http://trac.freetz.org/ticket/842
[2] http://trac.freetz.org/wiki/help/irc
[3] http://trac.freetz.org/attachment/ticket/842/target-toolchain-sysroot.patch
[4] http://git.busybox.net/uClibc/tree/TODO
[5] http://trac.freetz.org/ticket/842#comment:31
[6] http://trac.freetz.org/ticket/842#comment:42
[7] http://trac.freetz.org/ticket/842#comment:36