CMake. pour plates-formes hétérogènes



Documents pareils
Builds et tests Utilisation de CMake et de Dart

Environnements de développement (intégrés)

Construction de logiciel et packaging

Installation et compilation de gnurbs sous Windows

Projet de développement

Projet de développement. Introduction à Eclipse. Application à votre projet. Philippe Collet. Organisation. Cours 1 : principes généraux - svn

Serveur Subversion Debian GNU/Linux

pythonocc: une plateforme de développement agile d applications CAO.

Linux embarqué: une alternative à Windows CE?

Serveur Acronis Backup & Recovery 10 pour Linux. Update 5. Guide d'installation

Retour d'expérience avec : OCS Inventory & GLP

FusionInventory. Guillaume Rousse Journées francophones de Perl 2011

Tutoriel code::blocks

Introduction à Eclipse

Environnements et Outils de Développement Cours 1 Introduction

Auteur LARDOUX Guillaume Contact Année 2014 DEVELOPPEMENT MOBILE AVEC CORDOVA

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

Module d anonymisation

Cours Plugin Eclipse. Université Paris VI / Parcours STL / Master I Pierre-Arnaud Marcelot - Iktek - pamarcelot@iktek.com

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

INSTALLATION NG V2.1 D OCS INVENTORY. Procédure d utilisation. Auteur : GALLEGO Cédric 23/10/2014 N version : v1

Procédure d installation d AMESim 4.3.0

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Catalogue des stages Ercom 2013

Construction et déploiement d applications Java avec Maven, Archiva, Groovy et Jenkins

Sauvegarde de postes clients avec BackupPC

Hudson Serveur d Intégration Continue. Adrien Lecharpentier IR3 Ingénieurs2000, Université de Marne la Vallée

MRTG & RRD Tool. Multi Router Traffic Grapher

User Documentation. Documentation utilisateur. version 0.2b

sshgate Patrick Guiran Chef de projet support

Validation de la création des groupes ABM et ajout de l utilisateur SASDEMO

Fiche d utilisation du logiciel. 1 - Installation. J. Thioulouse & D. Chessel

Outils pour les réseaux de neurones et contenu du CD-Rom

La création d un paquet Debian. Aurélien Jarno. Journées du Logiciel Libre. 15 octobre 2005

JOnAS Day 5.1. Outils de développements

Programmation Web. Madalina Croitoru IUT Montpellier

Projet Administration Réseaux

DEVELOPPEMENT MOBILE - ETAT DE L ART DES SOLUTIONS

Documentation utilisateur, manuel utilisateur MagicSafe Linux. Vous pouvez télécharger la dernière version de ce document à l adresse suivante :

Construire des plug-ins pour SAS Management Console SAS 9.1

Solution d inventaire automatisé d un parc informatique et de télédistribution OCS INVENTORY NG. EHRHARD Eric - Gestionnaire Parc Informatique

NatStar V8.00. Ce document présente la liste des nouvelles fonctionnalités de la 8.00, disponible à partir de septembre 2013.

Communication technique TC1552 Ed 01 Date: 22/11/2011

µrv : Realité Virtuelle

Comment reproduire les résultats de l article : POP-Java : Parallélisme et distribution orienté objet

Oracle Developer Suite 10g. Guide de l installation. Vista & Seven

Développer des Applications Internet Riches (RIA) avec les API d ArcGIS Server. Sébastien Boutard Thomas David

Atelier individuel. Linux 101. Frédérick Lefebvre & Maxime Boissonneault frederick.lefebvre@calculquebec.ca U. Laval - Janv. 2014

TP1. Outils Java Eléments de correction

1. Développement embarqué. André KPOZEHOUE DOMAINES DE COMPETENCES CONNAISSANCES TECHNIQUES

Systeme d'exploitation

Systèmes de gestion de code source

InstallShield 2014 FICHE TECHNIQUE. Création de programmes d installation pour Microsoft Windows

StreamServe Persuasion SP4

Outils de développement collaboratif

Offre Référentiel d échange

PROFIL EXPERIENCE ARCHITECTE LINUX, OPEN SOURCE, COORDINATEUR SÉCURITÉ EMEA

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Service Déposant: Procédure d installation. Page 1. Service déposant. Procédure d installation Version 2.3

Direction des Systèmes d'information

Introduction à Linux (pour le HPC) «Linux 101» Présentation :

La boîte à outils GAS sur clé USB - Manuel d utilisation de la Mise à jour Smart

TD/TP 1 Introduction au SDK d Android

Vulgarisation Java EE Java EE, c est quoi?

Vérifier la qualité de vos applications logicielle de manière continue

Point sur les solutions de développement d apps pour les périphériques mobiles

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

Nouveautés Ignition v7.7

SUGARCRM Sugar Open Source Guide d Installation de French SugarCRM Open Source Version 4.2

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Joomla! Création et administration d'un site web - Version numérique

C.M. 1 & 2 : Prise en main de Linux

Automatisation de l administration système

Gérer ses environnements de développement avec Vagrant RMLL 2012

Logiciel libre de gestion pour l'education Populaire. Module ALSH et ALSH périscolaire

Les tableaux de bord de pilotage de nouvelle génération. Copyright PRELYTIS

Automatisation de l administration système avec

Sync-A-BOX et Duplicati. est une plateforme Cloud pour stocker et gérer vos données en ligne.

TP 7, 8 & 9 : Installation et Gestion de GLPI et Télédéploiement SISR 1 HUBERT JULIEN LABBE RICHARD DAY MICKAEL DOGNY CHRISTOPHE

GenDbg : un débogueur générique. Didier Eymery Jean-Marie Borello Jean-Marie Fraygefond Odile Eymery Philippe Bion

Développement d applications Internet et réseaux avec LabVIEW. Alexandre STANURSKI National Instruments France

Notre Catalogue des Formations IT / 2015

Single User. Guide d Installation

Chapitre 10 : Logiciels

Remise à niveau d un programme JAVA du domaine public

Introduction...3. Objectif...3. Manipulations...3. La Sauvegarde...4. Les différents types...4. Planification...4. Les outils...5

White Paper - Livre Blanc

OmniVista 2700 Application complémentaires pour l OmniVista 2500 Network Management

Votre premier projet Android

Base de Connaissances SiteAudit. Utiliser les Rapports Planifiés. Sommaire des Fonctionnalités. Les Nouveautés

Créer son premier package.deb. 19 août

Installer Enterprise Miner 5.1 en SAS environnement Windows

LA GOUVERNANCE, OU COMMENT RAPPROCHER LES ÉQUIPES DE DÉVELOPPEMENT ET D INFRASTRUCTURE

contexte cahier des charges critères de choix fonctionnalités configuration en pratique Bilan Conclusion Backuppc Logiciel de sauvegarde

Hébergement de sites Web

Serveur de travail collaboratif Michaël Hoste -

Exonet : sauvegarde automatisée d une base de données

Transcription:

1 Journées bonnes pratiques pour le développement 13-14 octobre 2008 CMake Un outil d aide daide au processus de développement pour plates-formes hétérogènes Fabien Spindler SED-REN Equipe-projet INRIA Rennes-Bretagne Atlantique - IRISA http://www.irisa.fr/lagadic

Plan 2 2 A. Build CMake B. Automatisation des tests CTest CDash Pipol C. Packaging CPack D. Conclusion E. Pour aller plus loin

A. Build: Utilisation de CMake 3 3 1. Introduction 2. Principe de fonctionnement 3. Eléments de syntaxe 4. Exemple 5. Configuration Via interface graphique En ligne de commande In-source et out-of-source build 6. Exploitation des fichiers de configuration pour le build 7. Démonstration

1. Introduction 4 4 Logiciel open source multi plate-forme: http://www.cmake.org Outil d aide daide au processus de compilation (build) pour des cibles et des compilateurs hétérogènes Développé depuis 2001 par Kitware (VTK) Adopté par les développeurs de KDE Produit des fichiers de configuration: capable de générer des makefile unix, des projets MSVC, Borland qui seront utilisés par les outils natifs lors de la compilation Dispose de nombreuses commandes permettant de localiser include, lib, exe Propose de nombreuses extensions pour localiser X, Qt, OpenGL Propose des interfaces de test (CTest) et de packaging (CPack)

2. Principe de fonctionnement 5 5 Sources C/C++/Java /J CMakeLists.txt t t L utilisateur configure son build avec CMake Produit des fichiers de configuration Capable de gérer le processus de compilation indépendamment de l OS et du compilateur Connaissance de très nombreuses plates-formes et outils CMake [Makefiles, dsp, sln] Native Build System Files [make, Native Build Tools MSVC] Executables, Libraries

3. Eléments de syntaxe CMakeLists.txt 6 6 Langage de type script Commentaire Commande Liste Variable Structure de contrôle Configuration dynamique config.h.in Détection de librairie # Comment ends at a newline COMMAND(arg1 arg2...) A;B;C # semicolon separated ${VAR} IF(CONDITION) FOREACH(v A B C) CONFIGURE_FILE(config.h.in FILE(config in config.h) #cmakedefine FOO_VERSION ${FOO_VERSION} #cmakedefine BUILD_SHARED_LIBS FIND_LIBRARY(MY_LIB NAMES my1 my2 PATHS /foo c:/bar) Evalué lors des phases de configuration de CMake

4. Exemple : Le projet FOO 7 7 FOO-code foo foo1.{cpp,h} foo2.{cpp,h} libfoo + bar bar1.{cpp,h} bar2.{cpp,h} libbar example example2.{cpp,h} l2{ *.o example1.cpp main() + = example

FOO-code 4. Exemple : Configuration du projet FOO CMakeLists.txt PROJECT(projectname [CXX] [C] [JAVA]) PROJECT(FOO) SUBDIRS(foo bar example) INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/foo ${CMAKE _ SOURCE_ DIR}/bar) SET(LIBRARY_OUTPUT_PATH ${FOO_BINARY_DIR}/lib) foo - CMakeLists.txt ADD_LIBRARY(foo foo1.cpp foo2.cpp) bar - CMakeLists.txt ADD_LIBRARY(bar bar1.cpp bar2.cpp) TARGET_LINK_LIBRARIES(bar foo) example - CMakeLists.txt ADD_EXECUTABLE(example example1.cpp example2.cpp) TARGET_LINK_LIBRARIES(example bar) 8 8

5. Configuration: via interface graphique 9 9 Editer les variables du cache pour configurer le build Configuration après un changement: touche c ou bouton Configure Génération des fichiers utiles à la compilation: touche g ou bouton OK ccmake (unix) CMake (windows)

5. Configuration: entrées principales du cache 10 10 Lors de la configuration, le cache est mis à jour Fichier CMakeCache.txt Il contient des variables exploitées par CMake pour produire les fichiers de configuration utiles au build Quelques variables importantes Type de build CMAKE_BUILD_TYPE=[Debug, Release] Répertoire d installation des binaires produits CMAKE_INSTALL_PREFIX PREFIX=[/usr/local, C:\Program Files\FOO] Visualisation de la commande utilisée pour compiler (Makefile) CMAKE_VERBOSE_MAKEFILE=ON _ Production de librairie statique ou dynamique CMAKE_SHARED_LIBS=[OFF, ON]

5. Configuration: en ligne de commande 11 11 Peut être utilisé par des scripts (crontab, tâches planifiées) Premier argument: localisation des sources Option -G pour sélectionner le générateur utilisé lors du build cmake G KDevelop3 ou G Unix Makefiles ou G Xcode Option -D pour positionner des variables du cache cmake DCMAKE_VERBOSE_MAKEFILE MAKEFILE=ON cd FOO-build-debug cmake../foo-code -DCMAKE_BUILD_TYPE=Debug make cd FOO-build-release cmake../foo-code -DCMAKE_BUILD_TYPE TYPE=Release make

5. Configuration: in-source et out-of-source build 12 12 In-source build Cohabitation des fichiers source, ceux utiles au build et binaires produits cd FOO-code ccmake. make FOO-code [sources, binaires] Out-of-source build Fichiers source séparés de ceux utiles au build et binaires produits Permet de gérer plusieurs versions de binaires mkdir FOO-build cd FOO-build ccmake../foo-code make FOO-code [sources] FOO-build [binaires] FOO-build-g++4.x [binaires] FOO-build build-g++3 g++3.x [binaires]

6. Build 13 13 Exploitation des fichiers de configuration produits par CMake Makefile, Microsoft Visual Studio project files.dsp,.sln, Utilisation des outils natifs de build GNU Make, MSVC, Borland Processus de build make MSVC projet ALL_BUILD Processus d installation make install MSVC projet INSTALL

7. Démonstration 14 14 Sous Windows Configuration du projet FOO avec CMake Compilation avec MSVC71 http://www.irisa.fr/lagadic/prive/fspindle/cmake/example/foo.tar.gz tar gz

B. Automatisation des tests 15 15 1. CTest Introduction Exemple Utilisation Démonstration ti 2. CDash Introduction Exemple Utilisation 3. Pipol Introduction Démonstration 4. Comment automatiser les tests Exemple Démonstration Objectif: exécuter les tests aussi souvent que possible pour assurer la qualité du développement

1. CTest: Introduction 16 16 Fait partie de la distribution CMake: http://www.cmake.org Peut-être utilisé avec ou sans CMake Permet de réaliser plusieurs opérations sur le code source Checkout CVS ou Subversion depuis un référentiel Configuration, build Exécution de tests unitaires, non régression (binaires, scripts) Exécution de tests avancés: Couverture de code: uniquement avec GNU g++ en ajoutant les options de compilation: -fprofile-arcs -ftest-coverage Etat de la mémoire: utilisation de purify, valgrind Les résultats peuvent être soumis à un serveur CDash

1. CTest: Exemple 17 17 FOO-code CMakeLists.txt PROJECT(FOO) SUBDIRS(foo bar example) ENABLE_TESTING() example/cmakelists.txt ADD_EXECUTABLE(example example1.cpp example2.cpp) TARGET_LINK_LIBRARIES(example bar) ADD_TEST(test1 example) ADD_TEST(test2 example foo)

1. CTest: Utilisation 18 18 Lancement des tests Liste des tests ctest -N Tests automatiques make test ctest MSVC projet RUN_TESTS Tests individuels ctest I 2,2 Fichiers de log dans Testing/Temporary LastTest.log LastTestsFailed.log

1. CTest: Démonstration 19 19 Sous Windows Exécution des tests du projet FOO avec MSVC71

2. CDash: Introduction 20 20 Logiciel open source: http://www.cdash.org Serveur permettant de gérer les rapports de tests de logiciels Synthèse de tous les tests sous forme d un tableau de bord HTML Notification automatique par email en cas d erreur Facilite le déploiement de tests sur plusieurs plates-formes / configurations Client CMake ou CTest Envoie les rapports de build et de tests (XML) au serveur Catégories de builds et de tests Continuous builds : lancés si modification du référentiel CVS ou SVN Nightly builds : lancés la nuit (utilisés pour suivre l évolution du logiciel) Experimental builds: lancés à la demande pour valider une fonctionnalité Un exemple de serveur CDash à l Irisa: lirisa: http://cdash.inria.fr

2. CDash: Exemple 21 21 FOO-code CMakeLists.txt PROJECT(FOO) SUBDIRS(foo bar example) ENABLE_TESTING() INCLUDE(CTestConfig.cmake) INCLUDE(Dart) IF(CMAKE_COMPILER_IS_GNUCXX AND NOT BUILD_SHARED_LIBS) SET(CMAKE_CXX_FLAGS "-fprofile-arcs -ftest-coverage") ENDIF(CMAKE_COMPILER_IS_GNUCXX COMPILER IS AND NOT BUILD_SHARED_LIBS) LIBS) CTestConfig.cmake SET(CTEST_PROJECT_NAME "FOO") set(ctest_nightly_start_time "9:00PM") SET(CTEST_DROP_METHOD "http") SET(CTEST_DROP_SITE "cdash.inria.fr") SET(CTEST_DROP_LOCATION "/CDash/submit.php?project=FOO") SET(CTEST_DROP_SITE_CDASH TRUE)

2. CDash: Utilisation 22 22 Lancement des tests ctest D Experimental ctest D Nightly ctest D [Experimental Nightly]Build ctest D [Experimental Nightly]Test ctest D [Experimental Nightly]Coverage ctest D [Experimental Nightly]MemCheck Les tests sont envoyés sur le serveur CDash Ils sont synthétisés sous forme de tableau de bord

2. CDash: Démonstration 23 23 Sous Windows Envoi des rapports de tests expérimentaux sur CDash pour le projet FOO avec MSVC71

3. Pipol: Introduction 24 24 Plate-forme Inria de Portage Logiciel: http://pipol.inrialpes.fr Objectifs: mettre à disposition des équipes projets différentes architectures matérielles et logicielles (systèmes, librairies, outils de développement) afin de valider la portabilité des logiciels Il s'agit aujourd'hui d'un prototype qui permet : l'accès, après réservation, à des systèmes Linux (principales distributions libres et à licences), Windows et Mac os X. de travailler sur des architectures 32 ou 64 bits (EMT64 et IA64) de passer administrateur sur tous les systèmes. d'automatiser les configurations et d'effectuer des compilations cycliques («nightly build»).

3. Pipol: Démonstration 25 25 Visite de l interface web http://pipol.inrialpes.fr pp p

4. Comment automatiser les tests: Exemple 26 26 On parle également de daily builds Exécution de test automatiques Utilisation d un script python: FOO-build.py Crontab Unix Tâches planifiées Windows checkout, build, test Panneau configuration / Édition: crontab -e Consultation: crontab -l Tâches planifiées

4. Exemple de script python: FOO-build.py 27 27 import os, shutil, sys if os.path.isdir("foo"): shutil.rmtree("foo") os.system("cvs d :pserver:anonymous@scm.gforge.inria.fr:/cvsroot/foo checkout FOO-code") if os.path.isdir("foo-build"): ild") shutil.rmtree("foo-build") os.mkdir("foo-build") os.chdir("foo-build") if sys.platform == 'win32': os.system("cmake../foo-code -G\"Visual Studio 7.NET 2003\"") os.system("devenv.exe /build debug /project ALL_BUILD FOO.sln") else: os.system("cmake../foo-code") os.system("make") os.system("ctest -D Experimental")

4. Comment automatiser les tests: Démonstration 28 28 Visite du serveur CDash utilisé pour ViSP http://cdash.inria.fr/cdash/index.php?project=visp p p p

C. Packaging: Utilisation de CPack 29 29 1. Introduction 2. Exemple 3. Utilisation 4. Démonstration

1. CPack: Introduction 30 30 La distribution CMake inclus un outil de packaging: CPack Distribution de code source ou de binaires sous forme d archive Peut-être utilisé avec ou sans CMake Package type Packaging tool Linux OSX Win STGZ Self extracting Tar GZip TBZ2 Tar BZip2 TGZ Tar GZip TZ Tar Compress ZIP ZIP file format PackageMaker OSX Package Maker NSIS Nullsoft Scriptable Install System DEB Debian packages RPM RPM packages

2. CPack: Exemple 31 31 FOO-code CMakeLists.txt PROJECT(FOO) SUBDIRS(foo bar example)... INCLUDE(InstallRequiredSystemLibraries) IF(WIN32 AND NOT UNIX) SET(CPACK_NSIS_MODIFY_PATH ON) ENDIF(WIN32 AND NOT UNIX) INCLUDE(CPack)

3. CPack: Utilisation 32 32 Liste des outils de packaging disponibles : Production de fichiers de configuration par: CPackConfig.cmake CPackSourceConfig.cmake Utilisation make package cpack G ZIP MSVC projet PACKAGE cpack --help ccmake <source dir> ViSP-2.4.0-Linux.sh ViSP-2.4.0-Darwin.zip ViSP-2.4.0-win32.exe i cpack G TGZ config CPackSourceConfig.cmake make package_source ViSP-2.4.0-Source.tar.gz

4. CPack: Démonstration 33 33 Sous Windows Création d un dun auto-installeur du projet FOO à l aide de NSIS avec MSVC71

D. Conclusion 34 34 CMake: outil de configuration pour produire des builds Multi plates-formes (Linux, OSX, Windows, ) Multi-compilateurs (g++, MS cl, Borland) Supporte les builds en dehors des sources (out-of-source build) Gestion de plusieurs versions de binaires pour un même code source Syntaxe du langage assez simple s appuyant sur des fichiers texte CMakeLists.txt Interface vers plusieurs IDE KDevelop, Xcode, MSVC

D. Conclusion 35 35 CMake intègre un outil de test: CTest Permet de lancer des tests sur des cibles hétérogènes Tests unitaires, de non régression (binaires, scripts) Intègre des outils de test de l utilisation de la mémoire Possibilité d automatiser ti les tests t Peut-être utilisé avec ou sans CMake Possibilité d envoyer les résultats des tests sur CDash un serveur web Synthèse des tests Historique En cas d erreur notification par mél CMake intègre également un outil de packaging: CPack Outils indispensables pour mener à bien un développement de qualité

E. Pour aller plus loin 36 36 Documentation des commandes cmake --help pour un résumé cmake --help COMMAND pour une aide détaillée cmake --help IF [cmake ctest cpack] --help Documentation, FAQ, wiki: http://www.cmake.org Ouvrages édités par Kitware, Inc. disponible à la bibliothèque Mastering CMake User s Developers Guide, Août 2003 Matering CMake 2.2, Fév. 2006 Exemples Le projet FOO: http://www.irisa.fr/lagadic/prive/fspindle/cmake/example/foo.tar.gz A l Irisa: projets ViSP (), Vistal (Visages) http://gforge.inria.fr VTK, ITK, IGSTK, BIAS