Parce que j’ai mis un moment à trouver les bonnes options pour cross-compiler V8 (le moteur Javascript de Google) sur ARM9 (armv4), voici les étapes que j’ai suivies.
Tout d’abord, V8 utilise execinfo. Et comme uClibC ne l’intègre pas (contrairement à glibc) il faut légèrement feinter. N’ayant pas besoin de backtrace dans mon cas, il suffit de créer un fichier execinfo.h redéfinissant les fonctions de backtraces.
#ifndef _EXECINFO_H_ #define _EXECINFO_H_ 1 #include __BEGIN_DECLS int backtrace(void**,int){ return 0; } char** backtrace_symbols(void* const*,int){return NULL; } void backtrace_symbols_fd(void* const*,int,int){} __END_DECLS #endif /* !_EXECINFO_H_ */ |
Ce n’est pas super propre, mais ça fonctionne. Donc en se basant sur le trunk de V8, il suffit d’utiliser les commandes suivantes. Partir du trunk est important car il contient un patch récent pour ARM nécessaire pour la compilation.
En plaçant en gros bourrin le execinfo.h à la racine de V8 et en laçant le script suivant, V8 compile. (Nécessite de définir BUILDROOT_PATH tout de même)
#!/bin/bash export GCC_VERSION=44 export CC="$BUILDROOT_PATH/output/staging/usr/bin/arm-linux-gcc" export CXX="$BUILDROOT_PATH/output/staging/usr/bin/arm-linux-g++" export CXXFLAGS="-I. -mcpu=arm920t" export CFLAGS="-I. -mcpu=arm920t" scons mode=release arch=arm library=shared prof=off os=linux profilingsupport=off snapshot=off |
Il n’y a plus qu’à stripper le .so « Et voilà ! »
Par contre si quelqu’un a une solution plus propre pour execinfo je suis preneur.
Mots-clefs : ARM, backtrace, Buildroot, cross-compilation, execinfo, Google, uClibc, V8
-->









Je ne connais pas, mais la version la plus propre que je vois c’est de mettre des flags correspondant à la uClibC. Et pourquoi pas trouver l’équivalent de ces backtraces dans ton environnement. Mais c’est vrai que j’ai eu des problèmes de backtrace moi aussi en essayant de compiler valgrind pour arm. Au final j’ai du abandonner les manip, c’est pas pour rien que valgrind n’est pas porté sur arm