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

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

#1  Indiket 20 May 2014, 10:55 PM

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   . 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!!

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  

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!!  

Un gran saludo sceners!!! ;)
 



 
avatar
blank.gif Indiket Sexo: Masculino
Administrador
Administrador
Donante Unreleased €
DC Coder
 
Registrado: May 2009
Mensajes: 257
  • Volver arriba Página inferior
 

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

#2  Ryo Suzuki 21 May 2014, 11:17 AM

Extraordinario tuto, muchas gracias!!

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!!
 




____________
Ayúdame a mantener este y otros proyectos, pulsa aquí

sega_firma

Choose a job you love, and you will never have to work a day in your life. (Confucius)
 
avatar
japan.png Ryo Suzuki Sexo: Masculino
Alfonso Martínez González
Webmaster
Webmaster
Shenmue Freak
 
Registrado: Agosto 2005
Ubicación: 難波
Mensajes: 10756
  • Volver arriba Página inferior
 

Mensaje Re: [Tutorial 5J] Compilación De La Librería Libyaul

#3  Raizing 21 May 2014, 11:25 AM

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.
 



 
avatar
spain.png Raizing Sexo: Masculino
Miembro de honor
Miembro de honor
Donante Unreleased €
 
Registrado: Noviembre 2006
Mensajes: 363
  • Volver arriba Página inferior
 

Mensaje Re: [Tutorial 5J] Compilación De La Librería Libyaul

#4  FacundoARG 21 May 2014, 04:05 PM

Animo que se puede. Felicitaciones por el tuto.
 




____________
SegaSaturn Developer Addict
 
avatar
argentina.png FacundoARG Sexo: Masculino
Colaborador SEGASATURNO
Colaborador SEGASATURNO
Professional Videogamer Coder
Donante Unreleased €
 
Registrado: Diciembre 2006
Ubicación: San Luis
Mensajes: 691
  • Volver arriba Página inferior
 

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

#5  Indiket 27 Enero 2016, 11:43 PM

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!! ^^
 



 
avatar
blank.gif Indiket Sexo: Masculino
Administrador
Administrador
Donante Unreleased €
DC Coder
 
Registrado: May 2009
Mensajes: 257
  • Volver arriba Página inferior
 

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

#6  Ryo Suzuki 28 Enero 2016, 12:14 PM

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
 



 
avatar
japan.png Ryo Suzuki Sexo: Masculino
Alfonso Martínez González
Webmaster
Webmaster
Shenmue Freak
 
Registrado: Agosto 2005
Ubicación: 難波
Mensajes: 10756
  • Volver arriba Página inferior
 

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

#7  Indiket 29 Enero 2016, 10:49 PM

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) ;)
 



 
avatar
blank.gif Indiket Sexo: Masculino
Administrador
Administrador
Donante Unreleased €
DC Coder
 
Registrado: May 2009
Mensajes: 257
  • Volver arriba Página inferior
 

Mensaje Re: [Tutorial 5J] Compilación De La Librería Libyaul

#8  Fandu 30 Enero 2016, 01:22 AM

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

Gracias !
 




____________
Podcast: Reactor Mako
 
avatar
scotland.png Fandu Sexo: Masculino
Donante Unreleased €
 
Registrado: Julio 2009
Ubicación: Atántida
Mensajes: 1530
  • Volver arriba Página inferior
 

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

#9  Indiket 30 Enero 2016, 10:57 AM

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!!
 



 
avatar
blank.gif Indiket Sexo: Masculino
Administrador
Administrador
Donante Unreleased €
DC Coder
 
Registrado: May 2009
Mensajes: 257
  • Volver arriba Página inferior
 

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

#10  Ryo Suzuki 30 Enero 2016, 12:11 PM

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)
 




____________
Ayúdame a mantener este y otros proyectos, pulsa aquí

sega_firma

Choose a job you love, and you will never have to work a day in your life. (Confucius)
 
avatar
japan.png Ryo Suzuki Sexo: Masculino
Alfonso Martínez González
Webmaster
Webmaster
Shenmue Freak
 
Registrado: Agosto 2005
Ubicación: 難波
Mensajes: 10756
  • Volver arriba Página inferior
 


Ocultar¿Este tema fue útil?
Compartir este tema
Correo a un amigo Facebook Twitter Windows Live Favorites MySpace del.icio.us Digg SlashDot google.com LinkedIn StumbleUpon Blogmarks Diigo reddit.com Blinklist co.mments.com
technorati.com DIGG ITA linkagogo.com meneame.net netscape.com newsvine.com yahoo.com Fai Informazione Ok Notizie Segnalo Bookmark IT fark.com feedmelinks.com spurl.net

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