Autotools : utiliser une toolchain spécifique

Salut,

Pour un projet donné j’ai besoin de passer d’une toolchain à l’autre (gcc natif par défaut / gcc natif 4.4 / cross-compiler arm-linux-gnueabi 4.4).
J’utilise autotools / libtool.

Quand je définis le compilateur directement dans configure.ac, pas de problème :

CC="gcc-4.4" CXX="g++-4.4"
Mais c’est un peu pénible d’éditer ce fichier à chaque fois que je veux changer de toolchain. Je voudrais pouvoir choisir ma toolchain au moment de l’autoreconf en passant des paramètres sur la ligne de commande (genre –native / –native44 / –arm44).
Pour piloter autoreconf j’utilise le script autogen.sh suivant :

[code]#!/bin/sh -e
test -n “$srcdir” || srcdir=dirname "$0"
test -n “$srcdir” || srcdir=.
test -d “$srcdir/m4” || mkdir “$srcdir/m4”

autoreconf --force --install --verbose “$srcdir"
if [ ! -n “$NOCONFIGURE” ]; then
”$srcdir/configure" "$@"
fi[/code]
J’ai essayé toutes sortes de choses pour définir CC et CXX à partir d’autogen.sh et non pas de configure.ac mais sans succès (je vous passe les tentatives merdiques hein).
Une idée ? Ça commence à me rendre chèvre…

Bonus : j’ai pas encore mis le nez là-dedans mais faudra aussi que j’arrive à appeler le bon strip en fonction de la toolchain choisie (à intégrer dans une cible make). Si vous avez une idée pour me faire gagner du temps… :wink:

Je me suis toujours gardé aussi loin que possible des autotools donc je ne vais pas pouvoir beaucoup t’aider, mais ne peux-tu pas passer par manipuler ton environnement ? En changeant simplement ton PATH ou modifier des linkage par exemple ?

Ben jusqu’à présent j’ai essayé grosso modo deux choses (sans compter toutes les variantes, bricolages dans le configure.ac et/ou Makefile.am, …) :

  • export CC / CXX avant d’appeler autoreconf
  • passage des variables sur la ligne de commandes configure (à ma connaissance autoreconf ne prend pas les variables d’environnement en compte)
    Sans grand succès évidemment. J’y suis quand même depuis cet après-midi entre la lecture de docs et les essais, j’ai fini par craquer et appeler à l’aide… :mrgreen:

Le PATH n’est pas faisable : gcc / gcc-4.4 / arm-linux-eabi-gcc-4.4 sont tous dans /usr/bin.
Je ne comprends pas “modifier les linkage”.

C’est la première fois que je mets vraiment le nez dedans (jusqu’à présent j’avais utilisé des formules “toutes faites” quand j’utilisais autotools, donc je n’avais pas vraiment conscience du merdier que c’est) et je dois avouer que ça me plaît moyen.
Mais bon la lib que je développe doit tourner partout (Linux, BSD, peut-être même OSX), sur plusieurs archis différentes incluant de la cross-compilation, et avec pas mal de dépendances. Le fait que c’est une lib partagée n’arrange rien. Donc le couple autotools / libtool me paraît quand même le plus approprié, à mon grand malheur : c’est une question de compromis concernant la complexité des outils / de l’environnement. Enfin je me dis que c’est juste un mauvais moment à passer, quand j’aurai compris ça sera bon (j’espère)… :unamused:

[quote=“syam”]Le PATH n’est pas faisable : gcc / gcc-4.4 / arm-linux-eabi-gcc-4.4 sont tous dans /usr/bin.
Je ne comprends pas “modifier les linkage”.[/quote]
Tu crée un répertoire par exemple :

$ mkdir /tmp/bin $ ln -s /usr/bin/gcc-4.4 /tmp/bin/gcc $ PATH="/tmp/bin:${PATH}"
C’est sale, hein ?

C’est la première fois que je mets vraiment le nez dedans (jusqu’à présent j’avais utilisé des formules “toutes faites” quand j’utilisais autotools, donc je n’avais pas vraiment conscience du merdier que c’est) et je dois avouer que ça me plaît moyen.
Mais bon la lib que je développe doit tourner partout (Linux, BSD, peut-être même OSX), sur plusieurs archis différentes incluant de la cross-compilation, et avec pas mal de dépendances. Le fait que c’est une lib partagée n’arrange rien. Donc le couple autotools / libtool me paraît quand même le plus approprié, à mon grand malheur : c’est une question de compromis concernant la complexité des outils / de l’environnement. Enfin je me dis que c’est juste un mauvais moment à passer, quand j’aurai compris ça sera bon (j’espère)… :unamused:[/quote]
Je ne voulais pas remettre en cause ton choix (même si pour la même chose cmake devrais pas être des plus mauvais). J’ai un ami qui s’est mis il n’y a pas trop longtemps à la libtool et après avoir bien souffert pendant 1 ou 2 soirée il en était plutôt content, c’est que ça ne doit pas être si mal.

Ah oui j’avais pas compris ça comme ça hier soir. C’est crade effectivement mais ça devrait fonctionner, en toute logique.
Je te dirai ça plus tard dans la journée, quand j’aurai un peu émergé.