1

Ce tutorial suppose que
—Vous avez construit vos outils de développement comme expliqué ici
topics/126703-tutocompilation-des-outils-de-developpement-crosstool-ng-151
—Vous avez construit la librairie Zlib comme expliqué ici
topics/126904-tuto-compilation-de-zlib-123
—Vous avez construit la librairie LibPNG comme expliqué ici
topics/126933-tuto-compilation-de-libpng-1240
—Vous avez construit la librairie SDL comme expliqué ici
topics/126710-tuto-compilation-de-sdl-v12

Development Kit "Almost From Scratch" pour la GP2X Wiz — Librairie SDL_image


advisory-explicit-compilation.png



Note

Pour le moment, je n'ai pas inclus le support du format JPEG ni du format TIF, qui nécessitent de compiler des librairies supplémentaire (libjpeg et libtiff, respectivement).


Les informations de départ

—La librairie SDL_image
http://www.libsdl.org/projects/SDL_image/


————————Préparation de l'environnement————————



Variables d'environnement

Dans le cadre du tutorial de la compilation des outils de développement, on dispose d'une variable d'environnement pour désigner le répertoires d'installation de nos outils de développement : $WIZ_HOME.

Dans le cadre du tutorial de la compilation de la librairie Zlib, cette dernière est installée dans le répertoire $WIZ_HOME/lib/zlib.

On va mettre à jour nos variables $PATH, $LDFLAGS et $CPPFLAGS.

export PATH="${WIZ_HOME}/bin:${PATH}"
export LDFLAGS="-L${WIZ_HOME}/lib -L${WIZ_HOME}/lib/zlib"
export CPPFLAGS="-I${WIZ_HOME}/include"



Préfixe des exécutable des outils de développement

Dans le cadre du précédent tutorial, le tuple de la plateforme, qui préfixe le nom de tous nos outils de développemement, est : arm-gp2xwiz-linux-gnu


————————Construction de la librairie LibPNG————————



Téléchargement

—On utilise les sources de la version stable 1.2.10, disponibles ici :
http://www.libsdl.org/projects/SDL_image/


—Décompresser l'archive dans un répertoire de travail


Compilation et installation

—Vérifier que nos outils de compilation sont disponibles : par exemple, invoquer arm-gp2xwiz-linux-gnu-gcc. Si le système ne trouve pas cet exécutable, mettez à jour votre variable d'environnement $PATH comme expliqué plus haut.

—Invoquer le script configure avec les options de cross-compilation (pour rappel, l'option --help permet de connaître toutes les options disponible).

./configure --prefix=$WIZ_HOME --host=arm-gp2xwiz-linux-gnu --target=arm-gp2xwiz-linux-gnu --disable-tif --disable-jpg

—Invoquer make pour la compilation et l'installation. Normalement la compilation doit se terminer sans erreur.

make
make install



————————Test de la librairie SDL————————


Il est temps de tester, on va utiliser un petit programme qui charge une image et l'affiche, attend un peu, et se termine.


hellosdl.cpp

#include <unistd.h>
#include <iostream>
#include <fstream>

#include <SDL/SDL.h>
#include <SDL/SDL_image.h>

using namespace std;


#define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 240
#define SCREEN_DEPTH 16

int main(int argc, char **argv)
{
    ofstream _log("hello.log", ios_base::out | ios_base::app) ;
    _log << "========================================\n" ;
    _log.flush() ;
    SDL_Surface *screen;
    SDL_Surface *bmp;
    SDL_Rect    targetarea;

    /* Initialize SDL */
    _log << "SDL_Init(SDL_INIT_VIDEO)\n" ;
    _log.flush() ;
    SDL_Init(SDL_INIT_VIDEO);

    /* Initialize the screen / window */
    _log << "SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_DEPTH, SDL_SWSURFACE)\n" ;
    _log.flush() ;
    screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_DEPTH, SDL_SWSURFACE);

    /* Load test.bmp */
    _log << "IMG_Load\n" ;
    _log.flush() ;
    bmp = IMG_Load("testpng.png");

    /* Draw the image to 10, 20 */
    targetarea.x = 0;
    targetarea.y = 0;
    targetarea.w = bmp->w;
    targetarea.h = bmp->h;


    /* update the screen (aka double buffering) */
    _log << "display...\n" ;
    _log.flush() ;

    SDL_BlitSurface(bmp, NULL, screen, &targetarea);
    SDL_Flip(screen);
    sleep(2) ;
    _log << "Done.\n" ;
    _log.flush() ;


    _log.close();
    
    // retour au menu.
    // source : http://wiki.gp2x.org/wiki/Source_code_to_a_Demo_Program
    chdir("/usr/gp2x");
    execl("/usr/gp2x/gp2xmenu", "/usr/gp2x/gp2xmenu", NULL);
    
	return 0;
}



testpng.png

testpng.png



Compilation

Pour que le processus aille jusqu'au bout, il faut indiquer les chemins des includes et des librairies. Comme ça devient un peu long, on va utiliser les variables $PATH, $LDFLAGS et $CPPFLAGS.
export LDFLAGS="-L${WIZ_HOME}/lib -L${WIZ_HOME}/lib/zlib"
export CPPFLAGS="-I${WIZ_HOME}/include"
arm-gp2xwiz-linux-gnu-gcc -o hellosdl.cpp.wiz.gpe $CPPFLAGS $LDFLAGS -lSDL_image -lpng12 -lz -lSDL -lSDLmain hellosdl.cpp



Test

—Transférer hellosdl.cpp.wiz.gpe et testpng.png dans un dossier, que vous copiez ensuite sur la carte mémoire de la wiz
—Dans le menu du launcher, choisir l'option "launcher", puis explorer la carte mémoire pour retrouver votre dossier et lancer le programme : vous devez voir l'image s'afficher, puis revenir au menu principale de la wiz.

En prime, une petite vidéo qui montre le résultat que vous devriez obtenir :
http://www.youtube.com/watch?v=vBgilrzb-as