Sun Feb 21 2010

Compiler HipHop sur du 32-bit

hello world, b..

Filed under PHP. 0 comment

Je rentre du taff (oui je bossais ce samedi), et que vois-je, les sources de HipHop sont dispo sur github! C'est cool. J'ai donc entrepris de tester la bête mais ce ne fut pas sans embuches...

A la base ma machine de jeux est un Macbook Pro 13" avec OSX 10.6. Ayant parcouru le wiki ces jours précédents, je savais que je n'allais pas tenter d'installer le bordel sur OSX à cause de libcap. En effet, imposible d'installer cette lib qui est trop linux-centric. Par contre, sous le coude j'ai un server qui tourne sous Slackware en 32-bit. Un des avantages de Slackware est que si ça merde, alors c'est de notre faute. Cette distrib est très archaïque et c'est la raison pour laquelle je l'ai choisi: j'aime bien quand ça merde ;)

Et ça a merdé quand même pas mal.

Pour les dépendances, pas de problèmes. Bien penser à patcher libcurl et libevent avec les diffs fournis dans le source tree de HipHop. Le plus gros problème a consisté à trouver le lien pour choper les sources de Intel® Threading Building Blocks (Intel® TBB). Un sacré paquet de ®, désolé. Et bien le lien le voila. Prendre le .src.tgz.

Ensuite, il suffit de suivre le wiki, puis on arrive au moment où on lance cmake. Si ça commence à déconner chez vous à partir de là, ne pas hésiter à modifier les fichiers concernés dans le répertoire CMake pour que le système puisse correctement trouver vos librairies. Au préalable, bien penser à définir CMAKE_PREFIX_PATH comme stipulé dans le wiki.

Ensuite, make. Là bison 2.4 générait des erreurs pour cause de grammaires mal formées. Il y a plusieurs oublis de ";" dans divers fichiers y. Les lignes concernées sont indiquées dans les messages.

Le gros du travail ensuite a été de fixer de manière incrémentale (make, erreur, fix, make, ok, erreur, fix, make...) toutes les parties du code qui concerne le 64-bit parce que, en fait, HipHop est 64-bit only à l'heure actuelle. Franchement j'ai passé 3 heures à faire ça. Relancer make à chaque fois. Ca m'a tellement gonflé que de une, mes corrections sont plus qu'hasardeuses, et de deux, je n'ai pas pris soin de glisser des #ifdef/#endif pour conserver le code original et pouvoir jouer avec des defines. Au début, trop optimiste probablement, j'ai pensé que seul util/hash.h était concerné. Une grossière erreur ;) Pour info, une bonne partie des fixes consiste à ajouter le suffix ll aux literals, ainsi que de transformer des ssize_t en long int [1].

Finalement, et là je peux vous dire que je balisais, le linker a paqueté tout ça sans encombre. J'en avais plein le cul. J'ai pushé sur github mes modifs temporaires et d'ailleurs au moment où je rédige ce billet, d'autres forks pour 32-bit sont en cours d'élaborations.

Un echo "hello world, bastard\n" vaut mieux qu'un long discours:

Hello world from HipHop

[1]: J'ai repris mes modifs et wrappé les parties concernées entre #ifdef/#endif. C'est censé compiler indifféremment sur 32 ou 64-bit. Mon fork a été mis à jour.

Add a comment

Formating help