Para poder compilar en MacOS X

Started by josebita, November 05, 2009, 02:31:10 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

josebita

Estoy intentando compilar Bennu en MacOS X leopard.
Hay que tocar algunas cosillas para que la compilación sea "./configure && make && make install"
Del fichero core/configure.in, a la parte de *darwin* hay que añadirle un "-arch i386" a las LDFLAGS y CFLAGS. Esto crea un binario para i386.
Habría que hacer que las librerías se compilaran con extensión ".dylib" en lugar de ".so" pero realmente no sé cómo se hace...
Iré editando según vaya encontrando cositas.

(El core con la libdes incluída ya parece funcionar, es fácil, me estoy pegando con las dependencias de los módulos)

josebita

Vale, ya está.
Olvidaos de lo de arriba. La solución al final me ha quedado demasiado artesanal, así que Splinter, no te sé decir exáctamente qué cambiar para que las cosas funcionen, pero sí te sé decir qué efecto deben tener:
Lo primero de todo es que hay que compilar para arquitectura de 32 bits. Parece ser que en Snow Leopard (OSX 10.6) por defecto la compilación se hace ya para 64 bits, así que el configure hay que hacerlo de la siguiente forma (tanto para core como para modules):
[code language="bash"]/configure CFLAGS="-arch i386" CXXFLAGS="-arch i386" LDFLAGS="-L/sw/lib -arch i386" OBJCFLAGS="-arch i386" --build="i386-apple-darwin10.0.0"[/code]
Es más que probable que más de un flag sobre, pero así nos aseguramos.
Aún así, la compilación fallará.

En el portátil que me han dejado, las cosas están compiladas con fink y por eso, las dependencias están en /sw/lib, así que el configure de los módulos se queja de que no encuentra la SDL_mixer (a pesar de estar instalada bien, esto me ha llevado un buen rato encontrarlo).
Se arregla añadiendo "-L/sw/lib" a la línea del configure.in que busca el símbolo Mix_AllocateChannels.
Aún así la compilación fallará.

Al compilar las lib* (incluída la libbgdrtm.so) se usa el flag de enlazado para ld "-module". No sé qué hace ni por qué se arregla pero cambiándolo a "-shared" en cada lib* (no en las mod*) funciona y por fin compila.
Aún así, fallará al ejecutar.

Resulta que gcc en nuestro caso saca librerías de tipo ".so" y el código de Bennu está hecho para aceptar librerías de extensión ".dylib". No sé si se trata de un mero cambio de extensión o hay algo más allá, pero el caso es que cambiando el par de sitios donde se hace dlopen (core/bgdc/c_main.c y el equivalente para la bgdrtm) y recompilando, funciona a las mil maravillas en el par de tests chorras que he hecho.

Eso sí, Benko, te toca hacer los mismo inventos que en Linux de modificar el PATH y la variable LD_LIBRARY_PATH para que se encuentren las librerías, ¿ok?.
Otra cosa es que no te incluyo las SDL y SDL_mixer porque las que tengo en mi sistema no tienen soporte para ningún formato de audio, sólo las he compilado para que exista la librería y poder enlazar los módulos contra ella. Así pues, no tendría mucho sentido que te diera unas librerías para audio que no pueden reproducir nada.... Vas a tener que encontrar tus propias librerías :)

Y bueno, finalmente, el enlace a los binarios. Como dije, me voy de vacaciones, así que si falla algo, el miércoles estaré de vuelta y si puedo le robo el MAC otra tarde a mi amigo, ¿ok?.

Puff!! Exhausto. Ya puedes hacer un juego bien guapo :P

josebita

#2
¡Sorpresa!
No funciona, o al menos no del todo. Parece que funciona cargar módulos que no dependan de las lib*, pero cuando hay que cargar uno que sí dependa de ellas (mod_mouse depende de libmouse, por ejemplo) no es capaz de encontrar la librería de la que depende (libmouse, en este caso).

Depende de si quito o no el flag "-module" obtengo una librería .dylib o una .so... Supongo que irán por ahí los tiros.

A ver si a la vuelta me habeis sorprendido y habeis averiguado la causa :)

SplinterGU

claro, por ahi... asi que esta version de mac, es mas linux...

hay que poner algun otro define para que use .so...

bien... supongo que eso funcionara...

gracias
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Mr Matsusaka

He buscado por ahi los binarios y no veo nada (el link que hay en el segundo post esta obsoleto). Realmente hay una version para MacOX? Recientemente me hice con un Leopard 1.5.2, y me gustaria saber si es posible compilar para Mac, y que binarios debo usar. Soy totalmente nuevo en Mac, asique agradeceria que alguien me lo explicase como si fuese un niño de 5 años. :P

FreeYourMind

La ha puesto josebita en un post sobre el tema cuando se la pedimos, porque como no estaba totalmente funcional no la habia puesto (habia que configurar algo manualmente), ahora mismo no recuerdo que hilo era. Busca por mac en el buscador.

Mr Matsusaka

Si, creo que es este hilo exactamente xd
De todos modos he encontrado los binarios en la pagina principal (perdon por no observar mejor antes) en la lista de ports no oficiales. Se compila a traves de la Terminal al igual que en linux?

FreeYourMind

Bueno, ese link tampoco funciona, era este:

http://dl.dropbox.com/u/3022394/bennugd_osx_bin.tar.bz2

lo descargue en su dia, pero ya no sabria encontrarlo...
Pidesela a Neodreamer, que la descargo en su dia y la probo en MAC por si josebita no aparece.


Mr Matsusaka

Este es el link donde me he descargado los binarios. El tuyo que has puesto da un 404
http://www.bennugd.org/downloads/bennugd-osx-20100808.tar.bz2

Y gracias por tu link, lo explican todo bastante mascadito. k++

josebita

Acabo de actualizar los binarios para OSX en la página de descargas de la web a la última versión disponible hoy, por si a alguien le es útil.

FreeYourMind

Claro josebita, nos es util aunque no lo miremos :)
Karma por el curro.

FreeYourMind

Quote from: josebita on November 04, 2010, 10:44:23 PM
Acabo de actualizar los binarios para OSX en la página de descargas de la web a la última versión disponible hoy, por si a alguien le es útil.

Por cierto pon todas tus rutas en la firma, ahora mismo no se donde tienes la distribución para Mac, lo mismo le digo a linkernel.

josebita

El tamaño de la firma está limitado, ya no me caben más cosas :)

josebita

#14
Si tienes el XCode, es que tienes ya instalado el SDK, así que eso ya está hecho.
Ahora, bájate ésto:
http://dl.dropbox.com/u/3022394/bennugd_osx_src-20101107.tar.bz2

No es más que el código oficial de Bennu con los Makefiles "tocados" para poder compilar y un pequeño detalle en el bgdi/src/main.c

==================== Instalación de dependencias ====================
También vas a necesitar las dependencias de Bennu preparadas para compilar desde autotools, para eso yo te aconsejo que te instales fink o macports.
Como yo tengo puesto macports, te lo comento con él, pero si te molara más fink dímelo y cambio las instrucciones:
* Bájate el pkg para Leopard de aquí: http://distfiles.macports.org/MacPorts/MacPorts-1.9.1-10.5-Leopard.dmg
* Una vez instalado, abre la consola y escribe:
   sudo port install libsdl libsdl_mixer +no_x11 +mikmod

Eso te instalará la SDL y la SDL_mixer y todas sus dependencias, así que puede tardar un poco.
Este es el punto más delicado, porque puede que haya alguna dependencia que no se esté instalando. Además, en Snow Leopard, el compilador compilado para 64 bits por defecto, pero creo que no es el caso de Leopard, así que sigamos. De todas formas, si tienes algún problema hasta aquí, avisa.

==================== Compilación de Bennu ====================
* Cuando haya acabado, si todo ha ido bien, deberías tener todas las dependencias para compilar Bennu. Descomprime los fuentes que te he enlazado en algún directorio. En mi caso, están en ~/cvs/bennugd/osx
* Ve al directorio "core" dentro de la instalación y escribe:
 ./configure --prefix=/Users/joseba/cvs/bennugd_bin/ && make && make install
 Evidentemente, cambia el "prefix", pero ponlo en alguna carpeta que esté vacía, porque es donde se va a instalar Bennu.
* Luego te vas al "modules" y tres cuartas partes de lo mismo:
 ./configure --prefix=/Users/joseba/cvs/bennugd_bin/ && make && make install

Y ya está. Ve al directorio donde hayas puesto el "prefix" y borra todos los ficheros .a y .la que haya allí porque no nos sirven. Yo diría que con eso ya tendrás una versión de Bennu funcional.

Otra cosa es el empaquetado para lanzar tu juego, pero eso va luego :)