I have almost succesfully compiled Cocos2d-x on my Raspberry, but here is what I had to do:
Optional: Use QEmu with a lot of extra space and more memory via a swapfile to compile faster.
Use a clean Raspbian image, execute all code here on the Raspberry Pi itself:
For prequisites install these packages (notice there’s GIT at the end, which could be prevented if you just copy the source archive to your RPi):
sudo apt-get install libx11-dev libxmu-dev libgl2ps-dev g++ libcurl4-gnutls-dev libfontconfig1-dev libsqlite3-dev libglew*-dev libgl1-mesa-dev libglfw-dev freeglut3-dev libzip-dev git
Get the latest source package of Cocos2d-x:
mkdir ~/cocos2d
cd ~/cocos2d
git clone https://github.com/cocos2d/cocos2d-x.git
install RPi versions of libraries needed by Cocos2d-x:
sudo apt-get install libfreetype-dev libpng-dev libjpeg-dev libtiff-dev libwebp-dev
I don’t know whether this is needed (I think it is not, actually) but I copied all the resulting library .a files to ./cocos2dx/platform/third_party/linux
to be sure the Raspberry Pi versions were linked into the build.
install libopenal on RPi
<pre>
sudo apt-get install libopenal-dev libalut-dev libvorbis-dev
</pre>
Tricky part here, this should actually be done in a new proj.raspberrypi copied from proj.linux. The problem is that Cocos2d-x uses FMod for the Linux build, which is not available for Raspberry Pi. So we change the ./CocosDenshion/proj.linux/Makefile
to make sure Cocos2D uses Blackberry’s OpenAL code for sound:
<pre>
SOURCES = …/blackberry/SimpleAudioEngine.cpp
</pre>
Next problem was an error with libfreetype.a, which can be safely removed as far as I know now. As long as we only used real bitmapfonts, this is not yet a problem for now, so remove the dependency on libfreetype in ./cocos2dx/proj.linux/cocos2dx.mk
:
<pre>
#STATICLIBS = $/libfreetype.a STATICLIBS = $/libpng.a $/libjpeg.a $/libtiff.a $/libwebp.a
</pre>
And, in the same file, comment out this part to remove FMod dependencies:
<pre>
#ifeq ,64)
#FMOD_LIBDIR = $/CocosDenshion/third_party/fmod/lib64/api/lib
#SHAREDLIBS += ~~lfmodex64
#else
#FMOD_LIBDIR = $/CocosDenshion/third_party/fmod/api/lib
#SHAREDLIBS = ~~lfmodex
#endif
</pre>
Then change the following part in the same file to bind to OpenAL and ALUT libraries for sound:
<pre>
#SHAREDLIBS +=~~L$ ~~Wl,~~rpath,$/$
SHAREDLIBS=~~lopenal -lalut
</pre>
Next, I encountered a bug in ./cocos2dx/kazmath/include/kazmath/neon_matrix_impl.h
when it tried to include “arm/arch.h”. From what I understood, this include is only used for the __arm__
definition, which is already available when compiling for Raspberry Pi anyway, so somment it out:
<pre>
#include “arm/arch.h”
</pre>
Now the cocos2d libraries at least compile, but compiling the first HelloCPP example results in a LOT of “unresolved reference to…” libjpeg, libpng etc. libraries, though theyare* added as static libraries in the make files. I have no clue yet how to prevent this error from happening.
Now the biggest challenge is left: Port the OpenGL code to use OpenGLES2 calls, since this is what is supported by Raspberry Pi. Perhaps again the Blackberry code can help us out here, but I haven’t arrived there yet. I read somewhere this piece of text of someone who merged Bada code into Linux for this: “put the bada gl view code into linux and it worked…also wid some tweaks…changed initializing of openGLES to Null Windowing System,direct frame buffer that is.”. Let’s hope this part is not that hard… Who can help us out further here?