Entre SF et époque Ming (W)

Compiler manuellement StockFish sous Windows avec MinGW

Dans Le Vieil Homme et la Mer (1952), Ernest Hemingway plonge le lecteur dans un combat épique (à cause du long nez pointu en forme d’épée du perciforme et plus tard des arêtes) entre un pêcheur et un gros poisson, un marlin très malin et noble.

Combien mesure un tel monstre aquatique de Science Fiction ?

Le code source de SF comprend 12.4 K lignes en 41 fichiers dont :

  • 18% de commentaires : 2.2 K lignes
  • 22% de lignes vides : 2.7 K lignes
  • 58% de code : 7.2 K lignes

Vol au-dessus d’un nid de chauves-souris

Stocafisso
Stockfish à Lofoten, Norvège

Sans un radar d’écholocation, entrer dans les entrailles du code source de SF risque fort d’avoir une analogie pointue avec la lutte contre le monstre marin que le pêcheur arrivera à nommer "son frère".

Avant d’en arriver à une telle familiarité dans la pénombre obscure des threads C++ qui réchauffent les CPU à la recherche du meilleur coup échiquéen dans l’arbre des variations, remontons à l’ancêtre, Glaurung de Tord Romstad. C’est un dragon doré mais très vilain de la saga nordique du légendaire de J. R. R. Tolkien.

Art culinaire italo-norvégien ou l’art d’accomoder le Rybka

Glaurung, le père de tous les dragons fut fatalement transpercé par le glaive de Turin qui n’est pas s’en rappeler une ville du nord de l’Italie où, — Marco Costalba ne démentira pas après son fork à partir de Glaurung —, on apprécie le baccalà que l’on préfère déguster sous le nom de stocco ou stocafisso en Calabre dans le sud, estocafic à Nice ou estofinado en Averyron.

Aux îles Lofoten au nord de la Norvège, on pratique l’art de sécher la morue et la production du Stockfish y est très renommée. Bien que cela n’a rien à voir avec cette cuisine, en France c’est sur grand écran que l’on appréciera le film de Sylvie Testud : "les Morues" (2014) avec des arêtes dans le "o".

Compiler manuellement SF sur Windows avec MinGW

Commentons la procédure donnée sur le support de SF : Compiling Stockfish on Windows.

Le lien n’est pas ici fourni volontairement car la procédure est commentée ci-dessous pour information. On préférera en pratique celle du prochain article à venir où on n’aura plus besoin de cette version de MinGW.

MinGW est l’environnement Minimaliste de compilation GNU pour Windows mais MinGW peut très bien prend plus de place que Cygwin selon les options d’installation. Qui dit GNU dit gratuit et open source. Contrairement à Cygwin, le moteur d’échecs généré n’a pas besoin d’une DLL supplémentaire de compatibilité de Unix à Windows. Avec MinGW, on obtient un exécutable natif Win32 mais avec certaines restrictions quant à la compatibilité POSIX (offerte par Cygwin) qui ne sont pas préjudiciables pour le développement de SF.

Avant de lancer le setup derrière un pare-feu, autoriser :
C:\Users\Chess\Documents\StockFish\MinGW\Prog\bin{mingw-get.exe

Ensuite il est précisé "Make sure to check the box to install MSYS".

Il est fort possible d’avoir parcouru toute l’installation sans avoir trouvé cette option MSYS (Minimal System qui n’a rien à voir avec Microsoft). Son absence entraîne une erreur d’exécution du shell stoppant le processus de compilation du code source. Le problème est que cette option n’apparaît que si on scrolle la liste d’options des compilateurs.

Repository Catalogues

Use pre-packaged catalogues or download the latest versions ?
[x] Use pre-packaged repository catalogues 20120426
[ ] Download latest repository catalogues
Le choix est laissé à l'utilisateur. On a gardé l'option par défaut mais on peut changer en réinstallant par dessus.

MinGW Compiler Suite

[x] C Compiler (option par défaut)
[x] C++ (option indispensable car SF est en langage C++. L'extension des fichiers source est .cpp)
[ ] Fortran
[ ] ObjC
[ ] Ada

Scroller verticalement vers le bas pour faire apparaître l'option MSYS recherchée :

[x] MSYS Basic System
[ ] MinGW Developer Toolkit Includes MSYS Basic System

Vient ensuite une modification du PATH pour que Windows puisse rechercher dans les chemins candidats les exécutables de MinGW lors du make qui lance la compilation. C’est pour éviter ce genre de manipulation que l’article suivant proposera une solution toute intégrée où on n’a pas besoin de gérer le PATH.

Sinon on peut le faire avec le Control Panel > Edit the system environment variables > System Properties > Advanced > Environment Variables... > System variables > Path > Edit...

Alternativement on peut modifier le PATH en ligne de commande sous le prompt MS/DOS en veillant bien à ajouter deux nouveaux chemins à l’existant et non pas à tout remplacer.

cd C:\Users\Chess\Documents\StockFish\

Compilation et optimisation de la taille de l’exécutable de SF :

C :\Users\Chess\Documents\StockFish\Source\src> REM Compilation

stockfish.exe 911 KB est généré (plus de 4 MB avant la dernière opération de strip).

IMG/html/compilesf.html
Traces du make lors de la compilation de StockFish dans Windows

L’inconvénient de cette méthode commande ligne est qu’il faut modifier le PATH (ce qui peut entraîner des conflits avec d’autres outils) et que les binaires (.exe) et autres fichiers de compilation intermédiaires objets (.o) sont générés par défaut dans le répertoire Source/src géré par Git hors on ne gère dans un système de versions que le code source et non pas le code généré.

Il est possible qu’en approfondissant le paramétrage du make (appelant indirectement Source/src/Makefile), on puisse trouver comment supprimer les fichiers intermédiaires de compilation, mais cela reste lourd.

D’où la nécessité de trouver un Environnement de Développement Intégré (IDE) gratuit probablement plus complexe à appréhender la première fois (si c’est votre premier IDE) mais plus facile à installer et à utiliser une fois le projet configuré et surtout beaucoup plus prometteur en terme de fonctionnalités indispensables et déjà intégrées ou intégrables pour le développement d’un projet significatif (12.4 K lignes) comme SF.

Posté le 10 mai 2013 par Matt