[Tutorial 5J] Compilación de la librería libyaul


Ir a la página 1, 2, 3, 4, 5  Siguiente

Objetivo: [Tutorial 5J] Compilación de la librería libyaul
ACTUALIZADO A MARZO DE 2016!!

Amigos, lo prometido es deuda!! Lo que van a leer en las siguientes líneas es un buen tostón (jajaja) para adentrarse en el apasionante mundo de la scene Saturnera!!

inkfill1

Aviso: Tutorial de dificultad alta / hardcore de carácter bastante técnico!
He realizado la compilación usando Mac Os X (10.11) y Homebrew, así que en entornos Unix o Cygwin... YMMV

¿Host, target, tool-chain, cross-compiler, libyaul? Ayuda!!

Así que quieres hacer juegos para la Sega Saturn eh? Estupendo, aquí la lección 101:

- Host: Máquina en la que programaremos (un PC, Mac).
- Target: La máquina dónde queremos que se ejecuten nuestro programa (la Saturn)
- Cross-compile: Necesitamos algo que traduzca nuestro código del host , a código binario en el target. Ese proceso es lo que se llama compilación cruzada: una máquina genera código para otra.
- Tool-chain: La toolchain es el conjunto de herramientas para hacer la cross-compile. Incluye los compiladores, linkadores, ensambladores...
- Libyaul: (Yet Another Useless Library) es un estupendo development kit open-source para SEGA Saturn que ofrece un conjunto de rutinas de bajo-nivel para que hagamos programas a alto-nivel (toma ya!).

¿Y para qué todo ese rollo? Fácil! Antes de usar la libyaul, debemos de tener nuestra Tool-chain compilada (es decir, el entorno básico de programación!). Así que la primera parte del tutorial se basará en compilar nuestra propia Tool-chain :)


Requisitos previos

Para poder compilar la Toolchain necesitaremos tener las siguientes herramientas (si no lo sabéis, escribid el comando en un terminal para ver si la tenéis instalada):

- wget: para descargar los paquetes GCC.
- gpg: se usa para comparar la integridad de los paquetes descargados.
- make: herramienta base para compilar cosas.
- md5sum: otra herramienta de comparación de hashes.
- patch: herramienta para aplicar parches especificos.
- gcc / g++: el compilador básico para que compilemos cosas. IMPORTANTE: Usad la versión 4 (4.7, 4.8...) pero NO os funcionará con la 5!
- git: para obtener los fuentes de libyaul
- genisoimage / mkisofs: para crear imágenes ISO
- awk: util de scripting.
- makeinfo: de serie en OSX, en ubuntu es el package "texinfo"

* Para Cygwin, todos ellos los encontraréis en los packages (menos CMAKE). El CMAKE lo podéis instalar en Windows y luego añadirlo en vuestro PATH para que Cygwin lo pueda llamar.
* En UNIX con apt-get se deberían encontrar todos sin problemas.

* Para los fans del OSX, podéis usar Macports o Homebrew para los siguientes paquetes (en Mac no tenemos md5sum pero sí md5, como veremos más adelante):
wget, gnupg, coreutils, cdrtools



Preparando la compilación

La URL de la libyaul es la siguiente: https://github.com/ijacquez/libyaul

Primero la descargaremos una copia en nuestro ordenador. Por ejemplo, yo la tengo dentro de mi HOME:
cd ~
mkdir saturn
cd saturn
git clone https://github.com/ijacquez/libyaul.git libyaul
cd libyaul
git submodule init
git submodule update -f


Si miráis dentro, veréis varias carpetas, pero la que nos interesa ahora es la de tools/build-scripts. Esa carpeta contine varios scripts para que compilemos la tool-chain, así que entrad dentro de ella. El siguiente comando os creará un fichero de configuración ;)

cd tools/build-scripts
cp -v config{.in,}


Ahora habrá que editar varios ficheros de la siguiente manera:

config

* BUILD_INSTALL_DIR: Aquí debéis poner la ruta dónde queréis tener vuestra toolchain.
Ej: /Users/ryo/saturn/tool-chains

# Tools for host
Sólo para Mac Os X!: Descomentad "md5" y comentad "md5sum"

* OPTION_DOWNLOAD_TARBALLS="yes" (descarga los paquetes él solito)
* OPTION_ENABLE_GDB="no" (no queremos el debugger GDB... lo dejamos para otro día xD)


build-compiler

Sólo para Mac Os X! Bien, como hemos cambiado la herramienta md5sum por md5, también debemos de cambiar el script que se usa para recoger el HASH de los ficheros. Por suerte, es un cambio menor!

Hacía la línea 380, debéis de cambiar la línea que define a calculated_md5 (sólo cambiad para el caso de md5, que es el que usará el script!).
case "${MD5}" in
"md5")
calculated_md5=`"${MD5}" -r "${NEWLIB}" | awk '{print $1;}'`
;;
"md5sum")
calculated_md5=`"${MD5}" "${NEWLIB}" | sed -r -n 's/^([a-f0-9][a-f0-9]*)\s+.*?$/\1/pg'`
;;
esac


sh-elf/scripts/build
m68k/scripts/build


Si queremos evitar un error del tipo "error: 'sbrk' is deprecated"
http://stackoverflow.com/questions/20426213/error-building-ellcc
asegurémonos que el CFLAGS esté así (en los 2 ficheros):

message "Configuring Binutils"
CFLAGS="-Wno-error=deprecated-declarations" LDFLAGS="" ../"${BINUTILS_SRC_DIR}"/configure \



¿Compilo ya?

Eeerh... no! jajajajaja.

Veréis, hay un pequeño detalle que no os he contado. Este script nos compilará un GCC para el SH y el M68K (los dos procesadores de la Saturn), pero lamentablemente no es tan listo, y os pedirá las dependencias de GCC!!!

Así pues, necesitaréis tener instaladas también las siguientes librerías!!

- GMP 5.1.2
- MPFR 3.1.2
- MPC 1.0.1


Seguramente las podáis obtener de vuestros paquetes (acordaros de elegir las versiones "dev", si hay más de una!). Ni las intentéis compilar, de verdad!

Sólo para Mac Os X!:
En Macports se hace así (importante el orden en que se instalan: libmpc depende de las dos anteriores):
sudo port install gmp +universal
sudo port install mpfr +universal
sudo port install libmpc +universal


Con Homebrew:
brew install gmp
brew install mpfr
brew install libmpc


Luego, tendréis que decirle a los dos scripts anteriores cuál es la ruta de las librerías recién instaladas. Añadid al LDFLAGS_FOR_TARGET lo siguiente (/opt/local para Macports, /usr/local para Homebrew):
--with-gmp="/opt/local" \
--with-mpfr="/opt/local" \
--with-mpc="/opt/local" \


¡Por dios, dime que puedo compilar ya!

Pues claro que sí, campeón!! Si has llegado hasta aquí es que te lo mereces jajaja.
Ingresa a la carpeta /tools/build-scripts y ejecuta: >> ./buid-compiler

El script funciona de la siguiente manera:
- va trabajando sobre la carpeta temporal que le habéis definido en el config.
- a cada paso completado, irá creando un fichero "vacío", como si fueran checkpoints. Por ejemplo: downloaded-tarballs , checked-integrity...
- si os fallara la compilación, gracias a esos ficheros, al volver a ejecutarlo no empezará desde 0. Y si queréis que repita un paso, simplemente borrad ese fichero vacío!


¡¡Aleluya!! ¡Terminó y no tengo errores!

Eres un fenómeno :mrgreen: . Lo primero es añadir tu nuevo compilador en tu PATH de la consola.
echo $PATH;
export PATH="/Users/ryo/saturn/tool-chains/sh-elf/bin:/Users/ryo/saturn/tool-chains/m68k-elf/bin:${PATH}"

Eso lo añadirá al PATH, pero sólo en la sesión actual. Si no quieres escribir esto cada vez, lo puedes poner en tu .profile.


Seguimos con la libyaul

La libyaul se compone de diferentes módulos: release (la lib propiamente dicha), tools (herramientas necesarias para compilar) y examples (makefile para generar los ejemplos). Es MUY importante seguir bien los siguientes pasos, cracks!!
Ahora os iré comentando diferentes aspectos a arreglar antes de hacer la compilación final...


Generar y cargar el entorno

Libyaul usa un fichero de entorno, en que se define las rutas que usará la librería. Hay que crear y editar este fichero:

cp -v yaul.env{.in,}


INSTALL_ROOT: Aquí pondremos la ruta dónde hemos instalado nuestra toolchain (concretamente, el directorio sh-elf).
Ejemplo: /Users/ryo/saturn/tool-chains/sh-elf

BUILD_ROOT: Aquí pondremos la ruta dónde tenemos la librería libyaul.
Ejemplo: /Users/ryo/saturn/libyaul

Una vez definidos, cada vez que usemos la consola, debemos de cargar este entorno con el comando (y lo haremos ahora mismo):
source yaul.env


/tools/Makefile

Para evitaros problemas de cabeza, es mejor quitar la tool "ssload" (necesitaréis pkg-ino y libftdi, entre otros xD).

/tools/make-iso/make-iso

Si sois viejunos como yo, y usáis mkisofs en vez del nuevo genisoimage, cambiadle el comando "genisoimage" por "mkisofs" dentro del script.

/tools/bin2c/Makefile
/tools/genromfs/Makefile


Quitad la línea del strip (borradla, no es correcta en el entorno Mac):

$(SILENT)$(STRIP) -s $@


COMPILAR LA MALDITA LIBRERÍA Y SUS HERRAMIENTAS xDDD

cd ~
cd saturn/libyaul
make release
make install-release

make tools
make install-tools


Tools os compilará: bin2c, bin2o, genromfs y make-iso.

¡Quiero ver ejemplos!

Bueno, casi casi estamos!!! Todavía hay algunos pequeños bugs que libyaul no los ha arreglado, así que os indico qué más ficheros debéis de tocar!! :D :D :D

tool-chains/sh-elf/share/yaul/pre.common.mk
Debéis de arreglar el path a la libfixmath y libyaul con estas líneas:

-I$(BUILD_ROOT)/libfixmath \
-I$(BUILD_ROOT)/libyaul \


tool-chains/sh-elf/share/yaul/post.common.mk
Eliminad el comentario dentro del comando awk (es decir, borrad esta línea):

# TODO: Allow for titles to be greater than 16 characters \

Para compilar los ejemplos, es tan fácil como ir a la carpeta raíz de libyaul y ejecutar:
make examples


NOTA: Si os falla algún ejemplo (como el dark-blue, u otros), lo mejor es que los comentéis en el fichero "examples/Makefile" (a fecha de hoy, no todos compilan correctamente).

Oh magia!! Si todo ha ido bien, tendrás un nuevo fichero binario en cada carpeta de ejemplo. Acabas de crear un fichero que ya lo puede ejecutar una Sega Saturn!! Además, también verás un IP.BIN autogenerado (maravilla!) y el fichero ISO que lo podéis ejecutar :putoamo:

inkfill2


inkfill3


Conclusiones

Aquí termina este TOSTÓN de tutorial... lo reconozco!! Personalmente, le veo bastante potencial a la librería, así que os animo a que la probéis! Espero vuestro comentarios, dudas, problemas con impaciencia!! :oops:

Un gran saludo sceners!!! ;)

Perfil MP  
Objetivo: Re: [Tutorial 5J] Compilación de la librería libyaul
Extraordinario tuto, muchas gracias!! :putoamo:

Un gran descubrimiento que hemos hecho con esta libyaul: Yet Another Useless Library de mrkotfw. Al tratarse como dices de software distribuido y desarrollado libremente y que no usa nada creo de lo que SEGA uso para desarrollar en su Saturn seria la mejor para nosotros a la hora de acercarnos a la programacion de esta maquina.

Me parece a mi que esto quiere decir que ni Saturn Orbit, ni Lua Player... me parece que tenemos que centrarnos en este YAUL!

Tengo bastante curro estos dias, pero a ver si puedo hacerlo funcionar bajo Windows tambien y montar la toolchain ahi y pongo/completo este tutorial para los que usen el OS de Microsoft.

Tengo algunas preguntas tambien que se me ocurren de como diablos funciona esto y como lo han conseguido, luego te comento...



P.D: Esto es algo que esperabamos hace mucho tiempo. Desarrollar en Saturn con open source y todo 100% legal!!

Objetivo: Re: [Tutorial 5J] Compilación De La Librería Libyaul
Muy interesante todo ;)

Cuando tenga un ratillo le hecho un vistacillo a ver si logro que chute algo. Que sea 100% libre siempre es un aliciente como bien comentais.

Perfil MP  
Objetivo: Re: [Tutorial 5J] Compilación De La Librería Libyaul
Animo :D que se puede. Felicitaciones por el tuto.

Perfil MP  
Objetivo: Re: [Tutorial 5J] Compilación de la librería libyaul
Bueno amigotes de la scene Saturnera!! Tocaba un update de este magnífico tutorial, adaptándolo a los cambios que se ha realizado en libyaul en estos últimos meses (por no decir años xD).

Aún lo veo un poco verde, veréis que hay muchos pequeños patches que espero que se resuelvan en futuras revisiones. ¡Ánimo!! ^^

Perfil MP  
Objetivo: Re: [Tutorial 5J] Compilación de la librería libyaul
Qué bien, tío. Gracias por el update.

Lo intentaré instalar de cara al finde en un Ubuntu y te cuento.

Me alegra que se vaya moviendo el tema de libyaul. Con paciencia sin continúan dándole caña puede ser el futuro...

Apuesto a que nadie en el foro ha conseguido compilarla, por otro lado :mrgreen:

Objetivo: Re: [Tutorial 5J] Compilación de la librería libyaul
BONUS! COMPILAR EL EJEMPLO DARK-BLUE :)

Si tenéis curiosidad por saber qué es este juego, y no lo podéis compilar, prestad atención al siguiente "briconsejo" jejeje.

Para este juego, se necesita de un programa específico para convertir mapas TMX a formato MAP. De ahí que os dé el error que no encuentra "tiled", que es precisamente el encargado de hacerlo.

Id a la página del programa: http://www.mapeditor.org/ y os descargáis según vuestro sistema operativo.
Luego, tenéis que editar el fichero "examples/games/dark-blue/Makefile" y adaptar la ruta. Atención al idioma que uséis, yo por ejemplo uso OSX y Español.

%.json: %.tmx
#tiled --export-map "Json files (*.json)" $< $@
/Applications/Tiled.app/Contents/MacOS/Tiled --export-map "Archivos de mapa Json (*json)" $< $@
tools/tmx2map
$(RM) $@


Si os fijáis bien, en OSX el ejecutable está dentro del Bundle App, y además hay que poner exactamente la frase entrecomillada jejeje.

Y listos!! Ahora sí os compilará con el make examples, y os generará el ISO. No os desvelo la sorpresa! (por ahora) ;)

Perfil MP  
Objetivo: Re: [Tutorial 5J] Compilación De La Librería Libyaul
Muchas gracias Indiket, siempre me interesan estos temas aunque no entienda nada.
Quería preguntaros, ¿qué herramienta es más accesible para un novato? esta o el Jo engine?.
Me he leido toda la explicación y aún sigo sin saber qué es compilar, también vi hace unos meses un tuto en videos que colgó un compañero aquí (SaturnAR creo que fue) sobre cómo traducir y me costaba también muchísimo seguir el ritmo.

¿Qué recomendais para un usuario de excel a la hora de intentar empezar en esto del homebrew en Saturn?, otra opción algo más compleja es la herramienta de Rocking´B, luego ya nos quedarán los cursos del CCC :lol:

Gracias !

Perfil MP  
Objetivo: Re: [Tutorial 5J] Compilación de la librería libyaul
No he probado Jo engine, pero por lo que me han comentado, la de Jo es mucho más acesible que libyaul. Tiene más tools que facilitan la programación. Libyaul es más verde, primitivo, pero por la parte positiva es 100% opensource ;)

Jo engine funciona sobre SGL, así que empezaría por ahí (creo que el gran Ryo hizo unos tutoriales de SGL, verdad?).

De nada!! :D

Perfil MP  
Objetivo: Re: [Tutorial 5J] Compilación de la librería libyaul
Fandu, sin duda el Jo creo que es más accesible para gente como nosotros que no tenemos casi ni idea del tema y queremos empezar a trastear.

Yo le estuve echando un ojo el otro día y me hice todos los ejemplos tratanto de comprenderlos modificandolos y demás (incluso es bueno tratar de mezclar cosas de unos con otros) y es relativamente fácil empezar a enterarse de cómo va el asunto...

Echale un vistazo, cualquier duda te trato de echar un cable. No tiene misterio, es editar con Notepad y con un click compilar y con otro más lo lanza en el emulador para que veas como te va quedando. Luego es cuestión de ir mirándose la documentación que hay en la web del Jo para empezar a asimilar más comandos y conceptos...

El libyaul, como dice Indiket, tiene que ser más complicado y está todavía más en pañales. Aunque, como también comenta, el tema de ser open source tira y mucho. Yo no he conseguido compilar la librería libyaul, así que no puedo decirte como va a la hora de probar ejemplos y hacer mis pinitos, ojalá lo consiga pero de fácil no tiene nada porque te salen mil incidencias que no son fáciles de resolver.

Ya que estamos, ¿alguien sabe bien la diferencia que hay entre la Saturn Graphic Library (SGL) y la SEGA Basic Library (SBL)?


P.D: Indiket fue el bueno de FacundoARG el que hizo los tutoriales de SGL con Saturn Orbit. Yo lo que hice son los de Lua (aunque en realidad creo que en el fondo estabas trabajando con SGL también en gran medida)

Ir a la página 1, 2, 3, 4, 5  Siguiente

Página 1 de 5


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
Puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.2914s (PHP: 17% SQL: 83%)
Consultas SQL: 14 - Debug off - GZIP Desactivado