• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1Raspberry Pi
2================================================================================
3
4Requirements:
5
6Raspbian (other Linux distros may work as well).
7
8================================================================================
9 Features
10================================================================================
11
12* Works without X11
13* Hardware accelerated OpenGL ES 2.x
14* Sound via ALSA
15* Input (mouse/keyboard/joystick) via EVDEV
16* Hotplugging of input devices via UDEV
17
18
19================================================================================
20 Raspbian Build Dependencies
21================================================================================
22
23sudo apt-get install libudev-dev libasound2-dev libdbus-1-dev
24
25You also need the VideoCore binary stuff that ships in /opt/vc for EGL and
26OpenGL ES 2.x, it usually comes pre installed, but in any case:
27
28sudo apt-get install libraspberrypi0 libraspberrypi-bin libraspberrypi-dev
29
30================================================================================
31 Cross compiling from x86 Linux
32================================================================================
33
34To cross compile SDL for Raspbian from your desktop machine, you'll need a
35Raspbian system root and the cross compilation tools. We'll assume these tools
36will be placed in /opt/rpi-tools
37
38    sudo git clone --depth 1 https://github.com/raspberrypi/tools /opt/rpi-tools
39
40You'll also need a Rasbian binary image.
41Get it from: http://downloads.raspberrypi.org/raspbian_latest
42After unzipping, you'll get file with a name like: "<date>-wheezy-raspbian.img"
43Let's assume the sysroot will be built in /opt/rpi-sysroot.
44
45    export SYSROOT=/opt/rpi-sysroot
46    sudo kpartx -a -v <path_to_raspbian_image>.img
47    sudo mount -o loop /dev/mapper/loop0p2 /mnt
48    sudo cp -r /mnt $SYSROOT
49    sudo apt-get install qemu binfmt-support qemu-user-static
50    sudo cp /usr/bin/qemu-arm-static $SYSROOT/usr/bin
51    sudo mount --bind /dev $SYSROOT/dev
52    sudo mount --bind /proc $SYSROOT/proc
53    sudo mount --bind /sys $SYSROOT/sys
54
55Now, before chrooting into the ARM sysroot, you'll need to apply a workaround,
56edit $SYSROOT/etc/ld.so.preload and comment out all lines in it.
57
58    sudo chroot $SYSROOT
59    apt-get install libudev-dev libasound2-dev libdbus-1-dev libraspberrypi0 libraspberrypi-bin libraspberrypi-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxinerama-dev libxxf86vm-dev libxss-dev
60    exit
61    sudo umount $SYSROOT/dev
62    sudo umount $SYSROOT/proc
63    sudo umount $SYSROOT/sys
64    sudo umount /mnt
65
66There's one more fix required, as the libdl.so symlink uses an absolute path
67which doesn't quite work in our setup.
68
69    sudo rm -rf $SYSROOT/usr/lib/arm-linux-gnueabihf/libdl.so
70    sudo ln -s ../../../lib/arm-linux-gnueabihf/libdl.so.2 $SYSROOT/usr/lib/arm-linux-gnueabihf/libdl.so
71
72The final step is compiling SDL itself.
73
74    export CC="/opt/rpi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc --sysroot=$SYSROOT -I$SYSROOT/opt/vc/include -I$SYSROOT/usr/include -I$SYSROOT/opt/vc/include/interface/vcos/pthreads -I$SYSROOT/opt/vc/include/interface/vmcs_host/linux"
75    cd <SDL SOURCE>
76    mkdir -p build;cd build
77    LDFLAGS="-L$SYSROOT/opt/vc/lib" ../configure --with-sysroot=$SYSROOT --host=arm-raspberry-linux-gnueabihf --prefix=$PWD/rpi-sdl2-installed --disable-pulseaudio --disable-esd
78    make
79    make install
80
81To be able to deploy this to /usr/local in the Raspbian system you need to fix up a few paths:
82
83    perl -w -pi -e "s#$PWD/rpi-sdl2-installed#/usr/local#g;" ./rpi-sdl2-installed/lib/libSDL2.la ./rpi-sdl2-installed/lib/pkgconfig/sdl2.pc ./rpi-sdl2-installed/bin/sdl2-config
84
85================================================================================
86 Apps don't work or poor video/audio performance
87================================================================================
88
89If you get sound problems, buffer underruns, etc, run "sudo rpi-update" to
90update the RPi's firmware. Note that doing so will fix these problems, but it
91will also render the CMA - Dynamic Memory Split functionality useless.
92
93Also, by default the Raspbian distro configures the GPU RAM at 64MB, this is too
94low in general, specially if a 1080p TV is hooked up.
95
96See here how to configure this setting: http://elinux.org/RPiconfig
97
98Using a fixed gpu_mem=128 is the best option (specially if you updated the
99firmware, using CMA probably won't work, at least it's the current case).
100
101================================================================================
102 No input
103================================================================================
104
105Make sure you belong to the "input" group.
106
107    sudo usermod -aG input `whoami`
108
109================================================================================
110 No HDMI Audio
111================================================================================
112
113If you notice that ALSA works but there's no audio over HDMI, try adding:
114
115    hdmi_drive=2
116
117to your config.txt file and reboot.
118
119Reference: http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5062
120
121================================================================================
122 Text Input API support
123================================================================================
124
125The Text Input API is supported, with translation of scan codes done via the
126kernel symbol tables. For this to work, SDL needs access to a valid console.
127If you notice there's no SDL_TEXTINPUT message being emitted, double check that
128your app has read access to one of the following:
129
130* /proc/self/fd/0
131* /dev/tty
132* /dev/tty[0...6]
133* /dev/vc/0
134* /dev/console
135
136This is usually not a problem if you run from the physical terminal (as opposed
137to running from a pseudo terminal, such as via SSH). If running from a PTS, a
138quick workaround is to run your app as root or add yourself to the tty group,
139then re login to the system.
140
141   sudo usermod -aG tty `whoami`
142
143The keyboard layout used by SDL is the same as the one the kernel uses.
144To configure the layout on Raspbian:
145
146    sudo dpkg-reconfigure keyboard-configuration
147
148To configure the locale, which controls which keys are interpreted as letters,
149this determining the CAPS LOCK behavior:
150
151    sudo dpkg-reconfigure locales
152
153================================================================================
154 OpenGL problems
155================================================================================
156
157If you have desktop OpenGL headers installed at build time in your RPi or cross
158compilation environment, support for it will be built in. However, the chipset
159does not actually have support for it, which causes issues in certain SDL apps
160since the presence of OpenGL support supersedes the ES/ES2 variants.
161The workaround is to disable OpenGL at configuration time:
162
163    ./configure --disable-video-opengl
164
165Or if the application uses the Render functions, you can use the SDL_RENDER_DRIVER
166environment variable:
167
168    export SDL_RENDER_DRIVER=opengles2
169
170================================================================================
171 Notes
172================================================================================
173
174* When launching apps remotely (via SSH), SDL can prevent local keystrokes from
175  leaking into the console only if it has root privileges. Launching apps locally
176  does not suffer from this issue.
177
178
179