1

Ce tutorial suppose que vous avez construit vos outils de développement comme expliqué ici
topics/6-126703-tutocompilation-des-outils-de-developpement-crosstool-ng-151

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


advisory-explicit-compilation.png



Les informations de départ

—La librairie SDL
http://www.libsdl.org/

—Un exemple de programme pour le test
http://wiki.gp2x.org/wiki/Writing_an_SDL_Hello_World


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



Variables d'environnement

Dans le cadre du précédent tutorial, on dispose d'une variable d'environnement pour désigner le répertoires d'installation de nos outils de développement : $WIZ_HOME. On va mettre à jour nos variables $PATH, $LDFLAGS et $CPPFLAGS.

export PATH="${WIZ_HOME}/bin:${PATH}"
export LDFLAGS="-L${WIZ_HOME}/lib"
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

Pour s'assurer que la librairie est bien construite avec notre version de ar et ranlib, on redéfinit les variables correspondantes :

export AR="arm-gp2xwiz-linux-gnu-ar"
export RANLIB="arm-gp2xwiz-linux-gnu-ranlib"




————————Construction de la librairie SDL————————



Téléchargement

—On utilise les sources de la version stable 1.2, disponibles ici :
http://www.libsdl.org/download-1.2.php

—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 connaitre toutes les options disponible).

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

—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.c

#include <unistd.h>
#include "SDL.h"

#define SCREEN_WIDTH 320
#define SCREEN_HEIGHT 240
#define SCREEN_DEPTH 8

int main(int argc, char **argv)
{
     SDL_Surface *screen;
     SDL_Surface *bmp;
     SDL_Rect    targetarea;
     
     /* Initialize SDL */
     SDL_Init(SDL_INIT_VIDEO);
     
     /* Initialize the screen / window */
     screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_DEPTH, SDL_SWSURFACE);
     
     /* Load test.bmp */
     bmp = SDL_LoadBMP("test.bmp");
     
     /* Draw the image to 10, 20 */
     targetarea.x = 0;
     targetarea.y = 20;
     targetarea.w = bmp->w;
     targetarea.h = bmp->h;
     
     
     /* update the screen (aka double buffering) */
     SDL_BlitSurface(bmp, NULL, screen, &targetarea);
     SDL_Flip(screen);

     sleep(2);
    
    // 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;
}



test.bmp

test.bmp



Compilation

Pour que le processus aille jusqu'au bout, il faut indiquer les chemins des includes et des librairies.
arm-gp2xwiz-linux-gnu-gcc -I $WIZ_HOME/include/SDL -L $WIZ_HOME/lib -lSDL -o hellosdl.wiz.gpe hellosdl.c


Test

—Transférer hellosdl.wiz.gpe et test.bmp 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=MM-8kpL0x4o

2

J'ai mis à jour la partie sur la préparation de l'environnement, ça posait des problèmes pour compiler d'autres librairies.

3

Correction :
- temporisation du programme de test avec sleep au lieu d'une boucle

4

Je ne suis pas un développeur mais je veux juste dire que je te soutiens réellement et que je trouve ça bon de faire avancer la scène Wiz avec ce genre de contributions. Franchement bravo.

5

Merci ^^

Je fais ça avant-tout pour moi, mais si ça peut être utile à quelqu'un...

6

Tout à fait !

Bonne continuation ^^
avatar@originalfei
In pixels we trust.
ORE WO DARE DA TO OMOTTE YAGARU !

7

Bonjour,

Merci pour ton tuto. En effet il n'y a pas beaucoup de tuto "clair" sur le net et encore moins en francais !! Le grand luxe. Cependant j'ai un problème qui persiste. J'ai fait tout ce que tu as dit et tout c'est bien déroulé enfin je pense. Quand je veux compiler mon programme, j'ai une erreur de linkage :

skipping incompatible /usr/local/arm/4.3.2/arm-none-linux-gnueabi/lib/libSDL.a when searching for -lSDL

J'ai essayé plein de chose, ça n'a rien donné. Je n'utilise pas le même compilateur que toi mais ça reste le même principe (avec les bibliothèque standard les prog se compilent). Je suis sous Eclipse mais je doute que cela ai de l'importance.

Si quelqu'un peut m'aider, ce serait vraiment sympa parce que je commence à baisser les bras.

Bonne soirée à tous !!

8

Excusez moi si il y en a qui ont commencé à chercher. Je viens de trouver. C'était Eclipse qui était mal configuré.

Bonne soirée

9

ok, c'est bon à savoir ^^