2 ================================================================================
6 Raspbian (other Linux distros may work as well).
8 ================================================================================
10 ================================================================================
13 * Hardware accelerated OpenGL ES 2.x
15 * Input (mouse/keyboard/joystick) via EVDEV
19 ================================================================================
20 Raspbian Build Dependencies
21 ================================================================================
23 sudo apt-
get install libudev-dev libasound2-dev libdbus-1-dev
25 You also need the VideoCore
binary stuff that ships
in /opt/vc for EGL and
26 OpenGL ES 2.
x, it usually comes pre-installed, but
in any case:
28 sudo apt-
get install libraspberrypi0 libraspberrypi-bin libraspberrypi-dev
31 ================================================================================
33 ================================================================================
35 If your Pi has NEON support, make sure you add -mfpu=neon to your CFLAGS so
36 that SDL will select some otherwise-disabled highly-optimized code. The
37 original Pi
units don'
t have NEON, the Pi2 probably does, and the Pi3
40 ================================================================================
41 Cross compiling from x86 Linux
42 ================================================================================
44 To cross compile SDL for Raspbian from your desktop machine, you'll need
a
45 Raspbian system root and the cross compilation tools. We'll assume these tools
46 will be placed
in /opt/rpi-tools
48 sudo git clone --
depth 1 https:
52 After unzipping, you'll
get file with
a name like: "<date>-wheezy-raspbian.
img"
53 Let'
s assume the sysroot will be built
in /opt/rpi-sysroot.
55 export SYSROOT=/opt/rpi-sysroot
56 sudo kpartx -
a -
v <path_to_raspbian_image>.
img
57 sudo mount -o
loop /dev/mapper/loop0p2 /mnt
58 sudo
cp -
r /mnt $SYSROOT
59 sudo apt-
get install qemu binfmt-support qemu-user-static
60 sudo
cp /usr/bin/qemu-arm-static $SYSROOT/usr/bin
61 sudo mount --bind /dev $SYSROOT/dev
62 sudo mount --bind /proc $SYSROOT/proc
63 sudo mount --bind /sys $SYSROOT/sys
65 Now, before chrooting into the ARM sysroot, you'll need to apply
a workaround,
66 edit $SYSROOT/etc/ld.so.preload and comment out all
lines in it.
69 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
71 sudo umount $SYSROOT/dev
72 sudo umount $SYSROOT/proc
73 sudo umount $SYSROOT/sys
76 There'
s one more fix required, as the libdl.so symlink uses an absolute
path
77 which doesn'
t quite work
in our setup.
79 sudo rm -rf $SYSROOT/usr/lib/arm-linux-gnueabihf/libdl.so
80 sudo ln -
s ../../../lib/arm-linux-gnueabihf/libdl.so.2 $SYSROOT/usr/lib/arm-linux-gnueabihf/libdl.so
82 The final step is compiling SDL itself.
84 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"
86 mkdir -
p build;cd build
87 LDFLAGS="-L$SYSROOT/opt/vc/lib" ../configure --with-sysroot=$SYSROOT --host=arm-raspberry-linux-gnueabihf --prefix=$PWD/rpi-sdl2-installed --disable-pulseaudio --disable-esd
91 To be able to deploy this to /usr/local
in the Raspbian system you need to fix up
a few
paths:
93 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
95 ================================================================================
96 Apps don
't work or poor video/audio performance
97 ================================================================================
99 If you get sound problems, buffer underruns, etc, run "sudo rpi-update" to
100 update the RPi's firmware. Note that doing so will fix these problems, but it
101 will also
render the CMA - Dynamic Memory Split functionality useless.
103 Also,
by default the Raspbian distro configures the GPU RAM at 64MB,
this is too
104 low
in general, specially
if a 1080
p TV is hooked up.
106 See here how to configure
this setting: http:
108 Using
a fixed gpu_mem=128 is the best
option (specially
if you updated the
109 firmware,
using CMA probably won
't work, at least it's the current
case).
111 ================================================================================
113 ================================================================================
115 Make sure you belong to the
"input" group.
117 sudo usermod -aG input `whoami`
119 ================================================================================
121 ================================================================================
123 If you notice that ALSA works but there
's no audio over HDMI, try adding:
127 to your config.txt file and reboot.
129 Reference: http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5062
131 ================================================================================
132 Text Input API support
133 ================================================================================
135 The Text Input API is supported, with translation of scan codes done via the
136 kernel symbol tables. For this to work, SDL needs access to a valid console.
138 your app has read
access to
one of the following:
146 This is usually not
a problem
if you run from the physical terminal (as opposed
147 to running from
a pseudo terminal, such as via SSH). If running from
a PTS,
a
148 quick workaround is to run your app as root or add yourself to the tty
group,
149 then re-login to the system.
151 sudo usermod -aG tty `whoami`
153 The keyboard layout used
by SDL is the same as the
one the kernel uses.
154 To configure the layout on Raspbian:
156 sudo dpkg-reconfigure keyboard-configuration
158 To configure the locale, which controls which keys are interpreted as letters,
159 this determining the CAPS LOCK behavior:
161 sudo dpkg-reconfigure locales
163 ================================================================================
165 ================================================================================
167 If you have desktop OpenGL headers installed at build
time in your RPi or cross
168 compilation environment, support
for it will be built
in. However, the chipset
169 does not actually have support
for it, which causes issues
in certain SDL apps
170 since the presence of OpenGL support supersedes the ES/ES2 variants.
171 The workaround is to disable OpenGL at configuration
time:
173 ./configure --disable-video-opengl
175 Or
if the application uses the Render functions, you can use the SDL_RENDER_DRIVER
178 export SDL_RENDER_DRIVER=opengles2
180 ================================================================================
182 ================================================================================
184 * When launching apps remotely (via SSH), SDL can prevent local keystrokes from
185 leaking into the console only
if it has root privileges. Launching apps locally
186 does not suffer from
this issue.