Table of Contents
Commit 2017-03-15
Portage Visual Studio 2015
Comme je l'avais dit dans mes précédents commits, je travaille depuis un bon bout de temps sur la mise à jour des bibliothèques & compilateurs utilisés par Metafor. Pour rappel, les buts sont les suivants:
- Compilation de Metafor sous MacOSX: MacOS nécessite les versions les plus récentes de VTK et Qt pour fonctionner correctement. En particulier les versions de VTK et Qt qu'on utilisait n'étaient plus compilables depuis la mise à jour “Sierra”.
- Utilisation plus généralisée du C++11 / C++14: à ce niveau, nous étions limités par le compilateur le plus vieux parmi ceux qu'on utilise sur toutes les machines, c'est-à-dire le compilateur Visual Studio 2012 qui ne supporte que quelques nouvelles fonctionnalités C++11 (auto, fonctions lambdas basiques, etc.).
J'ai donc porté le code pour utiliser le Visual Studio 2015 et j'en ai profité pour mettre à jour toutes mes libs. Le code est donc compilable avec les toutes dernières versions de toutes les bibliothèques, sauf python qui reste en 2.7.x. La migration vers python 3 sera effectuée plus tard (c'est un travail énorme).
Le Visual Studio 2017 est sorti la semaine passée mais n'est pas encore utilisable (à cause de Parasolid entre autres qui ne le supporte pas encore).
Le code reste évidemment compilable avec Visual Studio 2012.
En pratique, voici les versions utilisées sur mon PC (voir aussi Versions des libs/progs installés sur les machines du service):
- Visual Studio 2015 Community: appelé aussi “VS14” ou “msvc19”. Supporte le C++11 et est gratuit! Il est aussi assez joli, et semble avoir intégré des capacités de déboguage accrues (codes parallèles). Voir site microsoft. La version 2015, qui est difficile à trouver depuis la mise à jour 2017, est conservée sur le NAS. Au niveau du code source, tout a compilé du premier coup, sauf la visu des outils Abrawal où le compilateur ne s'en sort pas de manière assez étonnante (j'ai dû ajouter des accolades
{}
autour d'un blocfor
alors que celles-ci ne sont pas nécessaires). - Intel Parallel Studio 2017 Update 2 (MKL, TBB): On a maintenant la possibilité d'utiliser TBB comme threading model avec le Pardiso (à tester!). Pour ceux qui ne compilent pas les libs, la version Community gratuite (MKL+TBB sans les compilateurs ni les outils de debug et profilage) est suffisante.
- zlib 1.2.11: rien de neuf, mis à part des bug fixes.
- python 2.7.13+: compilable grâce au travail de Kovid Goyal, le développeur principal de Calibre, qui maintient la compatibilité VS14 au fil des versions de python. Sans lui, je ne sais pas comment j'aurais fait pour éviter la migration python 3.
- CMake 3.7.2: génère de nombreux warnings qu'il faudra traiter correctement (je ne l'ai pas encore fait - j'attends que tout le monde ait migré).
- Qt 5.8.0: compatible avec le nouveau code Qt 5.6.x (voir mes commits précédents). L'avantage d'utiliser cette version est qu'on peut maintenant simplement installer les binaires Qt à partir de l'installeur officiel (sauf sous Mac où l'installeur officiel freeze - no comment)
- VTK 7.1.0: petits problèmes de changement de syntaxe dans les tests “longBone”. J'ai également corrigé un problème de création des lumières de la scène 3D. A part ça, le gros changement de VTK7 par rapport à VTK6 est le support d'un OpenGL récent (l'option
VTK_RENDERNING_BACKEND
vautOpenGL2
par défaut, ce qui correspond à de l'OpenGL 3.4 si j'ai bien compris) qui devrait améliorer grandement les perfs générales de VTK sur nos machines. Par exemple, tous les glyphs devraient être rendus à l'aide de “vertex shaders” au niveau du GPU (c'est-à-dire du code qui tourne directement sur le GPU chaque fois qu'un vertex est affiché). Malheureusement (pour moi) cette nouvelle implémentation moderne n'est pas utilisable sous Virtualbox qui ne gère que du vieux OpenGL 1.1. J'ai donc dû compiler 2 versions; une pour ma VBox sous linux à l'ULg et une pour ma machine Windows à la maison. - SWIG 3.0.12: aucun problème.
- Parasolid 29.1: dernière version en date. Visual Studio 2012 nous bloquait définitivement à la version 28.1. On espère obtenir les projections parallèles en restant à jour (c'est peut-être déjà OK avec cette nouvelle version? j'ai pas testé, je compte sur vous).
- numpy 1.11.2 + dépendances: compilent comme un charme avec tous ces outils récents.
Evidemment, il y a toutes sortes de petits “trucs” pour construire les libs (bien que la liste soit très courte par rapport à ce qu'il fallait savoir avant). J'ai fait un mémo que je donnerai à Luc lorsqu'il aura le temps de migrer ses libs. D'ici là, ne changez pas de compilateur à moins que vous vouliez compiler votre propre set de libs. Si c'était le cas, n'hésitez pas à me le dire et je vous aiderai. J'ai fait un petit schéma qui permet de voir les dépendances d'un coup d'oeil:
Une fois que tout le monde aura migré vers VS14 on pourra envisager de supprimer le vieux code VTK5 / Qt4 (après update des stations) et on pourra nettoyer pas mal de choses (boucles peu lisibles utilisant explicitement des itérateurs par exemple) avec le C++11.
Compilation MacOSX
- Correction mineure du code source (un
inline
en trop dans un fichier CPP qui provoquait un “unresolved” avecclang
). - Problème de l'écran Retina de l'iMac du service. Le widget Qt-VTK ne supporte pas ce “nouveau” type d'écran haute résolution. L'image est dessinée dans le quart inférieur gauche de la fenêtre graphique (voir ci-dessous). Pour résoudre le problème j'ai dû ajouter un appel vers une fonction ObjectiveC qui désactive explicitement la haute résolution de la fenêtre (
mtQt/osxHelper.mm
). J'espère que ce problème sera résolu dans les prochaines versions de VTK.
longBone
Le longbone ne passait pas avec Visual Studio 2015. La raison est la même que précédemment: ce test utilise de manière intensive les fonctions VTK et tout changement de VTK change le maillage produit. Ce “nouveau” maillage passe alors dans une routine de nettoyage de Cédric Laurent qui est buguée et qui provoque, dans certains cas, des maillages avec des trous. J'ai donc modifié une nouvelle fois le test pour qu'il passe. Cette fois-ci j'ai légèrement modifié le rayon des vis.
— boman 2017/03/15 06:43