cscg22-gearboy

CSCG 2022 Challenge 'Gearboy'
git clone https://git.sinitax.com/sinitax/cscg22-gearboy
Log | Files | Refs | sfeed.txt

README-raspberrypi.md (7863B)


      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================================================================================
     32 NEON
     33================================================================================
     34
     35If your Pi has NEON support, make sure you add -mfpu=neon to your CFLAGS so
     36that SDL will select some otherwise-disabled highly-optimized code. The
     37original Pi units don't have NEON, the Pi2 probably does, and the Pi3
     38definitely does.
     39
     40================================================================================
     41 Cross compiling from x86 Linux
     42================================================================================
     43
     44To cross compile SDL for Raspbian from your desktop machine, you'll need a
     45Raspbian system root and the cross compilation tools. We'll assume these tools
     46will be placed in /opt/rpi-tools
     47
     48    sudo git clone --depth 1 https://github.com/raspberrypi/tools /opt/rpi-tools
     49
     50You'll also need a Raspbian binary image.
     51Get it from: http://downloads.raspberrypi.org/raspbian_latest 
     52After unzipping, you'll get file with a name like: "<date>-wheezy-raspbian.img"
     53Let's assume the sysroot will be built in /opt/rpi-sysroot.
     54
     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
     64
     65Now, before chrooting into the ARM sysroot, you'll need to apply a workaround,
     66edit $SYSROOT/etc/ld.so.preload and comment out all lines in it.
     67
     68    sudo chroot $SYSROOT
     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
     70    exit
     71    sudo umount $SYSROOT/dev
     72    sudo umount $SYSROOT/proc
     73    sudo umount $SYSROOT/sys
     74    sudo umount /mnt
     75    
     76There's one more fix required, as the libdl.so symlink uses an absolute path 
     77which doesn't quite work in our setup.
     78
     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
     81
     82The final step is compiling SDL itself.
     83
     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"
     85    cd <SDL SOURCE>
     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
     88    make
     89    make install
     90
     91To be able to deploy this to /usr/local in the Raspbian system you need to fix up a few paths:
     92    
     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
     94    
     95================================================================================
     96 Apps don't work or poor video/audio performance
     97================================================================================
     98
     99If you get sound problems, buffer underruns, etc, run "sudo rpi-update" to 
    100update the RPi's firmware. Note that doing so will fix these problems, but it
    101will also render the CMA - Dynamic Memory Split functionality useless.
    102
    103Also, by default the Raspbian distro configures the GPU RAM at 64MB, this is too
    104low in general, specially if a 1080p TV is hooked up.
    105
    106See here how to configure this setting: http://elinux.org/RPiconfig
    107
    108Using a fixed gpu_mem=128 is the best option (specially if you updated the 
    109firmware, using CMA probably won't work, at least it's the current case).
    110
    111================================================================================
    112 No input
    113================================================================================
    114
    115Make sure you belong to the "input" group.
    116
    117    sudo usermod -aG input `whoami`
    118
    119================================================================================
    120 No HDMI Audio
    121================================================================================
    122
    123If you notice that ALSA works but there's no audio over HDMI, try adding:
    124    
    125    hdmi_drive=2
    126    
    127to your config.txt file and reboot.
    128
    129Reference: http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5062
    130
    131================================================================================
    132 Text Input API support
    133================================================================================
    134
    135The Text Input API is supported, with translation of scan codes done via the
    136kernel symbol tables. For this to work, SDL needs access to a valid console.
    137If you notice there's no SDL_TEXTINPUT message being emitted, double check that
    138your app has read access to one of the following:
    139    
    140* /proc/self/fd/0
    141* /dev/tty
    142* /dev/tty[0...6]
    143* /dev/vc/0
    144* /dev/console
    145
    146This is usually not a problem if you run from the physical terminal (as opposed
    147to running from a pseudo terminal, such as via SSH). If running from a PTS, a 
    148quick workaround is to run your app as root or add yourself to the tty group,
    149then re-login to the system.
    150
    151    sudo usermod -aG tty `whoami`
    152    
    153The keyboard layout used by SDL is the same as the one the kernel uses.
    154To configure the layout on Raspbian:
    155    
    156    sudo dpkg-reconfigure keyboard-configuration
    157    
    158To configure the locale, which controls which keys are interpreted as letters,
    159this determining the CAPS LOCK behavior:
    160
    161    sudo dpkg-reconfigure locales
    162
    163================================================================================
    164 OpenGL problems
    165================================================================================
    166
    167If you have desktop OpenGL headers installed at build time in your RPi or cross 
    168compilation environment, support for it will be built in. However, the chipset 
    169does not actually have support for it, which causes issues in certain SDL apps 
    170since the presence of OpenGL support supersedes the ES/ES2 variants.
    171The workaround is to disable OpenGL at configuration time:
    172
    173    ./configure --disable-video-opengl
    174
    175Or if the application uses the Render functions, you can use the SDL_RENDER_DRIVER
    176environment variable:
    177
    178    export SDL_RENDER_DRIVER=opengles2
    179
    180================================================================================
    181 Notes
    182================================================================================
    183
    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.
    187  
    188