Build Environment
The build environment is hosted on an i.MX6 quad-core platform running Debian “jessie” release. The system relies on closed-source VIVANTE GPU libraries for Freescale i.MX6 being installed. Please see previous posts for details on setting up the root file system to support accelerated GL/GLES functionality in Debian.
Prerequisite Binary Packages
apt-get install cmake jam libsdl-image1.2-dev libopenal-dev libalut-dev libphysfs-dev
Build GLU ES
TR depends on GLU ES implementation (gluScaleImage) - latest source ported by lunixbochs (GLU ES version 1.5 based on original GLU 1.3) is on GitHub.
git clone https://github.com/lunixbochs/glues.git
cd glues ; rm -f CMakeCache.txt ; cmake . ; make
If the build is successful, the library file libGLU.so.1 will have been created. There is no install target - maybe there is better way, but I simply copy the two needed header files so they will be found by the build in a system include path:
cp lunixbochs/glues/source/glues.h /usr/local/include/GLES/
cp lunixbochs/glues/include/SDL/SDL_opengles.h /usr/local/include/SDL/
Define LINUX in trigger-rally-pandora/Jamrules; otherwise header file /usr/include/EGL/eglvivante.h (part of Freescale imx-gpu-viv bundle) throws an #error "Platform not recognized":
sed -i 's/COMPILER_CFLAGS += -Wall/COMPILER_CFLAGS += -Wall -DLINUX=1/' Jamrules
Please note that this project uses jam (and not make) as build tool:
./configure ; jam
src/pengine/pengine.h:39:24: fatal error: GLES/glues.h: No such file or directory
/usr/local/include/GLES/glues.h:37:33: fatal error: SDL/SDL_opengles.h: No such file or directory
Eventually, the linker fails due to library specification -lGLUES_CM:
/usr/bin/ld: cannot find -lGLUES_CM
collect2: error: ld returned 1 exit stat
Rather than take the time to tweak the jam scripts to fix the problem correctly, immediate gratification is had by manually linking the trigger executable in the shell: remove -lGLUES_CM from the linker invocation, as well as the library path specification -L/usr/lib/arm-linux-gnueabihf, and link directly to the GLU ES library libGLU.so.1 as follows:
g++ -Wall -DLINUX=1 -O3 -DDATADIR='"${prefix}/share"' -DHAVE_GLES -DPANDORA -o trigger ./out/armv7l-unknown-linux-gnu/opt/src/trigger/eglport.o ./out/armv7l-unknown-linux-gnu/opt/src/trigger/game.o ./out/armv7l-unknown-linux-gnu/opt/src/trigger/main.o ./out/armv7l-unknown-linux-gnu/opt/src/trigger/render.o ./out/armv7l-unknown-linux-gnu/opt/src/trigger/menu.o ./out/armv7l-unknown-linux-gnu/opt/src/pengine/libpengine.a ./out/armv7l-unknown-linux-gnu/opt/src/psim/libpsim.a -lSDL -lSDL_image -lEGL -lGLES_CM -lopenal -lalut -lphysfs ../glues/lunixbochs/glues/libGLU.so.1
(use jam -n to get the g++ command)
Success!
cd data ; ln -s ../trigger
xrandr -s 800x600 # TODO: it can't seem to change resolution on it's own!
LIBGL_DEBUG=verbose ./trigger
Enjoy!
No need to run the make install, the trigger executable will run fine if invoked from within the project "./data" directory:
cd data ; ln -s ../trigger
xrandr -s 800x600 # TODO: it can't seem to change resolution on it's own!
LIBGL_DEBUG=verbose ./trigger
Enjoy!
No comments:
Post a Comment