Ver la versión completa : Hello world
Saludos de nuevo!
Estos dias, he estado explorando por internet el tama de la programación en wiz, y parece que los inicios seran mas que duros. Todos los que creiamos que podriamos encontrar alguna aplicación para windows, que nos permitiera simplemente programar en C++, y luego compilar un ejecutable para wiz haciendo clic en algún boton, nos hemos quedado blancos. Para empezar, esto de la compilación con las SDL no es tan facil, y pierdes mas tiempo preocupandote de simplemente llevar el codigo a la wiz, que pensando en el propio juego.
Y la gran pregunta es: Hay alguien que se pueda apiadar de nosotros y colgar el tipico programa de prueva tipo "Hello world" para wiz, con instrucciones precisas para compilarlo.
De hecho estoy muy agradecido a este foro de donde he aprendido lo poco que se (solo conceptos) de la compilacion para wiz , pero creo que un pequeño punto de partida me ayudaria mucho, y no solo a mi, ya que la alternativa es el Flash o el Pygame, que aunque con resultados mas que aceptables, te obligan a aprender lenguajes y maneras de estructurar el programa propios, y eso... a romperse la cabeza con sistemas limitados.
^MiSaTo^
27/05/2009, 21:34
#include <stdio>
int main (){
printf("Hello World \n");
return 0;
}
para compilar con gcc (en linux):
gcc -o main main.c
:brindis:
EDIT: llama al gcc con la ruta donde tengas el de la Wiz, obviamente ;)
Bueno esto ya es algo! literalmente un punto de partida, al menos ahora se que no requiere codigo especial...
Sabiendo que esto debe funcionar, ahora solo tengo que conseguir compilarlo.
Muchas gracias!!!
^MiSaTo^
27/05/2009, 21:50
Bueno esto ya es algo! literalmente un punto de partida, al menos ahora se que no requiere codigo especial...
Sabiendo que esto debe funcionar, ahora solo tengo que conseguir compilarlo.
Muchas gracias!!!
Bueno ya en serio, te hablo desde la ignorancia pero si no le añades unas librerías gráficas no lo verás en la consola. (No se si están ya disponibles las SDL para Wiz).
En el caso de que hubiera ya SDL la cosa sería por ejemplo mostrar una imagen.
Para ello puedes hacer:
#include <stdio>
#include "SDL.h"
int main(){
SDL_Surface *imagen, *screen;
SDL_Rect dest;
SDL_Init(SDL_INIT_VIDEO);
screen=SDL_SetVideoMode (320, 240, 16, SDL_SWSURFACE);
imagen = SDL_LoadBMP("imagen.bmp");
dest.x=0;
dest.y=0;
dest.w=320;
dest.h=240;
SDL_BlitSurface(imagen, NULL, screen, &dest);
SDL_flip();
while(1){}
return 0;
}
y para compilar sería:
gcc -o main -l lSDL main.c
Obviando las rutas ;)
saboteur
27/05/2009, 21:54
Todavía no hay SDL para Wiz, y de los apaños que he visto por ahí no me funciona ninguno. Así que, por ahora, no se puede hacer mucho hasta que alguien dé con un método infalible.
Parece interesante, no se si lo he entendido bien, pero las funciones de texto no se ejecutan en la consola?
En cualquier caso, aun estoy peleandome con el compilador, je je...
^MiSaTo^
27/05/2009, 22:29
Parece interesante, no se si lo he entendido bien, pero las funciones de texto no se ejecutan en la consola?
En cualquier caso, aun estoy peleandome con el compilador, je je...
Un printf saldría por el terminal, que como no lo puedes ver pues no ves lo del printf. ;)
Y si no hay SDL pues ya no te se decir XDD
Esque no tengo Wiz, pero el código que te he puesto te vale para GP2X sin problemas.
Si necesitas alguna aclaración más, pregunta :brindis:
#include <stdio>
int main (){
printf("Hello World \n");
return 0;
}
para compilar con gcc (en linux):
gcc -o main main.c
:brindis:
EDIT: llama al gcc con la ruta donde tengas el de la Wiz, obviamente ;)
Uhm, aun no me he puesto con el tema y no te he entendido mu bien jeje.
Lo compilas en linux con el gcc y luego el binario lo metes en la tarjeta y lo corres en la consola?
No hay problemas para ejecutarlo habiendolo compilado en plataforma x86 y ejecutandolo en un ARM? :lamer:
:brindis::brindis:
^MiSaTo^
27/05/2009, 22:34
Uhm, aun no me he puesto con el tema y no te he entendido mu bien jeje.
Lo compilas en linux con el gcc y luego el binario lo metes en la tarjeta y lo corres en la consola?
No hay problemas para ejecutarlo habiendolo compilado en plataforma x86 y ejecutandolo en un ARM? :lamer:
:brindis::brindis:
Obviamente no, no puedes correr un ejecutable x86 en un ARM. Puse esto:
EDIT: llama al gcc con la ruta donde tengas el de la Wiz, obviamente ;)
Pero igual no me expliqué bien, me refería que tienes que llamar al gcc para ARM de la Wiz, no al gcc "normal". Que imagino que se llamará algo así como arm-gcc o como sea.
Todavía no hay SDL para Wiz, y de los apaños que he visto por ahí no me funciona ninguno. Así que, por ahora, no se puede hacer mucho hasta que alguien dé con un método infalible.
Aunque todavía no han liberado la SDL estáticas para Wiz, se puede compilar perfectamente con cualquier SDK para GP2X compilando con librerías dinámicas. La consola trae librerías dinámicas de SDL. Pero hay que cambiar dos librerías tal y como dijo Franxis aquí (http://www.gp32spain.com/foros/showthread.php?t=61359), para que funcione en Wiz.
Todos los que creiamos que podriamos encontrar alguna aplicación para windows, que nos permitiera simplemente programar en C++, y luego compilar un ejecutable para wiz haciendo clic en algún boton, nos hemos quedado blancos.
Hay un entorno para windows muy amigable, que no sólo tiene todo en un instalador y te permite compilar con un botón, sino que además te crea el esqueleto del programa con SDL. ¿qué más se puede pedir? Es el kit de GP2X con Dev-C++, la única pega es que para la Wiz hay que aplicar el truco de Franxis que digo arriba.
A los que estáis empezando, os recomiendo buscar sobre programación SDL en GP2X, ya que hay más información y es casi igual. Por eso la Wiz lleva el apellido GP2X. :rolleyes: Una buena fuente de recursos es el wiki en inglés de GP2X.
Documentación sobre SDL (http://www.libsdl.org/cgi/docwiki.cgi)
Hello world SDL en modo gráfico (http://wiki.gp2x.org/wiki/Writing_an_SDL_Hello_World)
Indice de tutoriales de desarrollo (http://wiki.gp2x.org/wiki/Development_Tutorials)
flozanot
28/05/2009, 00:14
#include <stdio>
int main (){
printf("Hello World \n");
return 0;
}
para compilar con gcc (en linux):
gcc -o main main.c
:brindis:
EDIT: llama al gcc con la ruta donde tengas el de la Wiz, obviamente ;)
Estoo... la Wiz no muestra salida de consola :)
Jonazan2
28/05/2009, 00:18
¿ A que te refieres ? por que la compilacion la esta haciendo desde la terminal de linux...
flozanot
28/05/2009, 00:22
¿ A que te refieres ? por que la compilacion la esta haciendo desde la terminal de linux...
Me refiero a que si ejecutas el "hola mundo" en la Wiz, no va a salir nada. La salida de consola esta oculta en la Wiz.
A eso me refiero.
Saludos.
Jonazan2
28/05/2009, 00:23
Por eso mismo ha añadido las librerias SDL y ha corregido el primer codigo que ha puesto diciendo exactamente eso, que no saldria nada.
^MiSaTo^
28/05/2009, 00:24
Estoo... la Wiz no muestra salida de consola :)
Leamonos los hilos fan club...
Bueno ya en serio, te hablo desde la ignorancia pero si no le añades unas librerías gráficas no lo verás en la consola. (No se si están ya disponibles las SDL para Wiz).[...]
Un printf saldría por el terminal, que como no lo puedes ver pues no ves lo del printf.
< - >
Por eso mismo ha añadido las librerias SDL y ha corregido el primer codigo que ha puesto diciendo exactamente eso, que no saldria nada.
Hemos posteado a la vez XDDD
Jonazan2
28/05/2009, 00:25
A la vez como en las peliculas :lol:
chemaris
28/05/2009, 00:26
bueno conectandola a una terminal por puerto serie lo muestra, pero para eso hace falta una placa de desarrollo o esperar a que saquen una cradle
Obviamente no, no puedes correr un ejecutable x86 en un ARM. Puse esto:
Pero igual no me expliqué bien, me refería que tienes que llamar al gcc para ARM de la Wiz, no al gcc "normal". Que imagino que se llamará algo así como arm-gcc o como sea.
Ah ok tio, perdona, no te habia entendido bien :brindis:
Jonazan2
28/05/2009, 00:36
Ah ok tio, perdona, no te habia entendido bien :brindis:
En cuanto te lea lo de tio ya tienes super mario world para volar [wei]
^MiSaTo^
28/05/2009, 00:36
Ah ok tio, perdona, no te habia entendido bien :brindis:
Si esque me he explicado como el culo :lol:
flozanot
28/05/2009, 00:39
Bueno ya en serio, te hablo desde la ignorancia pero si no le añades unas librerías gráficas no lo verás en la consola. (No se si están ya disponibles las SDL para Wiz).
En el caso de que hubiera ya SDL la cosa sería por ejemplo mostrar una imagen.
Para ello puedes hacer:
#include <stdio>
#include "SDL.h"
int main(){
SDL_Surface *imagen, *screen;
SDL_Rect dest;
SDL_Init(SDL_INIT_VIDEO);
screen=SDL_SetVideoMode (320, 240, 16, SDL_SWSURFACE);
imagen = SDL_LoadBMP("imagen.bmp");
dest.x=0;
dest.y=0;
dest.w=320;
dest.h=240;
SDL_BlitSurface(imagen, NULL, screen, &dest);
SDL_flip();
while(1){}
return 0;
}
y para compilar sería:
gcc -o main -l lSDL main.c
Obviando las rutas ;)
Es stdio.h, y ademas SDL_flip no esta disponible en las libs que hay actualmente :D
Y si soy mu vago como "p'a" leerme "to" "er" pos...[wei5]
El comando es SDL_Flip(screen) :D
^MiSaTo^
28/05/2009, 00:47
El comando es SDL_Flip(screen) :D
cierto ;) Hace eones que no uso las SDL (desgraciadamente :llorosa:)
flozanot
28/05/2009, 00:50
El comando es SDL_Flip(screen) :D
Tu si que sabes :)
saboteur
28/05/2009, 00:59
Aunque todavía no han liberado la SDL estáticas para Wiz, se puede compilar perfectamente con cualquier SDK para GP2X compilando con librerías dinámicas. La consola trae librerías dinámicas de SDL. Pero hay que cambiar dos librerías tal y como dijo Franxis aquí (http://www.gp32spain.com/foros/showthread.php?t=61359), para que funcione en Wiz.
Hay un entorno para windows muy amigable, que no sólo tiene todo en un instalador y te permite compilar con un botón, sino que además te crea el esqueleto del programa con SDL. ¿qué más se puede pedir? Es el kit de GP2X con Dev-C++, la única pega es que para la Wiz hay que aplicar el truco de Franxis que digo arriba.
Si todo eso lo he hecho. He compilado desde Linux. He compilado desde Windows cambiando los archivos que decía Franxis. He compilado desde Windows con Cygwin. Hasta he mezclado las librerías de Open2X con el SDK de Wiz para Linux.
Y no funciona de ninguna manera. He llegado a compilar sin errores, pero los programas se cuelgan en la pantalla de "LOADING". Según parece, no debe enlazar bien las librerías de SDL, porque lo primero que hace el programa es activar el modo de vídeo.
Hay algo que no funciona y no sé que es. El código de mis juegos está hecho para Windows y GP2X, y compila perfectamente en las dos plataformas. Pero en Wiz no hay manera (y compilo con librerías dinámicas). Quiero ver cómo tira "Escape from Minos" en Wiz, porque en GP2X iba al límite y no hace más que resistirse.
¡Ah! Y utilizo CodeBlocks, que es más cómodo para programar juegos multiplataforma, tanto en Windows como en Linux.
Hay algo que no funciona y no sé que es. El código de mis juegos está hecho para Windows y GP2X, y compila perfectamente en las dos plataformas. Pero en Wiz no hay manera (y compilo con librerías dinámicas).
¿Puede que sea aquel asunto de superficie hardware o software acelerada o no, nunca recuerdo? Creo recordar que tuviste un problema precisamente con esto la primera vez que compilaste para Gp2x, ¿no?
Por cierto, uso bastante Escape from Minos en Gp2x y no noto que se arrastre. :D
saboteur
28/05/2009, 01:22
Por cierto, uso bastante Escape from Minos en Gp2x y no noto que se arrastre. :D
Es que yo he probado las dos versiones, y en PC va más rápido. ;) Así que conozco la velocidad a la que debería ir.
En cuanto a Wiz, haré pruebas paso a paso, a ver si veo algo. Aunque la gente no ha dicho nada de cambiar el código... debería ser el mismo que GP2X.
saboteur, por si te sirve de ayuda, he visto que si le quitas algunas librerías que se usaban en GP2X como -lm -lgcc -lpthread -lexpat y dejas sólo las SDL y libz (y las que uses), funciona bien en la Wiz.
P.D. Lo del kit de Dev-c++ lo decía para los que empiezan...
saboteur
28/05/2009, 10:44
saboteur, por si te sirve de ayuda, he visto que si le quitas algunas librerías que se usaban en GP2X como -lm -lgcc -lpthread -lexpat y dejas sólo las SDL y libz (y las que uses), funciona bien en la Wiz.
P.D. Lo del kit de Dev-c++ lo decía para los que empiezan...
La verdad es que también he probado eso. Dejé SDL, SDL_mixer y SDL_ttf (creo que no usaba más). Compilaba pero tampoco funcionaba. Como soy muy cabezón, reinstalaré el toolchain desde cero otra vez y volveré a probar hasta que me salga o hasta que GPH publique el bueno. ;)
Y si se te ocurre otra cosa, ponla por aquí, que nos enteremos todos para ver si funciona de una vez.
En cuanto te lea lo de tio ya tienes super mario world para volar [wei]
jaja por?
^MiSaTo^
28/05/2009, 11:51
jaja por?
Ah ok tio, perdona, no te habia entendido bien :brindis:
Porque soy una tía xDD
Pero vamos que me da igual :brindis:
Porque soy una tía xDD
Pero vamos que me da igual :brindis:
Epa, fallo tecnico jejeje mil disculpas :lamer:
:brindis::brindis:
Teneis el Glbasic que ya compila para WIZ. [wei8]
Teneis el Glbasic que ya compila para WIZ. [wei8]
Esta guay, pero no es C++ jeje
:brindis::brindis:
Ta claro, a ver si sacan un kit facil de poner y completo para windows.
Y si se te ocurre otra cosa, ponla por aquí, que nos enteremos todos para ver si funciona de una vez.
Te puedo asegurar que el Reader2x para Wiz lo he compilado como te he dicho con el codeblocks y el kit para GP2X y funciona en Wiz.
A por fin!!!
Ya he conseguido que el Dev-Cpp se digne a intentar crear un *.gpe :) , pero me da un error.
Alguien sabe como evitar lo siguiente?
cannot find -lgmon
Id returned 1 exit status
[Build error] [Hello.gpe] Error1
< - >
Eso de GLbasic, me ha llamado poderosamente la atencion...
No significa eso que me rinda con c++, pero no debemos olvidar que a veces es importante pensar en el resultado, y no tanto en el orgullo de pensar que se ha programado desde cero.
Me lo mirare y a ver que tal es...
Alguien sabe como evitar lo siguiente?
cannot find -lgmon
Id returned 1 exit status
Te dice que no encuentra la librería gmon. Lo más fácil es no usarla ni linkarla, pero como no sé qué es ni qué estás haciendo, tampoco sé para qué la usas ni si puedas quitarla sin más. Si es una que hace profiling ¿para qué la necesitas? Si es otra, pues tienes que ponerla donde le hayas dicho al linkador que busque las librerías (parámetro -L)
Bueno, esque me lanza este mensaje sea lo que sea que quiero compilar en GP2X.
Y aun me lio bastante con eso de los links, pero me has dado la pista perfecta.
Muchas gracias :brindis:
el sdk para linux ? alguien sabe donde encontrarlo, aunque sea el de gp2x, haya que hacer como dice Hardyx, para que funcione.
Me suena haber visto el SDK de linux precisamente en la zona de descargas...
jejejej lo he mirando, ya hace rato, o es que estoy empanao, que también puede ser, o lo que es sdk que hay es el mac oxs y windows
Por cierto! El GLbasic pinta muy bien!
Me he instalado la Trial version y funciona aceptablemente, para compilar para wiz solo hay que darle a un icono y magia!
Si alguien sabe como conseguir la versión completa...
< - >
Pues el colgado sere yo :sobando: , porque el que no encuentro es el de win (para wiz), aunque no me ayudaria mucho, porque con el de GP2X solo consigo compilar en EXE.
^MiSaTo^
30/05/2009, 20:56
jejejej lo he mirando, ya hace rato, o es que estoy empanao, que también puede ser, o lo que es sdk que hay es el mac oxs y windows
http://www.gp32spain.com/foros/downloads.php?do=file&id=2169
Gracias ^MiSaTo^ , confirmado estoy empanado, jejeje, siento las molestias.
gcc -o main -l lSDL main.c
Obviando las rutas ;)
Donde se supone que esta lSDL? He probado con la SDL.h de /gp2xsdk/Tools/arm-gp2x-linux/gp2x-library/include/SDL pero no consigo nada.
Igual pasa con:
Documentación sobre SDL (http://www.libsdl.org/cgi/docwiki.cgi)
Hello world SDL en modo gráfico (http://wiki.gp2x.org/wiki/Writing_an_SDL_Hello_World)
Indice de tutoriales de desarrollo (http://wiki.gp2x.org/wiki/Development_Tutorials)
En el tutorial del modo gráfico dice:
To build it you'll need to run something similar to:
gcc sdltest.c -I /usr/include/SDL -lSDL -o sdltest
/usr/include/SDL no existe! :confused:
-lSDL le dice al compilador que linke el archivo libSDL.a en el programa. La sentencia para compilar sería:
gcc -o main -lSDL main.c
Si usas un compilador cruzado (toolchain) tienes que usar el arm-linux-gcc por ejemplo en vez de gcc. Si por ejemplo estás en linux y llamas a gcc estás compilando para Intel Pentium en vez de para Arm.
Muchos tutoriales de SDL son genéricos para Linux. Para compilar con un toolchain tienes que saber dónde están las librerías y los includes del toolchain. Normalmente es donde se instala el toolchain.
En el tutorial del modo gráfico dice:
To build it you'll need to run something similar to:
gcc sdltest.c -I /usr/include/SDL -lSDL -o sdltest
/usr/include/SDL no existe! :confused:
El compilador está buscando el archivo SDL.h en /usr/include/SDL, que es el directorio donde está normalmente en Linux. En Windows supongo que será algo como C:\SDL\include o donde sea que tengas instaladas las SDL :)
Si estás en un linux tipo Debian (por ejemplo, Ubuntu) y no te encuentra el /usr/include/SDL, es que necesitas instalar el paquete libsdl1.2-dev o similar.
Si, estoy bajo linux, Ubuntu.. Bueno a ver..
El codigo es este:
#include <stdio.h>
#include "/gp2xsdk/Tools/arm-gp2x-linux/gp2x-library/include/SDL/SDL.h"
int main(){
SDL_Surface *imagen, *screen;
SDL_Rect dest;
SDL_Init(SDL_INIT_VIDEO);
screen=SDL_SetVideoMode (320, 240, 16, SDL_SWSURFACE);
imagen = SDL_LoadBMP("imagen.bmp");
dest.x=0;
dest.y=0;
dest.w=320;
dest.h=240;
SDL_BlitSurface(imagen, NULL, screen, &dest);
SDL_flip();
while(1){}
return 0;
}
Y esto es lo que me da:
/opt/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu-gcc -o img.gpe img.c
/tmp/cckuzJAm.o: In function `main':
img.c:(.text+0x14): undefined reference to `SDL_Init'
img.c:(.text+0x28): undefined reference to `SDL_SetVideoMode'
img.c:(.text+0x3c): undefined reference to `SDL_RWFromFile'
img.c:(.text+0x4c): undefined reference to `SDL_LoadBMP_RW'
img.c:(.text+0x88): undefined reference to `SDL_UpperBlit'
img.c:(.text+0x8c): undefined reference to `SDL_flip'
collect2: ld returned 1 exit status
O con esto:
/opt/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu-gcc -o img.gpe -lSDL img.c
/opt/arm-openwiz-linux-gnu/bin/../lib/gcc/arm-openwiz-linux-gnu/4.2.4/../../../../arm-openwiz-linux-gnu/bin/ld: cannot find -lSDL
collect2: ld returned 1 exit status
En que la cago? :confused:
dragonet
31/05/2009, 01:19
A mí me ocurre lo mismo, en el primer caso supongo que será porque no enlazas con las SDL y no encuentra esas funciones, pero lo segundo se supone que debería funcionar y a mí me tira el mismo error. A ver si alguien nos tira un cable.
saboteur
31/05/2009, 01:29
Inténtalo añadiendo este parámetro:
/opt/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu-gcc -o img.gpe -L/gp2xsdk/Tools/arm-gp2x-linux/gp2x-library/lib -lSDL img.c
O si no, busca el archivo libSDL.a, y pon la carpeta en el parámetro -L.
Aunque veo que tienes las librerías en un sitio y el compilador en otro.
dragonet
31/05/2009, 01:40
Entonces hay que Linkar a las SDL de la gp2x, no? Supongo que el error será por hacerlo con las que lleva el sistema, a ver si las encuentro, alguien puso un link para descargarlas.
Inténtalo añadiendo este parámetro:
/opt/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu-gcc -o img.gpe -L/gp2xsdk/Tools/arm-gp2x-linux/gp2x-library/lib -lSDL img.c
O si no, busca el archivo libSDL.a, y pon la carpeta en el parámetro -L.
Aunque veo que tienes las librerías en un sitio y el compilador en otro.
Es que dentro de /opt/arm-openwiz-linux-gnu lo único que hay de SDL es
/opt/arm-openwiz-linux-gnu/arm-openwiz-linux-gnu/sys-root/usr/include/linux/sdla.h
Edito: Probando lo que me has dicho: /opt/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu-gcc -o img.gpe -L/gp2xsdk/Tools/arm-gp2x-linux/gp2x-library/lib -lSDL img.c
/opt/arm-openwiz-linux-gnu/bin/../lib/gcc/arm-openwiz-linux-gnu/4.2.4/../../../../arm-openwiz-linux-gnu/bin/ld: ERROR: /gp2xsdk/Tools/arm-gp2x-linux/gp2x-library/lib/libSDL.so uses hardware FP, whereas img.gpe uses software FP
/opt/arm-openwiz-linux-gnu/bin/../lib/gcc/arm-openwiz-linux-gnu/4.2.4/../../../../arm-openwiz-linux-gnu/bin/ld: failed to merge target specific data of file /gp2xsdk/Tools/arm-gp2x-linux/gp2x-library/lib/libSDL.so
/tmp/ccu5TRyA.o: In function `main':
img.c:(.text+0x8c): undefined reference to `SDL_flip'
collect2: ld returned 1 exit status
hellcross
31/05/2009, 02:40
Que envidia me estais dando todos programando en fenix con la wiz y yo aqui con mi queridisima gp32 que me da pereza desempolvarla y más aun programar para ella XD
Segata Sanshiro
31/05/2009, 02:52
Que envidia me estais dando todos programando en fenix con la wiz y yo aqui con mi queridisima gp32 que me da pereza desempolvarla y más aun programar para ella XD
¿En Fenix? Nada de eso, están hablando de programar en C+SDL, que es el siguiente paso después de Fenix para hacerse un hombre :D
hellcross
31/05/2009, 02:57
¿En Fenix? Nada de eso, están hablando de programar en C+SDL, que es el siguiente paso después de Fenix para hacerse un hombre :D
Leamonos los hilos fan club! jaja XD
endaramiz
31/05/2009, 16:03
Es que dentro de /opt/arm-openwiz-linux-gnu lo único que hay de SDL es
/opt/arm-openwiz-linux-gnu/arm-openwiz-linux-gnu/sys-root/usr/include/linux/sdla.h
Edito: Probando lo que me has dicho: /opt/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu-gcc -o img.gpe -L/gp2xsdk/Tools/arm-gp2x-linux/gp2x-library/lib -lSDL img.c
/opt/arm-openwiz-linux-gnu/bin/../lib/gcc/arm-openwiz-linux-gnu/4.2.4/../../../../arm-openwiz-linux-gnu/bin/ld: ERROR: /gp2xsdk/Tools/arm-gp2x-linux/gp2x-library/lib/libSDL.so uses hardware FP, whereas img.gpe uses software FP
/opt/arm-openwiz-linux-gnu/bin/../lib/gcc/arm-openwiz-linux-gnu/4.2.4/../../../../arm-openwiz-linux-gnu/bin/ld: failed to merge target specific data of file /gp2xsdk/Tools/arm-gp2x-linux/gp2x-library/lib/libSDL.so
/tmp/ccu5TRyA.o: In function `main':
img.c:(.text+0x8c): undefined reference to `SDL_flip'
collect2: ld returned 1 exit status
Hola, yo acabo de entrar en este mundillo de GP2X y ni siquiera tengo la wiz. Pero he conseguido compilar, te explico mi método:
Una vez descomprimido el compilador de ARM, se puede observar que hay varias carpetas (todo muy bien ordenado). Entonces, me descargué el devquitGP2X que también tienes las mismas carpetas y copié los archivos de include y también los de lib (y un archivo de bin de SDL). Para compilar lo hice con:
/opt/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu-gcc sdl_test.c -o sdl_test.gpe -I"/opt/arm-openwiz-linux-gnu/include/SDL" -L"/opt/arm-openwiz-linux-gnu/lib" -lSDL También se puede utilizar una variable para la ruta, pero, la primera vez, mejor así para acotar errores.
Eso sí, en el código cambié la linea correspondiente por
SDL_Flip(screen)
Saludos y espero que te sirva.
Si usas `sdl-config --cflags --libs` en la línea de compilación te da las librerías y los includes de SDL sin tener que poner todo el chorizo de directorios. Las comillas invertidas se ponen para obtener el resultado.
Usa sdl-config para ver los paths que tienes configurados.
dragonet
31/05/2009, 19:44
Bua, gracias endaramiz, ya funciona, eso lo intenté anoche pero me faltaban parámetros que pasarle al gcc, esto de no controlar mucho...
Cuando tenga un rato probaré lo que dice Hardyx.
endaramiz
01/06/2009, 10:33
Si usas `sdl-config --cflags --libs` en la línea de compilación te da las librerías y los includes de SDL sin tener que poner todo el chorizo de directorios. Las comillas invertidas se ponen para obtener el resultado.
Usa sdl-config para ver los paths que tienes configurados. Oh! Gracias! Ya no me acordaba del sdl-config, y siempre me había preguntado lo de las comillas invertidas. Ya lo tengo configurado aunque me costó un poco porque no tenía permisos de ejecución y modificaba el de las SDL de PC xD (lo digo por si a alguien más le pasa).
Ya no me acordaba de lo del sdl-config porque en GNU-GCC no hace falta llamarlo, supongo que porque ya sabe las rutas donde buscar. ¿Se podría configurar el compilador de ARM para que hiciese eso? (La documentación es bastante extensa)
Saludos.
El gcc trae opciones preconfiguradas para las librerías del sistema. Pero para usar la SDL u otras hay que decirle donde buscar con los parámetros -L (path libs) y -I (path includes). También puedes usar un entorno como Codeblocks (http://www.codeblocks.org/downloads/5) que te facilita el dar opciones al compilador, y tiene versiones para Windows, Linux y MacOS.
Buenas,
¿me podeis decir como habeis conseguido saltaros el error libSDL.so uses hardware FP, whereas test.wiz.gpe uses software FP?
Yo pegandome toda la mañana y no lo saco.
Compilo con lo siguiente:
/opt/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu-gcc test.c -o test.wiz.gpe -I"/opt/arm-openwiz-linux-gnu/arm-openwiz-linux-gnu/include/SDL" -L/opt/arm-openwiz-linux-gnu/arm-openwiz-linux-gnu/lib -lSDL
y siempre me suelta lo mismo:
/opt/arm-openwiz-linux-gnu/bin/../lib/gcc/arm-openwiz-linux-gnu/4.2.4/../../../../arm-openwiz-linux-gnu/bin/ld: ERROR: /opt/arm-openwiz-linux-gnu/arm-openwiz-linux-gnu/lib/libSDL.so uses hardware FP, whereas test.wiz.gpe uses software FP
/opt/arm-openwiz-linux-gnu/bin/../lib/gcc/arm-openwiz-linux-gnu/4.2.4/../../../../arm-openwiz-linux-gnu/bin/ld: failed to merge target specific data of file /opt/arm-openwiz-linux-gnu/arm-openwiz-linux-gnu/lib/libSDL.so
collect2: ld returned 1 exit status
A ver si me podeis ayudar porque ya no se por donde cogerlo.
Compilo con el toolchain de linux y le he añadido las libs e includes del sdk oficial de linuz de la gp2x.
¿me dejo algo?
Muchas gracias.
flozanot
06/06/2009, 18:15
Buenas,
¿me podeis decir como habeis conseguido saltaros el error libSDL.so uses hardware FP, whereas test.wiz.gpe uses software FP?
Yo pegandome toda la mañana y no lo saco.
Compilo con lo siguiente:
/opt/arm-openwiz-linux-gnu/bin/arm-openwiz-linux-gnu-gcc test.c -o test.wiz.gpe -I"/opt/arm-openwiz-linux-gnu/arm-openwiz-linux-gnu/include/SDL" -L/opt/arm-openwiz-linux-gnu/arm-openwiz-linux-gnu/lib -lSDL
y siempre me suelta lo mismo:
/opt/arm-openwiz-linux-gnu/bin/../lib/gcc/arm-openwiz-linux-gnu/4.2.4/../../../../arm-openwiz-linux-gnu/bin/ld: ERROR: /opt/arm-openwiz-linux-gnu/arm-openwiz-linux-gnu/lib/libSDL.so uses hardware FP, whereas test.wiz.gpe uses software FP
/opt/arm-openwiz-linux-gnu/bin/../lib/gcc/arm-openwiz-linux-gnu/4.2.4/../../../../arm-openwiz-linux-gnu/bin/ld: failed to merge target specific data of file /opt/arm-openwiz-linux-gnu/arm-openwiz-linux-gnu/lib/libSDL.so
collect2: ld returned 1 exit status
A ver si me podeis ayudar porque ya no se por donde cogerlo.
Compilo con el toolchain de linux y le he añadido las libs e includes del sdk oficial de linuz de la gp2x.
¿me dejo algo?
Muchas gracias.
No te dejas nada. El kit que hay aquí esta obsoleto. Necesitas construirte una toolchain con soporte VFP. Yo ya me he hecho una (lo que ocurre es que la hice contra GLIBC2.9 en lugar de contra GLIBC2.6 y ahora tengo que ocuparme de recompilar SDL :D ) y va todo de muerte. Existe GRAN diferencia entre usar el VFP a no usarlo.
Si quieres te digo como hacerte una toolchain (es fácil una vez que se sabe).
Animo y a darle.
Segata Sanshiro
06/06/2009, 18:21
Una dudilla un poco offtopic que me ha surgido pensando en programar para la Wiz. Por ahí hay miles de tutoriales y cursos de C, pero no conozco ninguno que trate a fondo el tema de compiladores (enlazado de librerías, toolchains, makefiles, etc.), y es un poco difícil trastear sin saber lo mínimo. ¿Alguna web o libro que trate sobre el tema? :)
Asiaaas.
No te dejas nada. El kit que hay aquí esta obsoleto. Necesitas construirte una toolchain con soporte VFP. Yo ya me he hecho una (lo que ocurre es que la hice contra GLIBC2.9 en lugar de contra GLIBC2.6 y ahora tengo que ocuparme de recompilar SDL :D ) y va todo de muerte. Existe GRAN diferencia entre usar el VFP a no usarlo.
Si quieres te digo como hacerte una toolchain (es fácil una vez que se sabe).
Animo y a darle.
Pues si me puedes explicar un poco como hacer la toolchain estaria de lujo porque estoy un poco perdido.
Me he estado mirando el tema de vfp y a pesar de que más o menos lo entiendo, lo de rehacer la toolchain me supera.
flozanot
06/06/2009, 22:30
Para hacerte el cross-compiler necesitaras:
Un GNU C ya instalado versión 4.1.0 o superior. (Se mira con gcc -v)
Las binutils 2.19.1
El GCC 4.4.0
El kernel linux (la versión 2.6.x, yo lo he probado con la 2.6.29.4)
La GLIBC 2.9 o la GLIBC 2.6. Con la 2.9 has de recompilar, así que supongo que mejor para ti sería la 2.6 que con la que han compilado los de GPH (si mal no recuerdo).
GLIBC-PORTS-2.9 o GLIBC-PORTS-2.6, dependiendo de si has elegido la 2.9 o la 2.6.
Esto requiere una explicación:
La GLIBC no existe para ARM ni para MIPS ni para nada que no sea x86, así que es necesario portarla en algunas partes. Dichas partes son el paquete GCLIB-PORTS.
Actualmente (en la versión 2.6 supongo que no) hay fallos en los fuentes, fácilmente solucionables, que impiden compilar. Más adelante te diré como corregirlos.
Los glibc-threads no hacen falta. No los instales porque no sirvan para nada.
Recapitulando:
[ ] Compilador GNU instalado version 4.1.0 o mejor.
[ ] Las binutils 2.19.1
[ ] El GCC 4.4.0
[ ] El kernel linux (2.6.x, mejor la ultima version, la 2.6.29.4)
[ ] GLIBC y GLIBC-PORTS (usa la 2.6 para no tener que recompilar nada)
Configurando para la toochain:
1-Crea una carpeta donde meter los sources: por ejemplo ${HOME}/toolchain/src
2-Descomprime directamente las binutils, el gcc, la glibc y el kernel. Las glibc-ports aún no.
3-Descomprime las glibc-ports a un directorio temporal.
4-Crea una subcarpeta en donde descomprimiste la glibc llamada "ports"
5-En la 2.6 aún no sé, pero en la 2.9 hay fallos en los sources que deben ser corregidos:
glibc-2.9/nptl/sysdeps/unix/sysv/linux/lowlevellock.c
Linea 26: #include <tls.h> [añadido]
glibc-2.9/ports/sysdeps/arm/fpu/setjmp.S:
Linea 37: hidden_def (__sigsetjmp) [añadido]
Ya tienes los sources configurados.
Ahora necesitas los guiones. Estos guiones son versiones modificadas de muchos guiones que he visto por internet y que ninguno funcionaba. :D
build_1.sh:
#!/bin/bash
# Setup
PREFIX=<ruta absoluta a la toolchain, por ejemplo ${HOME}/toolchain>
TARGET=arm-unknown-linux-gnu
SYSROOT=${PREFIX} <--Esto puedes poner ${PREFIX}/sysroot (mira al final)
export ARCH=arm
export CROSS_COMPILE=${TARGET}-
export PATH=$PATH:${PREFIX}/bin
mkdir -p ${PREFIX}/src
# GNU binutils
cd ${PREFIX}/src
mkdir -p BUILD/binutils-2.19.1
cd BUILD/binutils-2.19.1
../../binutils-2.19.1/configure --prefix=${PREFIX} --target=${TARGET} --with-sysroot=${SYSROOT} 2>&1 | tee configure.out
make 2>&1 | tee make.out
make install 2>&1 | tee -a make.out
build_2.sh: (Actualizado)
#!/bin/bash
# Setup
PREFIX=/home/fernando/Desktop/prebuilt-toolchain/new/
TARGET=arm-unknown-linux-gnu
SYSROOT=${PREFIX}
export ARCH=arm
export CROSS_COMPILE=${TARGET}-
export PATH=$PATH:${PREFIX}/bin
#Primer GCC
cd ${PREFIX}/src
mkdir -p BUILD/gcc-4.4.0-stage1
cd BUILD/gcc-4.4.0-stage1
../../gcc-4.4.0/configure --prefix=${PREFIX} --target=${TARGET} --enable-languages=c --with-sysroot=${SYSROOT} --disable-threads --disable-libssp --disable-libgomp --disable-libmudflap --without-headers --with-newlib --enable-shared 2>&1 | tee configure.out
make 2>&1 | tee make.out
make install 2>&1 | tee -a make.out
build_3.sh:
#!/bin/bash
# Setup
PREFIX=/home/fernando/Desktop/prebuilt-toolchain/new/
TARGET=arm-unknown-linux-gnu
SYSROOT=${PREFIX}
export ARCH=arm
export CROSS_COMPILE=${TARGET}-
export PATH=$PATH:${PREFIX}/bin
# Linux Kernel Headers
cd ${PREFIX}/src
ln -sf linux-2.6.29.4 linux
cd linux
make menuconfig ARCH=arm
make include/linux/version.h
mkdir -p ${SYSROOT}/usr/include
cp -a ${PREFIX}/src/linux/include/linux ${PREFIX}/include/linux
cp -a ${PREFIX}/src/linux/include/asm-arm ${PREFIX}/include/asm
cp -a ${PREFIX}/src/linux/include/asm-generic ${PREFIX}/include/asm-generic
buid_4.sh:
#!/bin/bash
# Setup
PREFIX=/home/fernando/Desktop/prebuilt-toolchain/new/
TARGET=arm-unknown-linux-gnu
SYSROOT=${PREFIX}
export ARCH=arm
export CROSS_COMPILE=${TARGET}-
export PATH=$PATH:${PREFIX}/bin
# Glibc headers
export old_BUILD_CC=$BUILD_CC
export old_CC=$CC
export old_CXX=$CXX
export old_AR=$AR
export old_RANLIB=$RANLIB
export old_AS=$AS
export old_LD=$LD
cd ${PREFIX}/src
mkdir BUILD/glibc-2.9-headers
cd BUILD/glibc-2.9-headers
export BUILD_CC=gcc
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export AR=${CROSS_COMPILE}ar
export RANLIB=${CROSS_COMPILE}ranlib
export AS=${CROSS_COMPILE}as
export LD=${CROSS_COMPILE}ld
../../glibc-2.9/configure --build=${TARGET} --prefix=${PREFIX} --target=${TARGET} --enable-add-ons=nptl,ports --with-headers=${PREFIX}/src/linux/include cross_compiling=yes 2>&1 | tee configure.out
make cross-compiling=yes install-headers 2>&1 | tee make.out
touch ${PREFIX}/include/gnu/stubs.h
touch ${PREFIX}/include/bits/stdio_lim.h
export BUILD_CC=$old_BUILD_CC
export CC=$old_CC
export CXX=$old_CXX
export AR=$old_AR
export RANLIB=$old_RANLIB
export AS=$old_AS
export LD=$old_LD
export old_BUILD_CC=
export old_CC=
export old_CXX=
export old_AR=
export old_RANLIB=
export old_AS=
export old_LD=
build_5.sh:
#!/bin/bash
# Setup
PREFIX=/home/fernando/Desktop/prebuilt-toolchain/new/
TARGET=arm-unknown-linux-gnu
SYSROOT=${PREFIX}
export ARCH=arm
export CROSS_COMPILE=${TARGET}-
export PATH=$PATH:${PREFIX}/bin
# glibc
export old_BUILD_CC=$BUILD_CC
export old_CC=$CC
export old_CXX=$CXX
export old_AR=$AR
export old_RANLIB=$RANLIB
export old_AS=$AS
export old_LD=$LD
cd ${PREFIX}/src
mkdir -p BUILD/glibc-2.9
cd BUILD/glibc-2.9
export BUILD_CC=gcc
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export AR=${CROSS_COMPILE}ar
export RANLIB=${CROSS_COMPILE}ranlib
export AS=${CROSS_COMPILE}as
export LD=${CROSS_COMPILE}ld
../../glibc-2.9/configure --prefix=${PREFIX} --build=${TARGET} --target=${TARGET} --enable-add-ons=nptl,ports --with-binutils=${PREFIX}/${TARGET}/bin --with-headers=${PREFIX}/include cross_compiling=yes libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes libc_cv_gnu89_inline=yes 2>&1 | tee configure.out
make cross_compiling=yes 2>&1 | tee make.out
make install
export BUILD_CC=$old_BUILD_CC
export CC=$old_CC
export CXX=$old_CXX
export AR=$old_AR
export RANLIB=$old_RANLIB
export AS=$old_AS
export LD=$old_LD
export old_BUILD_CC=
export old_CC=
export old_CXX=
export old_AR=
export old_RANLIB=
export old_AS=
export old_LD=
build_6.sh:
#!/bin/bash
# Setup
PREFIX=/home/fernando/Desktop/prebuilt-toolchain/new/
TARGET=arm-unknown-linux-gnu
SYSROOT=${PREFIX}
export ARCH=arm
export CROSS_COMPILE=${TARGET}-
export PATH=$PATH:${PREFIX}/bin
export INCLUDE=${PREFIX}/include:$INCLUDE
export LD_LIBRARY_PATH=${PREFIX}/lib:$LD_LIBRARY_PATH
#GNUC final :)
cd ${PREFIX}/src
mkdir -p BUILD/gcc-4.4.0
cd BUILD/gcc-4.4.0
mkdir -p ${PREFIX}/${TARGET}/include
mkdir -p ${PREFIX}/${TARGET}/lib
cp -R ${PREFIX}/include ${PREFIX}/${TARGET}/include
cp -R ${PREFIX}/lib ${PREFIX}/${TARGET}/lib
../../gcc-4.4.0/configure --prefix=${PREFIX} --libdir=${PREFIX}/lib --includedir=${PREFIX}/include --host=${TARGET} --target=${TARGET} --enable-languages=c,c++ --with-sysroot=${SYSROOT} --with-arch=armv5te --with-float=hard --enable-__cxa_atexit --enable-threads=posix --enable-symvers=gnu --enable-c99 --enable-long-long --enable-target-optspace 2>&1 | tee configure.out
make 2>&1 | tee make.out
make install 2>&1 | tee -a make.out
cd ../..
build_7.sh:
#!/bin/bash
# Setup
PREFIX=/home/fernando/Desktop/prebuilt-toolchain/new/
TARGET=arm-unknown-linux-gnu
SYSROOT=${PREFIX}
export ARCH=arm
export CROSS_COMPILE=${TARGET}-
export PATH=$PATH:${PREFIX}/bin
export INCLUDE=${PREFIX}/include:$INCLUDE
export LD_LIBRARY_PATH=${PREFIX}/lib:$LD_LIBRARY_PATH
# Linux kernel
cd ${PREFIX}/src/linux
make zImage
make modules
make INSTALL_MOD_PATH=${SYSROOT} modules_install
Notas: si pones sysroot!=prefix tendras luego que copiar de sysroot a prefix.
Los ejecutas en orden como usuario normal (no como root) y debería funcionarte sin problemas.
Si deseas más lenguajes a parte de c y c++, indicalo en el guión build_6.sh en la opción --enable-languages=c,c++,<lenguaje1>,... por ejemplo, para ada, fortran, c, c++ y java, "--enable-languages=c,c++,ada,fortran,java".
Espero que esto te sirva de utilidad.
EDITO: La Wiz no tiene soporte VFP, así que no hay razón para no usar la toolchain que hay para descargar aquí.
Madre mia que follón, yo me esperaré a que saquen un codeblocks preparado para wiz, o a que los de gph saquen un toolkit ya "ready to use" para windows, porque una cosa es comerte la bola haciendo un juego/aplicacion y otra es pelearte con los toolchains para crear un simple hello world... :muerto:
flozanot
06/06/2009, 23:15
Madre mia que follón, yo me esperaré a que saquen un codeblocks preparado para wiz, o a que los de gph saquen un toolkit ya "ready to use" para windows, porque una cosa es comerte la bola haciendo un juego/aplicacion y otra es pelearte con los toolchains para crear un simple hello world... :muerto:
Si quieres te puedo pasar mi toochain para Linux. La compilo contra la misma versión de GLIBC que GPH y ya.
saboteur
07/06/2009, 01:27
:asomb: Estos tutoriales deberían ir directos al wiki de gp2x. Para no tener que buscarlos más adelante.
Segata Sanshiro
07/06/2009, 01:30
...
Menuda currada tío, qué pasote. Mil gracias!! :brindis:
Esto me va a venir MUY bien para no tener que buscarme la vida por mi cuenta cuando vaya a compilar para la Wiz, ¡muchas gracias flozanot!
Flozanot, eso ha estado de lujo. Un millón de gracias. :)
Con todo la info que has puesto no he tenido más remedio que probarlo ya a pesar de que creo que el tema me desborda. Me lo he tomado como una buena manera de iniciarme en el tema del tollchaining.
Te comento.
Finalmente me he decidido por glibc2.6 para ahorrarme la recompilación.
Los pasos 1 y 2 perfecto. Sólo he tenido que añadir al gcc el gmp 4.3.1 y el mpfr 2.4.1.
Por el resto todo bien.
El paso tres sin problemas también pero al llegar al paso 4 kaboom!!..
running configure fragment for ports/sysdeps/arm/elf
checking for ARM TLS support... yes
running configure fragment for nptl/sysdeps/pthread
checking for forced unwind support... no
configure: error: forced unwind support is required
make: *** No hay ninguna regla para construir el objetivo `install-headers'. Alto.
touch: no se puede efectuar `touch' sobre «/home/xau/toolchain/include/gnu/stubs.h»: No existe el fichero o el directorio
touch: no se puede efectuar `touch' sobre «/home/xau/toolchain/include/bits/stdio_lim.h»: No existe el fichero o el directorioHe revisado el tema en el config.log y he encontrado lo siguiente:
configure:27: checking for forced unwind support
configure:51: arm-unknown-linux-gnu-gcc -o conftest -g -O2 conftest.c >&5
/home/xau/toolchain/lib/gcc/arm-unknown-linux-gnu/4.4.0/../../../../arm-unknown-linux-gnu/bin/ld: crt1.o: No such file: No such file or directory
collect2: ld returned 1 exit status
configure:57: $? = 1
configure: failed program was:
| /* confdefs.h. */
|
| #define PACKAGE_NAME "GNU C Library"
| #define PACKAGE_TARNAME "c-library"
| #define PACKAGE_VERSION "(see version.h)"
| #define PACKAGE_STRING "GNU C Library (see version.h)"
| #define PACKAGE_BUGREPORT "glibc"
| #ifdef __cplusplus
| void exit (int);
| #endif
| #define ASM_GLOBAL_DIRECTIVE .globl
| #define HAVE_ASM_SET_DIRECTIVE 1
| #define ASM_TYPE_DIRECTIVE_PREFIX %
| #define DO_VERSIONING 1
| #define HAVE_ASM_PREVIOUS_DIRECTIVE 1
| #define HAVE_Z_COMBRELOC 1
| #define NO_UNDERSCORES 1
| #define HAVE_ASM_WEAK_DIRECTIVE 1
| #define HAVE_ASM_CFI_DIRECTIVES 1
| #define HAVE_BUILTIN_EXPECT 1
| #define HAVE_BUILTIN_REDIRECTION 1
| #define HAVE___THREAD 1
| #define HAVE_TLS_MODEL_ATTRIBUTE 1
| #define SIZEOF_LONG_DOUBLE 0
| #define HAVE_TLS_SUPPORT 1
| /* end confdefs.h. */
| #include <unwind.h>
| int
| main ()
| {
|
| struct _Unwind_Exception exc;
| struct _Unwind_Context *context;
| _Unwind_GetCFA (context)
| ;
| return 0;
| }
configure:82: result: no
configure:156: error: forced unwind support is requiredHe leido tantos documentos que ya no se por donde continuar. He visto algo al respecto de necesitar una doble compilación.
¿¿quizás era eso a lo que te referías al usar glibc 2.9??
No se muy bien por donde seguir, ¿alguna sugerencia?
< - >
Por cierto, aunque parece un poco desfasado, he encontrado buena documentación para la construcción de toolchains que puede ser útil para la gente que como yo, esto se le hace grande
Aquí la enlazo.
http://www.aleph1.co.uk/oldsite/armlinux//docs/toolchain/toolchHOWTO/x183.html
El kit que hay aquí esta obsoleto. Necesitas construirte una toolchain con soporte VFP. Yo ya me he hecho una
Me estoy quedando a cuadros :eek:, cómo que soporte VFP? Creo que el procesador ARM de la Wiz no soporta punto flotante por hardware. Aunque el tener aceleradora 3D también me hace dudar. El SDK de la GP2X que estamos usando lo hace todo por software. Pero como sea verdad esto y funcionen las cosas con VFP en la Wiz va a ser el bombazo del siglo.
Segata Sanshiro
07/06/2009, 03:21
¿Seguro que soporta coma flotante por hardware? Pregunto porque no lo pone en ningún sitio. La CPU es esta:
http://www.arm.com/products/CPUs/families/ARM9EFamily.html
Ahí dice "Optional VFP9 coprocessor delivers floating-point performance". Si miramos la web del SoC que monta la Wiz:
http://www.mesdigital.com/english/Products/product_pollux.asp (Firefox dice que "este sitio puede dañar tu equipo", pero he entrado sin problemas),
no dice por ningún lado que incluya dicho coprocesador.
Si quieres te puedo pasar mi toochain para Linux. La compilo contra la misma versión de GLIBC que GPH y ya.
Te agradezco el ofrecimiento, pero es que eso no serviria para windows, no ?
Un saludo. ;-)
flozanot
07/06/2009, 13:06
Flozanot, eso ha estado de lujo. Un millón de gracias. :)
Con todo la info que has puesto no he tenido más remedio que probarlo ya a pesar de que creo que el tema me desborda. Me lo he tomado como una buena manera de iniciarme en el tema del tollchaining.
Te comento.
Finalmente me he decidido por glibc2.6 para ahorrarme la recompilación.
Los pasos 1 y 2 perfecto. Sólo he tenido que añadir al gcc el gmp 4.3.1 y el mpfr 2.4.1.
Por el resto todo bien.
El paso tres sin problemas también pero al llegar al paso 4 kaboom!!..
running configure fragment for ports/sysdeps/arm/elf
checking for ARM TLS support... yes
running configure fragment for nptl/sysdeps/pthread
checking for forced unwind support... no
configure: error: forced unwind support is required
make: *** No hay ninguna regla para construir el objetivo `install-headers'. Alto.
touch: no se puede efectuar `touch' sobre «/home/xau/toolchain/include/gnu/stubs.h»: No existe el fichero o el directorio
touch: no se puede efectuar `touch' sobre «/home/xau/toolchain/include/bits/stdio_lim.h»: No existe el fichero o el directorioHe revisado el tema en el config.log y he encontrado lo siguiente:
configure:27: checking for forced unwind support
configure:51: arm-unknown-linux-gnu-gcc -o conftest -g -O2 conftest.c >&5
/home/xau/toolchain/lib/gcc/arm-unknown-linux-gnu/4.4.0/../../../../arm-unknown-linux-gnu/bin/ld: crt1.o: No such file: No such file or directory
collect2: ld returned 1 exit status
configure:57: $? = 1
configure: failed program was:
| /* confdefs.h. */
|
| #define PACKAGE_NAME "GNU C Library"
| #define PACKAGE_TARNAME "c-library"
| #define PACKAGE_VERSION "(see version.h)"
| #define PACKAGE_STRING "GNU C Library (see version.h)"
| #define PACKAGE_BUGREPORT "glibc"
| #ifdef __cplusplus
| void exit (int);
| #endif
| #define ASM_GLOBAL_DIRECTIVE .globl
| #define HAVE_ASM_SET_DIRECTIVE 1
| #define ASM_TYPE_DIRECTIVE_PREFIX %
| #define DO_VERSIONING 1
| #define HAVE_ASM_PREVIOUS_DIRECTIVE 1
| #define HAVE_Z_COMBRELOC 1
| #define NO_UNDERSCORES 1
| #define HAVE_ASM_WEAK_DIRECTIVE 1
| #define HAVE_ASM_CFI_DIRECTIVES 1
| #define HAVE_BUILTIN_EXPECT 1
| #define HAVE_BUILTIN_REDIRECTION 1
| #define HAVE___THREAD 1
| #define HAVE_TLS_MODEL_ATTRIBUTE 1
| #define SIZEOF_LONG_DOUBLE 0
| #define HAVE_TLS_SUPPORT 1
| /* end confdefs.h. */
| #include <unwind.h>
| int
| main ()
| {
|
| struct _Unwind_Exception exc;
| struct _Unwind_Context *context;
| _Unwind_GetCFA (context)
| ;
| return 0;
| }
configure:82: result: no
configure:156: error: forced unwind support is requiredHe leido tantos documentos que ya no se por donde continuar. He visto algo al respecto de necesitar una doble compilación.
¿¿quizás era eso a lo que te referías al usar glibc 2.9??
No se muy bien por donde seguir, ¿alguna sugerencia?
< - >
Por cierto, aunque parece un poco desfasado, he encontrado buena documentación para la construcción de toolchains que puede ser útil para la gente que como yo, esto se le hace grande
Aquí la enlazo.
http://www.aleph1.co.uk/oldsite/armlinux//docs/toolchain/toolchHOWTO/x183.html
"forced unwind support is required":
¡Que extraño!. Prueba a repetir el paso 2 (build_2.sh) con la opción en configure "--enable-shared".
Como sea eso, me vi a cagar en to lo que se menea. Un momento y actualizo el guión.
< - >
Me estoy quedando a cuadros :eek:, cómo que soporte VFP? Creo que el procesador ARM de la Wiz no soporta punto flotante por hardware. Aunque el tener aceleradora 3D también me hace dudar. El SDK de la GP2X que estamos usando lo hace todo por software. Pero como sea verdad esto y funcionen las cosas con VFP en la Wiz va a ser el bombazo del siglo.
Yo tampoco lo creía, pero al compilar contra las OpenGL, me demandaba soporte VFP :confused::confused::confused::confused: Así que me armé de paciencia y compila mi toolchain con -mhard-float y -mvfp. E hice un test consistente en sumar, restar, multiplicar y dividir floats compilando para hardware (-mvfp) y la Wiz se los tragaba sin problemas (puse salidas de texto para comprobar que no se quedaban colgados).
De todas formas, las extensiones Jazelle implican VFP ¿no? vamos, leido así por encima. Que alguien me corrija o me diga si tengo razón o no :confused::confused:
Con tanta cosa yo ya estoy MUY confuso respecto a lo que tiene o no la Wiz. Desde luego, si se confirma que trae VFP la Pandora lo va a pasar muy mal. [wei5]
Estoy ahora con el tema, así que si averiguo algo más, lo digo.
"forced unwind support is required":
¡Que extraño!. Prueba a repetir el paso 2 (build_2.sh) con la opción en configure "--enable-shared".
Como sea eso, me vi a cagar en to lo que se menea. Un momento y actualizo el guión.
Te confirmo que el "--enable-shared" no soluciona el problema.
Lo he solventado añadiendo al build_4.sh lo siguiente (justo después del cd BUILD/glibc-2.9-headers) para forzar el soporte unwind:
echo "libc_cv_forced_unwind=yes" > config.cache
echo "libc_cv_c_cleanup=yes" >> config.cache
echo "libc_cv_mlong_double_128=yes" >> config.cache
echo "libc_cv_alpha_tls=yes" >> config.cache
Posteriormente hay que añadir al configure la opción "--cache-file=config.cache"
Una vez arreglado esto, tira hasta que vuelve a fallar (en la versión con glibc 2.6 y también con 2.9) debido a un problema con unas expresiones regulares en el fichero /src/glibc-2.9/scripts/gen-sorted.awk.
Hay que substituir \/[^/]+$ con \/[^\/]+$ en las diferentes lineas en las que falla. Parece que es necesario escapar el / dentro del paréntesis o no lo interpreta.
Después de estos apaños, finaliza el build_4 correctamente con el glibc 2.9.
El mismo patch se necesita para glibc 2.6.
Seguimos con el tema a ver si lo cuadramos ;)
el build_5 sin problemas, pero en el build_6 volvemos a engancharnos.
Intenta compilar sobre el directorio cd BUILD/gcc-4.4.0 donde no encuentra make.
Lo corrijo compilando sobre el cd BUILD/gcc-4.4.0-stage1.
Despues de esto finaliza correctamente el paso 6 y ahora mismo se está compilando el 7. A ver que pasa. xD
flozanot
07/06/2009, 19:08
Te confirmo que el "--enable-shared" no soluciona el problema.
Lo he solventado añadiendo al build_4.sh lo siguiente (justo después del cd BUILD/glibc-2.9-headers) para forzar el soporte unwind:
echo "libc_cv_forced_unwind=yes" > config.cache
echo "libc_cv_c_cleanup=yes" >> config.cache
echo "libc_cv_mlong_double_128=yes" >> config.cache
echo "libc_cv_alpha_tls=yes" >> config.cache
Posteriormente hay que añadir al configure la opción "--cache-file=config.cache"
Una vez arreglado esto, tira hasta que vuelve a fallar (en la versión con glibc 2.6 y también con 2.9) debido a un problema con unas expresiones regulares en el fichero /src/glibc-2.9/scripts/gen-sorted.awk.
Hay que substituir \/[^/]+$ con \/[^\/]+$ en las diferentes lineas en las que falla. Parece que es necesario escapar el / dentro del paréntesis o no lo interpreta.
Después de estos apaños, finaliza el build_4 correctamente con el glibc 2.9.
El mismo patch se necesita para glibc 2.6.
Seguimos con el tema a ver si lo cuadramos ;)
el build_5 sin problemas, pero en el build_6 volvemos a engancharnos.
Intenta compilar sobre el directorio cd BUILD/gcc-4.4.0 donde no encuentra make.
Lo corrijo compilando sobre el cd BUILD/gcc-4.4.0-stage1.
Despues de esto finaliza correctamente el paso 6 y ahora mismo se está compilando el 7. A ver que pasa. xD
Ejem... pues veras, resulta que tenia mi perfil de usuario Linux "contaminado" con ciertos parámetros que favorecían el buen funcionamiento de los guiones.
Acabo de ingresar como "root" y ahora me esta construyendo la glibc, osea, que es un problema en los guiones que creo haber solucionado ya. No voy a modificar nada no sea que vuelva a meter la pata. Disculpas a todos... esto de ser tan torpe... [propeller]:llorosa::llorosa::llorosa::llorosa:
Acabé la compilación del toolchain con exito. (el de glibc 2.9)
Después de ordenar algunos directorios y de meterle los includes y libs de gp2x, he probado de compilar alguna cosa con la toolchain nueva y mi gozo en un pozo.
/home/xau/new-toolchain/bin/arm-unknown-linux-gnu-gcc main.c -o hellobasico.wiz.gpe -I/home/xau/new-toolchain/arm-unknown-linux-gnu/include -L/home/xau/new-toolchain/arm-unknown-linux-gnu/lib
/home/xau/new-toolchain/lib/gcc/arm-unknown-linux-gnu/4.4.0/../../../../arm-unknown-linux-gnu/bin/ld: crt1.o: No such file: No such file or directory
collect2: ld devolvió el estado de salida 1
el crt1.o este me lleva de cabeza.
Llevo un rato buscando y no encuentro nada. Estoy ya un poco desesperado.
¿algún consejo?
flozanot
07/06/2009, 20:39
Bueno, pues la compilacion de glibc fue aparentemente perfecta... ahora estoy compilando el gcc con c, c++, java y fortran. Si va bien, pondré los guiones y la toolchain ya precompilada.
Me he estado mirando la documentación el procesador arm926tj-s y ese "-s"... ¿no tendrá algo que ver con el coprocesador vfp9-s?
La verdad es que no sé que pensar :confused: por un lado dicen que Pollux no tiene coprocesador VFP, pero por otro lado al enlazar las librerías te dice que estas han sido compiladas para VFP.
Hice algunas pruebas con la toochain que me compile con -mhard-float y la Wiz no se petaba después de las operaciones float de suma/resta y multiplicación/división.
Por si las moscas, reharé las pruebas, no sea que algún "duende" hiciera el "milagro" :D
Saludos. ¡Y a ver si termina ya de compilar! ¡Menudo :hype:!
Segata Sanshiro
07/06/2009, 21:18
La verdad es que no sé que pensar :confused: por un lado dicen que Pollux no tiene coprocesador VFP, pero por otro lado al enlazar las librerías te dice que estas han sido compiladas para VFP.
Hice algunas pruebas con la toochain que me compile con -mhard-float y la Wiz no se petaba después de las operaciones float de suma/resta y multiplicación/división.
Por si las moscas, reharé las pruebas, no sea que algún "duende" hiciera el "milagro" :D
Quizás no petaba por lo que explica este usuario de gp32x (la negrita la he puesto yo) :
For the record, the CPU used in Wiz (ARM926EJ) does not have VFP. If you compile a program that has VFP or the older FPA instructions then they'll get trapped by the kernel, which will either emulate them or kill the program depending on how it's configured. If the kernel emulates it then the result will be much slower than if you had the compiler generate code to emulate it, because it involves syscall overhead.
Por ahí hay miles de tutoriales y cursos de C, pero no conozco ninguno que trate a fondo el tema de compiladores (enlazado de librerías, toolchains, makefiles, etc.), y es un poco difícil trastear sin saber lo mínimo. ¿Alguna web o libro que trate sobre el tema? :)
La documentación oficial de GCC tiene mucha información.
http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/
Aquí por ejemplo, tienes las opciones del compilador explicadas
http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Invoking-GCC.html#Invoking-GCC
Y aquí la documentación de SDL
http://www.libsdl.org/cgi/docwiki.cgi/
Quizás no petaba por lo que explica este usuario de gp32x (la negrita la he puesto yo) :Eso ya me suena más lógico, ya que los ARM de esta familia no soportan VFP. La NDS tiene un ARM que tampoco tiene VFP y sin embargo tiene hardware 3D.
flozanot
08/06/2009, 00:10
Bueno, pues he hecho unas pruebas y... la Wiz NO tiene soporte VFP, se las traga porque una isr atrapa la excepción de instrucción no válida.
En cuanto a rendimiento, es más alto con emulación software que con instrucciones hardware. (Pero una bestialidad)
Bueno, miremoslo por el lado positivo, ya no urge tanto una toolchain decente :lamer:
Ya sólo queda recompilar si o si la OGL que es la que demandaba VFPhard.
He probado nanoGL y GLES y petan por soleares aunque compilar compilan bien.
Saludos.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.