Kit de desarrollo libre para PS3
Hola amigüitos! si sois alegres poseedores de una PS3 con FW3.50 o anterior y tenéis a vuestra disposición algún dispositivo jailbreaker sabréis que la ejecución de programas caseros o homebrew está en vuestras manos. Pero claro, eso para está web no es nada... a nosotros nos gusta más desarrollar esos programas caseros. Existen por internet varios SDK's oficiales filtrados, pero que no debéis usar (ni, por tanto, publicar aplicaciones compiladas con esos kits). Es ilegal que los uséis porque no tenéis la licencia, así que si encontráis alguno, como material didáctico están muy bien, pero hasta ahí su utilidad práctica. En esta receta explicaremos cómo compilarnos nuestro propio kit de desarrollo legal para hacer nuestras aplicaciones caseras legales que correrán en cosolas jailbreakadas.
Qué necesitamos
Bueno, nuestra distro tiene que contar con los siguientes paquetes:# aptitude install git libelf-dev python zlib-dev autotools autoconf automake bison flex gcc make autotools patch subversion wget texinfoLamentablemente puede que se me olvide alguno, si es así rogaría que me lo comentaseis. Ahora necesitamos un sitio donde meterlo todo, es decir, /usr/local/. Ahí crearemos un directorio y le daremos permisos de escritura al grupo staff (al que perteneceremos) para no tener que hacer las cosas como root:
# cd /usr/local # mkdir ps3dev # chown root:staff ps3dev # chmod 775 ps3devVale y ahora ajustaremos las variables de entorno para que todo quede bien organizadito (estas lineas, además de ejecutarlas, añadirlas en vuestro ~/.bashrc o similar) (esto hacedlo ya como vuestro usuario):
$ export PS3DEV=/usr/local/ps3dev $ export PATH=$PATH:$PS3DEV/bin $ export PATH=$PATH:$PS3DEV/ppu/bin $ export PATH=$PATH:$PS3DEV/spu/binBien, con esto podremos compilarnos e instalar la toolchain, pero nos hará falta el SDK para poder crear nuestros ejecutables para la PS3. Le haremos sitio al SDK de la siguiente manera:
$ cd $PS3DEV $ mkdir psl1ghtY de la misma manera que antes, creamos la variable de entorno (meted esto también en vuestro ~/.bashrc):
$ export PSL1GHT=$PS3DEV/psl1ghtVale, ya lo tenemos todo listo... ahora a descargar y compilar...
Compilar e instalar la toolchain
Bueno, yo tengo mi directorio ~/repos donde guardo todas estas cosas, vosotros podéis meterlo donde os plazca... si lo hacéis como yo:$ cd ~/reposY a descargar:
$ git clone https://github.com/ooPo/ps3toolchain.gitCuando esto termine: a compilar, parchear e instalar, es decir:
$ cd ps3toolchain $ ./toolchain.shY esto tardará la vidaaaa... (bueno, según vuestros sistemas...) el caso es que tiene que crear dos toolchains una para el PowerPC (conocido como PPU) y otra para los Synergistic Processors (conocidos como SPU's).
Atención: debido a que algunas URL's que utiliza el script pueden estar offline, habría que realizar los siguientes cambios en estos scripts: scripts/002-gcc-4.5.1-PPU-stage1.sh, scripts/004-gcc-4.5.1-PPU-stage2.sh, scripts/007-gcc-4.5.1-SPU-stage1.sh y scripts/009-gcc-4.5.1-SPU-stage2.sh La línea:Si todo ha salido bien podréis hacer algo como:wget --continue http://www.mpfr.org/mpfr-2.4.2/mpfr-2.4.2.tar.bz2 || { exit 1; }sustituirla por:wget --continue http://ftp.gnu.org/gnu/mpfr/mpfr-2.4.2.tar.bz2 || {exit 1; }
$ ppu-gcc --version ppu-gcc (GCC) 4.5.1 Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ spu-gcc --version spu-gcc (GCC) 4.5.1 Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Compilar e instalar el SDK: PSL1GHT
Bueno, como antes, si tenéis vuestros repos en ~/repos haced lo siguiente y si no, hacedlo donde queráis:$ cd ~/reposDescargamos el SDK:
$ git clone https://github.com/HACKERCHANNEL/PSL1GHT.gitCuando esto termine: a compilar, parchear e instalar, es decir:
$ cd PSL1GHT $ make $ make installComo su nombre indica... es ligerito así que no tardará mucho... después de esto ya estaréis en condiciones de crear vuestros programas para la PS3... peero...
Algunas librerías útiles
Si queremos instalarnos algunas librerías portadas a la PS3 como zlib, libpng, libjpeg, freetype, pixman, libogg, libvorbis, libzip o incluso cairo, haremos lo siguiente:$ cd ~/reposDescargamos los scripts de ooPo que es muy majo:
$ git clone https://github.com/ooPo/ps3libraries.gitY a compilar e instalar, es decir:
$ cd ps3libraries $ ./libraries.shYa tenemos bastantes cositas para empezar a programar un hola mundo y algo más... pero como ya os dije antes, hay muchas librerías útiles por ahí que podemos ir instalando según nuestra necesidad.
vpcomp: compilador de programas de vértices
Primero: ¿qué demonios es esto? pues más o menos lo siguiente: resulta que para mover vértices y todo ese rollo, los señores de NVIDIA han creado una especie de "máquina virtual", la cual interpreta una serie de opcodes para trabajar con datos escalares y vectoriales. En la PS3 esta máquina virtual puede interpretarse mediante una SPU, pero claro, alguien debe compilar esos programas de vértices en estos opcodes para la SPU, esto es: vpcompRequisitos no muy libres
Bueno, esto necesita el NVidia Cg Toolkit que es un compilador/intérprete de una especie de lenguaje ensamblador para OpenGL, podemos descargarnos gratis del NVIDIA Cg website. Descargaros el tgz de vuestra arquitectura (x86 o x86/64). Ahora viene una cutrez: no vamos a instalar este paquete en nuestro sistema (bueno, si vosotros queréis dadle caña, lo tenéis también como paquete Debian). Como sólo necesitamos una biblioteca, vamos descomprimir el tgz y a copiar sólo lo que necesitamos en /usr/local (suponemos que estamos en el directorio donde descargamos el fichero):$ unp Cg-3.0_November2010_x86.tgz $ cp usr/lib/libCg.so /usr/local/lib/ $ cp -r usr/lib/include/Cg /usr/local/include/ $ sudo ldconfigLa última línea refresca la caché de bibliotecas, para asegurarnos que la tenemos "disponible".
Compilar e instalar
Bien, ya podemos volver al repositorio de PSL1GHT para compilarnos el compilador...$ cd PSL1GHT/psl1ght/tools/vpcomp $ makeSe siente, el Makefile no tiene el target install, así que a manímetro:
$ cp vpcomp $PSL1GHT/bin/Y ya tenemos listo nuestro compilador de vértices... ;)
Tiny3D: algo parecido al OpenGL en la PS3
Si, el RSX devora OpenGL que da gusto... pero para explotar eso (por ahora) tendríamos que echar mano del SDK oficial así que por ahora nos contentaremos con el magnífico Tiny3D de Hermes.Requisitos
Todos los pasos anteriores, incluído el vpcomp.Compilación e instalación
Pues nada, en nuestro directorio de repositorios:$ git clone https://github.com/hermesEOL/tiny3d.git $ cd tiny3d $ make allSi no hay ningún error, estaremos listos para usar la biblioteca. En tiny3d/docs tenéis un documentillo sobre la biblioteca y el RSX de la PS3.
ps3soundlib: audio fácil para nuestros programas
También gracias a Hermes tenemos esta biblioteca que nos permite utilizar samples de 8 y 16 bits en mono y stereo. Reproducir los samples en loop, una vez , o incluso llamando a un callback al finalizar. En fin... más cositas útiles.Requisitos
Los pasos para obtener la toolchain y el PSL1GHT, con eso es suficiente...Compilar e instalar
Desde nuestro directorio de repositorios:$ git clone https://github.com/hermesEOL/ps3soundlib.git $ cd ps3soundlib $ make $ make installAl igual que antes, si no obtuvimos ningún error, ya tendremos la biblioteca lista para usar en nuestros homebrews.
Guinda: la librería SDL
Antes de que alguien se lleve a equívocos, hace tiempo que SDL fue oficialmente portado a PS3, entonces: ¿para qué todo esto?. Pues fácil, el port en realidad es para el OtherOS, es decir, algún GNU/Linux que tengáis corriendo en aquellas PS3 con un FW que disponga de esa opción. Y os permitiría crear aplicaciones para esa distribución. En cambio este port os permitirá crear aplicaciones que utilicen SDL de forma nativa en la PS3. Es decir, sin necesidad de OtherOs ni nada por el estilo: compiláis, obtenéis un PKG que podréis instalar y a funcionar... ;)
Requisitos
Los pasos para obtener la toolchain, el PSL1GHT y las ps3libraries (ya sabéis: Algunas librerías útiles).Compilación e instalación
Como siempre, desde nuestro directorio de repositorios:$ git clone https://github.com/cebash/SDL_PSL1GHT.git $ cd SDL_PSL1GHT $ ./script.sh $ make $ make installY si no tuvimos ningún error tendremos libSDL listo para usar en nuestras aplicaciones homebrew. Y ya está... creo que con esto podremos empezar a hacer nuestras aplicaciones caseras. De todas formas existen más librerías y utilidades por ahí que según vaya probando iré añadiendo en la receta, ok?
Para terminar: Makefile
Os pongo un Makefile típico para que os cree los targets automáticos para generar los archivos PKG que contienen nuestras aplicaciones y que podremos instalar en la consola para ejecutar/distribuír nuestras creaciones..SUFFIXES: ifeq ($(strip $(PSL1GHT)),) $(error "PSL1GHT must be set in the environment.") endif include $(PSL1GHT)/Makefile.base TARGET := $(notdir $(CURDIR)) BUILD := build SOURCE := source INCLUDE := include DATA := data LIBS := -lzip -lz -lgcm_sys -lreality -lsysutil -lio -ljpgdec -lnet -lsysmodule TITLE := Hello World - PSL1GHT APPID := TEST00003 CONTENTID := UP0001-$(APPID)_00-0000000000000000 CFLAGS += -g -O2 -Wall --std=gnu99 CXXFLAGS += -g -O2 -Wall ifneq ($(BUILD),$(notdir $(CURDIR))) export OUTPUT := $(CURDIR)/$(TARGET) export VPATH := $(foreach dir,$(SOURCE),$(CURDIR)/$(dir)) \ $(foreach dir,$(DATA),$(CURDIR)/$(dir)) export BUILDDIR := $(CURDIR)/$(BUILD) export DEPSDIR := $(BUILDDIR) CFILES := $(foreach dir,$(SOURCE),$(notdir $(wildcard $(dir)/*.c))) CXXFILES := $(foreach dir,$(SOURCE),$(notdir $(wildcard $(dir)/*.cpp))) SFILES := $(foreach dir,$(SOURCE),$(notdir $(wildcard $(dir)/*.S))) BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.bin))) export OFILES := $(CFILES:.c=.o) \ $(CXXFILES:.cpp=.o) \ $(SFILES:.S=.o) \ $(BINFILES:.bin=.bin.o) export BINFILES := $(BINFILES:.bin=.bin.h) export INCLUDES := $(foreach dir,$(INCLUDE),-I$(CURDIR)/$(dir)) \ -I$(CURDIR)/$(BUILD) .PHONY: $(BUILD) clean pkg run $(BUILD): @[ -d $@ ] || mkdir -p $@ @make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile clean: @echo Clean... @rm -rf $(BUILD) $(OUTPUT).elf $(OUTPUT).self $(OUTPUT).a $(OUTPUT).pkg pkg: $(BUILD) @echo Creating PKG... @mkdir -p $(BUILD)/pkg @mkdir -p $(BUILD)/pkg/USRDIR @cp $(ICON0) $(BUILD)/pkg/ @$(FSELF) -n $(BUILD)/$(TARGET).elf $(BUILD)/pkg/USRDIR/EBOOT.BIN @$(SFO) --title "$(TITLE)" --appid "$(APPID)" -f $(SFOXML) $(BUILD)/pkg/PARAM.SFO @$(PKG) --contentid $(CONTENTID) $(BUILD)/pkg/ $(OUTPUT).pkg run: $(BUILD) @$(PS3LOADAPP) $(OUTPUT).self else DEPENDS := $(OFILES:.o=.d) $(OUTPUT).self: $(OUTPUT).elf $(OUTPUT).elf: $(OFILES) $(OFILES): $(BINFILES) -include $(DEPENDS) endifEstá sacado del ejemplo Hola mundo del PSL1GHT.
Ps3sdk Builder
Bueno, aquí podréis encontrar un proyecto propio en fase ultrabeta quick & dity pero que instala (probado) el toolchain, el psl1ght, las ps3libraries y la sdl_psl1ght configurando las variables de entorno y todo ese rollo. ¡Cuidado porque no comprueba que tengáis los paquetes necesarios comentados en la receta!. Ps3sdk-Builder at github.com Disfruten! :D [ show comments ]
blog comments powered by Disqus