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
