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
16 * Hotplugging of input devices via UDEV
18 ================================================================================
19 Raspbian Build Dependencies
20 ================================================================================
22 sudo apt-get install libudev-dev libasound2-dev libdbus-1-dev
24 You also need the VideoCore binary stuff that ships in /opt/vc for EGL and
25 OpenGL ES 2.x, it usually comes pre installed, but in any case:
27 sudo apt-get install libraspberrypi0 libraspberrypi-bin libraspberrypi-dev
29 ================================================================================
30 Cross compiling from x86 Linux
31 ================================================================================
33 To cross compile SDL for Raspbian from your desktop machine, you'll need a
34 Raspbian system root and the cross compilation tools. We'll assume these tools
35 will be placed in /opt/rpi-tools
37 sudo git clone --depth 1 https://github.com/raspberrypi/tools /opt/rpi-tools
39 You'll also need a Rasbian binary image.
40 Get it from: http://downloads.raspberrypi.org/raspbian_latest
41 After unzipping, you'll get file with a name like: <date>-wheezy-raspbian.img
42 Let's assume the sysroot will be built in /opt/rpi-sysroot.
44 export SYSROOT=/opt/rpi-sysroot
45 sudo kpartx -a -v <path_to_raspbian_image>.img
46 sudo mount -o loop /dev/mapper/loop0p2 /mnt
47 sudo cp -r /mnt $SYSROOT
48 sudo apt-get install qemu binfmt-support qemu-user-static
49 sudo cp /usr/bin/qemu-arm-static $SYSROOT/usr/bin
50 sudo mount --bind /dev $SYSROOT/dev
51 sudo mount --bind /proc $SYSROOT/proc
52 sudo mount --bind /sys $SYSROOT/sys
54 Now, before chrooting into the ARM sysroot, you'll need to apply a workaround,
55 edit $SYSROOT/etc/ld.so.preload and comment out all lines in it.
58 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 sudo umount $SYSROOT/dev
61 sudo umount $SYSROOT/proc
62 sudo umount $SYSROOT/sys
65 There's one more fix required, as the libdl.so symlink uses an absolute path
66 which doesn't quite work in our setup.
68 sudo rm -rf $SYSROOT/usr/lib/arm-linux-gnueabihf/libdl.so
69 sudo ln -s ../../../lib/arm-linux-gnueabihf/libdl.so.2 $SYSROOT/usr/lib/arm-linux-gnueabihf/libdl.so
71 The final step is compiling SDL itself.
73 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 mkdir -p build;cd build
76 ../configure --with-sysroot=$SYSROOT --host=arm-raspberry-linux-gnueabihf --prefix=$PWD/rpi-sdl2-installed --disable-pulseaudio --disable-esd
80 To be able to deploy this to /usr/local in the Raspbian system you need to fix up a few paths:
82 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 Apps don't work or poor video/audio performance
86 ================================================================================
88 If you get sound problems, buffer underruns, etc, run "sudo rpi-update" to
89 update the RPi's firmware. Note that doing so will fix these problems, but it
90 will also render the CMA - Dynamic Memory Split functionality useless.
92 Also, by default the Raspbian distro configures the GPU RAM at 64MB, this is too
93 low in general, specially if a 1080p TV is hooked up.
95 See here how to configure this setting: http://elinux.org/RPiconfig
97 Using a fixed gpu_mem=128 is the best option (specially if you updated the
98 firmware, using CMA probably won't work, at least it's the current case).
100 ================================================================================
102 ================================================================================
104 Make sure you belong to the "input" group.
106 sudo usermod -aG input `whoami`
108 ================================================================================
110 ================================================================================
112 If you notice that ALSA works but there's no audio over HDMI, try adding:
116 to your config.txt file and reboot.
118 Reference: http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5062
120 ================================================================================
121 Text Input API support
122 ================================================================================
124 The Text Input API is supported, with translation of scan codes done via the
125 kernel symbol tables. For this to work, SDL needs access to a valid console.
126 If you notice there's no SDL_TEXTINPUT message being emitted, double check that
127 your app has read access to one of the following:
135 This is usually not a problem if you run from the physical terminal (as opposed
136 to running from a pseudo terminal, such as via SSH). If running from a PTS, a
137 quick workaround is to run your app as root or add yourself to the tty group,
138 then re login to the system.
140 sudo usermod -aG tty `whoami`
142 The keyboard layout used by SDL is the same as the one the kernel uses.
143 To configure the layout on Raspbian:
145 sudo dpkg-reconfigure keyboard-configuration
147 To configure the locale, which controls which keys are interpreted as letters,
148 this determining the CAPS LOCK behavior:
150 sudo dpkg-reconfigure locales
152 ================================================================================
154 ================================================================================
156 * When launching apps remotely (via SSH), SDL can prevent local keystrokes from
157 leaking into the console only if it has root privileges. Launching apps locally
158 does not suffer from this issue.