Occa: prise en charge cmake

Créé le 8 oct. 2018  ·  11Commentaires  ·  Source: libocca/occa

Salut les OCCA,

Avez-vous l'intention d'avoir cmake pour générer le système de construction ?
Tous nos logiciels de calcul scientifique l'utilisent. Cela demande un bon effort mais cela paie une fois fait.

Meilleur,

Amik

question help wanted

Tous les 11 commentaires

Mes 2 centimes...

De nombreux packages logiciels que j'utilise (par exemple, VTK) sont configurés et construits à l'aide de cmake, mais pour ma part, je ne l'aime pas. Pas tant pour le langage cmake et le code qu'il faut écrire, mais plutôt pour les "composants" makefile très obscurs qu'il génère dans une structure de répertoires profonde et obscurcie. Donc, comprendre pourquoi cmake échoue, ou pourquoi quelque chose ne compile pas correctement, ou comment modifier une construction, peut être un effort non négligeable (du moins pour moi).

Générer un makefile pour l'environnement de construction actuel selon les spécifications de configuration est généralement une bonne chose, mais quel que soit le générateur, IMHO devrait-il générer un seul makefile simple, plat et simple, lisible et potentiellement modifiable (comme le vénérable 'configure ' Est-ce que). Ce n'est certainement pas cmake !

Salut Paul,

Je n'en suis pas amoureux mais une fois installé dans un projet c'est assez solide. L'avantage majeur est l'intégration et les tests. Par exemple - supposons - je commencerais à intégrer OCCA dans un code assez volumineux, je mettrais la source dans un répertoire appelé 3rdparty, et, s'il utilisait cmake, je dirais simplement à cmake du nouveau répertoire add_directory(...) . Ensuite, il construirait OCCA automatiquement, en utilisant les compilateurs et autres spécifications du "top" CMakeLists.txt. Si j'ajoutais des dépendances à OCCA dans un pilote de test (initialement) et à d'autres répertoires source/autres plus tard, ce serait un jeu d'enfant.

D'après mon expérience avec cmake, si vous rencontrez des problèmes au niveau "make", le problème est généralement que vous vous êtes trop spécialisé (par exemple, forcer les indicateurs de compilateur explicites ...) cmake au niveau supérieur. Pour la plupart des problèmes, make VERBOSE=1 révélera la ligne de compilation complète (que vous pouvez couper et coller) pour déterminer ce qui ne va pas (et ensuite changer le cmake (pas le make)).

On utilise aussi ctest tout le temps...

Quoi qu'il en soit, je voulais juste tester les eaux à ce sujet.

Meilleur,

Amik

J'en suis fan ( peut-être trop ), en fait, le support de CMake est la première chose que j'ai cherchée. Je gère toutes les dépendances (par exemple dans GooFit ) en tant que sous-modules git dans extern, puis CMake les vérifiera pour l'utilisateur s'il ne connaît pas les sous-modules, puis CMake combine toutes les dépendances. La grande chose à propos de CMake est qu'il prend en charge toutes les méthodes de travail - si je veux utiliser un IDE, par exemple, comme Xcode, c'est facile uniquement si CMake est utilisé. Je peux ajouter CCache, déboguer des builds, clang-tidy, etc. assez facilement.

@henryiii S'il a une intégration IDE, cela semble être une bonne idée !

J'hésite à supprimer la version Makefile car make peut être trouvé prêt à l'emploi dans la plupart des endroits, mais nous pouvons ajouter le support CMake à côté. Nous pouvons mettre à jour la configuration CI pour exécuter des tests avec les versions make et cmake .

Si vous avez le temps, pouvez-vous en faire un PR avec les fichiers de base de CMake ? Si cela aide, je peux ajouter toutes les variables d'environnement / effets secondaires attendus pendant la construction

À l'heure actuelle, les nouveaux utilisateurs potentiels d'OCCA (programmeurs HPC) doivent simplement télécharger la source OCCA et saisir make . Très simple. Pour moi, la proposition de valeur OCCA est basée à 100 % sur les fonctionnalités exceptionnelles qu'elle fournit dans le domaine de la programmation parallèle, et non sur son système de construction. Néanmoins, il y aurait peut-être une petite valeur ajoutée pour OCCA de passer à des versions basées sur cmake, je ne sais pas.

Peut-être que quelqu'un connaissant le codage cmake pourrait écrire les fichiers cmake requis et les contribuer à OCCA via une demande d'extraction ? Cela pourrait aider à répondre aux préoccupations que certaines personnes semblent avoir et les aider à passer à l'utilisation réelle de l'OCCA.

Revenons au sujet de cmake, pour certains d'entre nous en tout cas, "le kilométrage peut varier". Sérieusement, je suis sûr que mon enthousiasme pour cmake augmenterait considérablement si j'apprenais réellement à écrire / déboguer / modifier le code du langage cmake à un niveau supérieur à mon stade actuel de pré-débutant. En attendant, lorsque je rencontre des problèmes frustrants avec des fichiers CMakeLists.txt mal écrits / obsolètes et/ou des fichiers bogués ou mal écrits Find*.cmake fonctionnant correctement pour un paquet que je viens de télécharger à partir de github pour évaluation, je peux avoir des sensations désagréables d'appréciation négative !

@pdhahn Juste pour être clair, je ne pense pas que je me débarrasserais un jour de la construction "seul type make à compiler". A certainement besoin d'être nettoyé (#149) mais rendre l'installation et l'utilisation simples pour les utilisateurs est la priorité numéro un ici

L'ajout de CMake aiderait à utiliser OCCA dans des projets qui utilisent déjà CMake et cela semble faciliter la vie des développeurs avec cette intégration IDE.

@ dmed256 Vous avez raison, le truc IDE semble être une valeur ajoutée non triviale pour OCCA!

Mais vous devez au minimum prendre en charge une variété d'IDE populaires, comme eclipse et Qt Creator.

CMake prend en charge toutes sortes d'outils (et toutes sortes d'outils le prennent en charge), pas seulement les IDE. Tous les principaux IDE sont pris en charge par CMake ou CMake les prend en charge. CLion, Qt Creator, Eclipe, Xcode, etc. Il prend également en charge link-what-you-use, include-what-you-use, clang-tidy, ccache, diverses intégrations de test, le packaging, etc.

Si la construction de CMake a bien fonctionné, vous pouvez éventuellement demander au Makefile d'appeler simplement CMake pour vous, je l'ai déjà fait dans GooFit. Vous pouvez même demander au makefile de télécharger CMake, puis de l'appeler (je n'ai jamais essayé cela auparavant, mais je pense avoir parlé à quelqu'un qui l'a fait); cela lui permettrait de fonctionner n'importe où et avec la dernière version (il vous suffirait d'avoir une simple bascule qui téléchargeait le binaire linux ou macos en fonction de l'endroit où vous étiez en cours d'exécution).

J'espère évaluer occa dans les prochaines semaines, puis je pourrai peut- être aider avec le support CMake.

@henryiii C'est logique, nous n'avons que peu de temps :) Quoi qu'il en soit, appréciez ce conseil CMake!

En terminant, merci à tout le travail de @hknibbe2 , @SFrijters , @amikstcyr et @JamesEggleton 🎉

Cette page vous a été utile?
0 / 5 - 0 notes