15 juillet 2014

Boost + MinGW (Qt, CodeBlock)

Ce n’est malheureusement pas nouveau mais compiler les librairies de Boost sous Windows sans utiliser Visual Studio C++ mais en utilisant MinGW/gcc est une véritable galère !
- Il faut absolument  MASM,  l’assembleur de Microsoft . (celui de gcc n’est pas supporté)
- Il y a 2 bugs dans la batch build.bat qui compile bjam (le ‘make’ de Boost)
- La procédure d’installation/compilation est mal conçue et il faut éditer manuellement des fichiers de configuration.

Nous allons voir comment corriger tout cela...

PREREQUIS
  • MASM est installé. Voir absolument ce post pour éviter de devoir installer MSVC avec MASM.
    MASM doit être dans le PATH.
  • MinGW est installé, soit directement soit via un outil tel que Qt ou Code::Blocks.
    Quelle que soit l’origine de MinGW il faut obligatoirement ajouter au PATH le répertoire ’bin’ de MinGW
  • Télécharger les sources des librairies Boost.

Ce qui suit a été testé avec Boost 1.55 + win7 64bits


PREMIER BUG de tools\build\v2\engine\build.bat.

Le programme d’installation de Boost s’attend à trouver MinGW dans C:\MinGW mais si vous l’avez installé ailleurs, ou utilisez le MinGW de Qt ou CodeBlock ça ne marchera pas.Voici comment corriger cela.

Dans le fichier tools\build\v2\engine\build.bat remplacer (ou mettre en commentaire avec REM) les 4 lignes :
if EXIST "C:\MinGW\bin\gcc.exe" (
   set "BOOST_JAM_TOOLSET=mingw"
   set "BOOST_JAM_TOOLSET_ROOT=C:\MinGW\"
   goto :eof)
Par ces 5 lignes:
call :Test_Path mingw32-make.exe
if not errorlevel 1 (

   set "BOOST_JAM_TOOLSET=mingw"
   set "BOOST_JAM_TOOLSET_ROOT=%FOUND_PATH%..\"
   goto :eof)

Pourquoi  chercher mingw32-make.exe et non gcc.exe dans le PATH ?
- Si on cherche gcc.exe on risque de trouver une installation de gcc qui n’appartient à MinGW mais à cygwin.
- Si on cherche mingw32-gcc.exe on ne trouvera pas gcc si c’est la version 64 bits qui est installée car son nom est  i686-w64-mingw32-gcc.exe
- Réciproquement, si on cherche i686-w64-mingw32-gcc.exe on ne trouvera pas la version 32 bits.
Par contre si on cherche et trouve mingw32-make.exe on est certain qu’avec lui il y a une version de gcc (32 ou 64 bits) appartenant à MinGW.


DEUXIEME BUG de tools\build\v2\engine\build.bat

Ce bug a pour effet de détecter la présence du compilateur de Microsoft MSVC même quand il n’est pas installé. La cause de ce bug est que pour certaines versions de Windows la commande 

    set test=%~$PATH:1

met à jour le errorlevel et pour d’autres non. Ce bug est par exemple présent pour WIN7 64 bits.

Dans la fonction :Test_path, avant la ligne ‘endlocal’ il faut ajouter cette ligne

    if not defined test ( call :Set_Error ) else ( call :Clear_Error )

Ce qui donne :

:Test_Path
REM Tests for the given file(executable) presence in the directories in the PATH
REM environment variable. Additionaly sets FOUND_PATH to the path of the
REM found file.
call :Clear_Error
setlocal
set test=%~$PATH:1
if not defined test ( call :Set_Error ) else ( call :Clear_Error )
endlocal
if not errorlevel 1 set FOUND_PATH=%~dp$PATH:1
goto :eof



TROISIÈME BUG

Une fois ces deux premier bugs corrigés, on peut ouvrir une ligne de commande (cmd) dans la racine des sources de  Boost et taper :

  bootstrap.bat

Ensuite NE PAS TAPER b2 comme indiqué à l’écran !

Il faut au préalable éditer le fichier project-config.jam et remplacer msvc par mingw.

La raison de ce travail supplémentaire est expliqué dans les commentaires du fichier bootstrap.bat :
REM Ideally, we should obtain the toolset that build.bat has
REM guessed. However, it uses setlocal at the start and does
REM export BOOST_JAM_TOOLSET, and I don't know how to do that
REM properly. Default to msvc for now.

set toolset=msvc
Incroyable, n’est-ce pas, qu’après tant d’années personne n’ai trouvé de solution...

Après avoir modifiè project-config.jam vous pouvez exécuter « b2 »


TRUC:

Utilisez "b2 -j 4" pour utiliser 4 theads de compilation, ou plus si votre processeur le supporte.
Pour tout effacer b2 --clean

Plus d'info sur les paramètres de b2...

Après un temps plus ou moins long (de 10 à 50 min) suivant la vitesse cpu et disque de votre machine et le nombre de threads mis en jeux vous obtiendrez  :
The Boost C++ Libraries were successfully built!
The following directory should be added to compiler include paths:

    C:/xyz/boost_1_55_0

The following directory should be added to linker library paths:

    C:\xyz\boost_1_55_0\stage\lib


(xyz depend de là où vous avez décompressé Boost)

Bravo !


Boost 1.55 et MSVC 2013 (Quatrième bug)


En compilant Boost 1.55 avec Microsoft Visual Studio Express 2013 (donc version 12) on a cette erreur de compilation:

transform_width.hpp(151) : error C2039: 'min' : is not a member of 'std'
transform_width.hpp(151) : error C3861: 'min': identifier not found


Pour la corriger il faut ajouter cette simple ligne: 
#include <algorithm>
au début de boost/archive/iterators/transform_width.hpp

Il n’y a donc pas que GCC qui est mal testé par les développeurs de Boost !

NB: Je n'utilise Boost que quand c'est imposé car, depuis toujours, c'est la galère.

MASM pour Boost et MinGW

Certaines librairies de Boost contiennent du code écrit en assembleur. Contrairement à C++ qui utilise la même syntaxe quel que soit le système (Linux, Mac, Sun, Windows) l’assembleur n’est pas standardisé. Bien que le processeur soit le même, le même le code ne s’écrit pas de la même façon sous Linux ou Windows parce que l’assembleur par défaut de ces plateformes n’est pas le même.

L'assembleur inclus avec gcc est 'as'. Il est présent sous Windows et Linux mais les mainteneurs de Boost refusent d’avoir deux versions du même code pour la même plateforme. Hors de question pour eux d’avoir une version pour 'MASM' de Microsoft et une autre version pour 'as' de GNU. Pour Windows la seule version disponible est celle pour MASM.

Donc, si vous voulez utiliser la suite gcc de MinGW pour compiler les librairies de Boost il vous faudra malgré tout MASM de Microsoft et, en théorie, une version anglaise de Visual Studio C++ Express Edition. En effet à l’installation de MASM requiert MSVS C++ Express.


En soit rien de grave car les deux produits sont librement et gratuitement téléchargeables chez Microsoft.
Cependant on peut vouloir éviter d’installer toute une suite C++ pour juste pouvoir assembler quelques lignes d’assembleur.  

Voici donc comment installer MASM sans MSVC Express.

Pour cette manipulation on utilisera 7zip : http://www.7-zip.org/
  1. Télécharger MASMsetup.EXE chez Microsoft
    http://www.microsoft.com/en-us/download/details.aspx?id=12654.


  2. Bouton droit sur le fichier qui vient d’être téléchargé,
    dans le sous menu 7-Zip sélectionner « open archive ».

    Ceci ouvrira 7-Zip et vous montrera le contenu du fichier MASMsetup.EXE c’est-à-dire le fichier setup.exe.




  3. Bouton droit sur ‘setup.exe’ puis choisir l’option « Open Inside ».
    Le nom des deux fichier inclus dans setup.exe vont s'afficher.


  4. Bouton droit sur  « vc_masm1.cab » puis à nouveau choisir « Open Inside ».




  5. Un nom de fichier ‘compliqué’ va apparaitre.


     
  6. Faire glisser ce fichier sur le bureau et le renommer « ml.exe »
     
  7. Déplacer ml.exe dans un répertoire présent dans le PATH ou créez en un pour l’occasion.
     
  8. Pour vérifier que tout est ok, ouvrir une ligne de commande (cmd) et taper « ml ». Vous devez obtenir la version du Macro Assembler .



Et voila !



27 novembre 2013

Mozilla Plugins registry

Les plugins de Firefox ne sont pas stockés dans un répertoire spécifique mais chaque plugins ajoute des entrées dans la registry pour indiquer où se trouve la dll à charger, pour quels mime-types il doit être invoqué ect. Il est est facile d'ajouter un plugins sans que l'utilisateur de Firefox s'en rende compte.
Des applications très honnêtes font cela (VLC, Adobe, Java ect).
D'autres applications font cela en douce comme  Google Chrome ou Microsoft...

Malheureusement on ne peut que désactiver un plugins. Pour qu'il ne figure plus dans la liste des plugins il faut supprimer ses entrées de la registry. Pour cela il faut lancer regedit et chercher toutes les clefs "MozillaPlugins" et supprimer les entrées correspondant aux plugins indésirables dans chacune de ces entrées:

HKEY_CURRENT_USER\Software\MozillaPlugins
HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MozillaPlugins  (64bits)


Note: Supprimer la clef ne supprime aucun fichier du disque.

Une bonne habitude est de régulièrement visiter: http://www.mozilla.org/en-US/plugincheck/

19 septembre 2013

GNU radio pour Windows

GNU radio est à l’origine une application spécialisée dans le traitement des signaux radio. Son but est de traiter ces signaux de manière logicielle. C’est ce que les anglais appellent « Software Defined Radios : SDR ». Cette approche logicielle à l’avantage d’être plus souple et moins onéreuse que la méthode matérielle. Avec le temps GNU radio est devenu un système de traitement du signal numérique au sens large.

GNU radio inclus une interface graphique « GNU radio compagnon : GRC » qui permet d’interconnecter très facilement les blocks logiciels nécessaires aux traitements d’un signal. Si vous programmez en C++ et python vous pourrez ajouter vos propres blocks à la librairie de GNU radio.

GNU radio est une application open source écrite principalement en python sauf les parties critiques pour les performances qui sont écrites en C++ et utilisent la librairie Boost. GNU radio s’interface avec le matériel (carte son, dongle usb) et est donc en partie lié à l’OS. Son développement se fait principalement sous Linux mais il existe un portage 32 bits vers Windows.


Avant de commencer à télécharger...

* Python existe en deux grandes versions : 2.7.x et 3.x
Beaucoup de librairies ou modules utilisés par GNU radio fonctionnent avec python 3.x, mais pas tous. Par exemple PyGTK et wxPython ne fonctionnent pas avec python 3.x. On doit donc en rester (pour le moment) à python 2.7.x qui est la version de python la plus stable.

* Même remarque pour 32 bits et 64 bits. On doit en rester aux versions 32 bits, même si vous utilisez un Windows 64 bits.

* A l’exception de PyQwt qui requiert les droits d’administrateur pour s’installer dans c:\program-files\Pyqwt5, tous les autre composant s’installent dans le répertoire python qui par défaut est C:\python27 et ne requiert pas les droits admin

Si vous voulez faire simple: Installez tout en étant administrateur et installez python dans son répertoire par défaut C:\Python27. En respectant cela les installations se feront en gardant toutes les options par défaut.


INSTALLATIONS  ~ Ce qui suit a été testé sur XP 32 bits et Seven 64 bits.

Installez les 10 ou 11 logiciels qui suivent dans l'ordre indiquez ci-dessous

Pour info, voici les versions disponibles en sep/2013
soit ~170 Mo à télécharger.

1) Python ~ http://www.python.org/
Download : http://www.python.org/download/releases/
Choisir la version 2.7.x pour win32 la plus récente.
Exemple : python-2.7.5.msi

Important: Ajoutez C:\Python27 au PATH de Windows dés maintenant.


2) NumPy ~ http://www.numpy.org/
Un package python absolument fondamental pour le calcul scientifique.
Download : http://sourceforge.net/projects/numpy/files/NumPy/
Sélectionnez la version supportée par PyQwt (voir plus bas)
Prendre le superpack.
Exemple : numpy-1.7.1-win32-superpack-python2.7.exe


3) lxml ~ http://lxml.de/
API python pour les librairies libxml2 et libxslt. Les blocks manipulés par GRC sont décrit en XML.
Download : https://pypi.python.org/pypi/lxml/
Example : lxml-3.2.3.win32-py2.7.exe


4) PyOpenGL ~ http://pyopengl.sourceforge.net/
API python pour OpenGL
Download : https://pypi.python.org/pypi/PyOpenGL/
Exemple : PyOpenGL-3.0.2.win32.exe


5) Cheetah template engine ~ http://www.cheetahtemplate.org/
Generateur de code.Utiliser pour convertir en python les schémas logiques de GRC.
Download : https://pypi.python.org/pypi/Cheetah/
Exemple : Cheetah-2.4.4.tar.gz
Ceci n’est pas un exécutable. Il faut le décompresser, et exécuter la commande :
  python setup.py install
On peut ensuite supprimer le répertoire contenant Cheetah.

Si vous êtes attentif vous verrez que l’installation de Cheetat se termine par:
One or more C extensions failed to build.
Performance enhancements will not be available.
Pure Python installation succeeded.
Ceci est normal pour deux raisons:
- Conflit de noms ne se distinguant que par la case dans le même répertoire : Cheetah.h et cheetat.h.
Windows ne faisant pas la différence un seul fichier subsiste sur le disque.
- De toute façon on ne peut pas compiler sous Windows.
Mais rien de grave, on en reparlera plus bas...


6) PyQt ~ http://www.riverbankcomputing.com/software/pyqt/
API python pour utiliser le Framework Qt.
Download : http://sourceforge.net/projects/pyqt/files/PyQt4/
Sélectionner la version supportée par PyQwt (voir plus bas)
Exemple : PyQt-Py2.7-x86-gpl-4.9.6-1.exe


7) PyQwt ~ http://pyqwt.sourceforge.net/
Une extension de Qt pour le tracé de graphiques.
Il faut que les versions installées de NumPy et de PyQt soient en adéquation avec PyQwt.
Mais attention les versions requises par PyQwt sont rarement les plus récentes.
En principe on télécharge PyQwt ici : http://pyqwt.sourceforge.net/download.html
Mais actuellement (sept/2013) la version PyQwt la plus récente est ici : http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyqwt
Exemple : PyQwt-5.2.1-py2.7-x32-pyqt4.9.6-numpy1.7.1.exe
Cette version 5.2.1 de PyQwt est conçue pour fonctionner avec
- Python  2.7
- Mode 32 bits
- PyQt  4.9.6  (voir #6)
- NumPy  1.7.1  (voir #2)
Attention :
- Il faut obligatoirement les droits d’administrateur car PyQwt s’installe en partie dans C:\ProgramFiles\PyQwt5
- Si vous avez installé python ailleurs que dans son répertoire par défaut, PyQwt ne le trouvera pas et s’en plaindra. Continuez l’installation puis indiquez le répertoire où  se situe votre python.


8) PyGTK  ~ http://www.pygtk.org/
API python pour utiliser la librairie graphique GTK+.
Download : http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/
Prendre le package all-in-one
Exemple : pygtk-all-in-one-2.24.2.win32-py2.7.msi


9) wxPython ~ http://www.wxpython.org/
API python pour utiliser le framework wxWidgets (écrit en C++)
Download : http://www.wxpython.org/download.php
Ne pas prendre la version ansi, mais unicode.
Example : wxPython2.8-win32-unicode-2.8.12.1-py27.exe


10)  GNU Radio ~ http://gnuradio.org/
Logiciel de traitement de signaux numeriques
Download : http://files.ettus.com/binaries/gnuradio/
Exemple : gnuradio_3.6.4.1_Win32.exe
Il y a toujours un délais de plusieurs semaines (ou mois) entre la disponibilité d'une version sous Linux et sont portage sous Windows.


Environment
Cette variable est deja mise en place pendant l'installation de GNUradio
    GRC_BLOCKS_PATH=C:\Program Files\gnuradio\share\gnuradio\grc\blocks
Mais celle là, vous devez l’ajouter à la main:
    PYTHONPATH=C:\Program Files\gnuradio\lib\site-packages

Rappel: Avec un Windows 64bits les applications 32 bits sont dans: "Program Files (x86)"

Si jamais...
En cas de besoin (car il n’est pas rare de déjà les avoir sur sa machine) les bibliothèques de Visual C++ 2010 sont dispo chez Microsoft : http://www.microsoft.com/en-us/download/details.aspx?id=5555

Executer GNUradio companion (enfin !)
Double cliquer sur le script python
    C:\Program Files\gnuradio\bin\gnuradio-companion.py
ou
    C:\Program Files (x86)\gnuradio\bin\gnuradio-companion.py

Ecran d’accueil de GNU radio Companion
Si vous êtes attentif vous verrez dans la console le message suivant :
You don't have the C version of NameMapper installed! I'm disabling Cheetah's useStackFrames options as it is painfully slow with the Python version of NameMapper ect..
Rien de grave. C'est juste la conséquence de ce qu'on a vu pendant l’installation de Cheetah.

NB: Cette console est à surveiller pendant l’exécution GRC car c'est là que l'on trouve les détails des éventuelles erreurs.

Comprendre et apprendre
Pour comprendre comment GNU radio companion fonctionne commencez par  puis ici.
Il y a aussi ce tuto de 5 videos HD-720p.

Des exemples sont dans C:\Program Files\gnuradio\share\gnuradio\examples
Mais si vous voulez pouvoir les utiliser sans être admin, il faudra les copier ailleurs.

Si vous n'avez pas de sources réelles pour alimenter GNU radio vous pouvez trouver des fichiers ici :
http://signals.radioscanner.ru/base/
http://crawdad.cs.dartmouth.edu/


11) USRD Hardware Driver (UHD)
Driver pour les périphériques USRD (Universal Software Radio Peripheral).
Ceci ajoutera de nouveaux blocks logiciels pour communiquer avec les périphériques USRD.
Exemple : uhd_003.005.003-release_Win32.exe

Pendant l’installation sélectionnez l’option “add UHD to the system PATH for all user”, sinon vous devrez faire l’ajout de la variable UHD_PKG_DATA_PATH à la main.

Exemples de périphériques USRD : https://www.ettus.com/product/category/USRP-Bus-Series
Plus d’info sur UHD : http://ettus-apps.sourcerepo.com/redmine/ettus/projects/uhd/wiki


QRV ?...