Difference between revisions of "Compiling ScummVM/RPI"

From ScummVM :: Wiki
Jump to navigation Jump to search
(Installing the needed Raspberry Pi headers and libraries on PC)
(Configuring ScummVM: Mention --no-keep-memory option for linking on a RPi itself.)
 
(16 intermediate revisions by 2 users not shown)
Line 5: Line 5:
 
We will clone the Raspberry Pi tools repository which includes the cross-compiler we need:
 
We will clone the Raspberry Pi tools repository which includes the cross-compiler we need:
  
git clone git://github.com/raspberrypi/tools.git
+
git clone https://github.com/raspberrypi/tools.git
 +
It will get cloned to a directory called tools at your current location.
  
It will get cloned to a directory called raspberrypi at your current location.
+
Add it to the path so we have the crosscompiler binaries available from our scummvm building directory. If my raspberrry pi tools repository ended cloned in tools at my home directory, I would do:
  
Add it to the path so we have the crosscompiler binaries available from our scummvm building directory. If my raspberrry pi tools repository ended cloned in raspberrrypi at my home directory, I would do:
+
PATH=$PATH:$HOME/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin
 
 
PATH=$PATH:$HOME/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin
 
  
 
After adding the crosscompiler executables directory to the path, we should be able to run arm-linux-gnueabihf-gcc, arm-linux-gnueabihf-g++, etc... just try. They should yield an error because you pass them no input files, but that's expected. It's just a test so we know we've the crosscompiler installed and accesible.
 
After adding the crosscompiler executables directory to the path, we should be able to run arm-linux-gnueabihf-gcc, arm-linux-gnueabihf-g++, etc... just try. They should yield an error because you pass them no input files, but that's expected. It's just a test so we know we've the crosscompiler installed and accesible.
Line 22: Line 21:
 
First we export the path where we will copy these into, and then we will manually copy them. I choose /opt/rpi_root, but any other path with the right permissions for your user and common sense is going to be ok:
 
First we export the path where we will copy these into, and then we will manually copy them. I choose /opt/rpi_root, but any other path with the right permissions for your user and common sense is going to be ok:
  
export $RPI_ROOT /opt/rpi_root
+
mkdir -p /opt/rpi_root
 
 
cp -R <SD_mountpoint_directory>/usr $RPI_ROOT
 
 
 
cp -R <SD_mountpoint_directory>/lib $RPI_ROOT
 
  
cp -R <SD_mountpoint_directory>/opt $RPI_ROOT
+
cd <SD_mountpoint_directory>
  
Now we need to setup the cross-building sdl-config so it's used instead on the host system's sdl-config script. Edit $RPI_ROOT/usr/bin/sdl-config and change the prefix line to:
+
cp -R usr lib opt $RPI_ROOT
  
prefix=/opt/rpi-root/usr
+
export RPI_ROOT=/opt/rpi_root
  
 
== Configuring ScummVM ==
 
== Configuring ScummVM ==
Line 38: Line 33:
 
Now we configure scummvm buildsystem so it knows what backend we want and where is our raspberry pi local sysroot living, containing the Raspberry Pi headers and libs the cross-compiler and linker will need. In this example configuration, we disable additional libs, and debug symbols since it's intended for final users.
 
Now we configure scummvm buildsystem so it knows what backend we want and where is our raspberry pi local sysroot living, containing the Raspberry Pi headers and libs the cross-compiler and linker will need. In this example configuration, we disable additional libs, and debug symbols since it's intended for final users.
  
Depending on whether we want dispmanx or GLES support, we would pass --enable-dispmanx or --enable-gles-rpi parameters to the configure script.
+
./configure --host=raspberrypi --with-sdl-prefix=$RPI_ROOT/usr  --disable-debug --enable-release --enable-optimizations --disable-mt32emu --disable-flac --disable-mad --disable-vorbis --disable-tremor --disable-fluidsynth --disable-taskbar --disable-timidity --disable-alsa
For example, we would run configure like this to build a dispmanx version:
+
 
 +
Remember you should have exported the RPI_ROOT enviroment variable previously.
 +
On the raspberrypi host, SDL2 will be always used since it provides graphics acceleration.
  
RPI_ROOTDIR="/home/manuel/rpi_root" ./configure --host=raspberrypi --enable-dispmanx --disable-debug --enable-release --enable-optimizations --disable-mt32emu --disable-flac
+
''Note:'' If you are building ScummVM on your RPi itself, you might run out of memory during linking. If you use GNU ld for compiling you can try exporting LDFLAGS="-Wl,--no-keep-memory" before running configure. This tells GNU ld to optimize for memory usage.
--disable-mad --disable-vorbis --disable-tremor
 
--disable-fluidsynth --disable-taskbar --disable-timidity --disable-alsa
 
  
 
== Compiling ScummVM ==
 
== Compiling ScummVM ==

Latest revision as of 23:11, 16 March 2016

Cross-compiling ScummVM on for Raspberry Pi

Installing the official Raspberry Pi cross-compiler on PC

We will clone the Raspberry Pi tools repository which includes the cross-compiler we need:

git clone https://github.com/raspberrypi/tools.git It will get cloned to a directory called tools at your current location.

Add it to the path so we have the crosscompiler binaries available from our scummvm building directory. If my raspberrry pi tools repository ended cloned in tools at my home directory, I would do:

PATH=$PATH:$HOME/tools/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin

After adding the crosscompiler executables directory to the path, we should be able to run arm-linux-gnueabihf-gcc, arm-linux-gnueabihf-g++, etc... just try. They should yield an error because you pass them no input files, but that's expected. It's just a test so we know we've the crosscompiler installed and accesible.

Installing the needed Raspberry Pi headers and libraries on PC

We need to copy over the /usr, /lib and /opt directories from your Raspbian SD to your PC (the computer were you will do the cross-compilation), for the needed headers and libs to be available. Of course, you'll have to install any additonal libs from Raspbian running of the Pi before expecting them to be available, so if you compile scummvm with FLAC support, you should have installed the libflac development libs on the Pi first.

First we export the path where we will copy these into, and then we will manually copy them. I choose /opt/rpi_root, but any other path with the right permissions for your user and common sense is going to be ok:

mkdir -p /opt/rpi_root

cd <SD_mountpoint_directory>

cp -R usr lib opt $RPI_ROOT

export RPI_ROOT=/opt/rpi_root

Configuring ScummVM

Now we configure scummvm buildsystem so it knows what backend we want and where is our raspberry pi local sysroot living, containing the Raspberry Pi headers and libs the cross-compiler and linker will need. In this example configuration, we disable additional libs, and debug symbols since it's intended for final users.

./configure --host=raspberrypi --with-sdl-prefix=$RPI_ROOT/usr --disable-debug --enable-release --enable-optimizations --disable-mt32emu --disable-flac --disable-mad --disable-vorbis --disable-tremor --disable-fluidsynth --disable-taskbar --disable-timidity --disable-alsa

Remember you should have exported the RPI_ROOT enviroment variable previously. On the raspberrypi host, SDL2 will be always used since it provides graphics acceleration.

Note: If you are building ScummVM on your RPi itself, you might run out of memory during linking. If you use GNU ld for compiling you can try exporting LDFLAGS="-Wl,--no-keep-memory" before running configure. This tells GNU ld to optimize for memory usage.

Compiling ScummVM

run "make clean" and then "make -j<n>", where n is the number of cores available on your compilation machine x2.

Installing ScummVM

Simply copy over the resulting scummvm executable to your Raspberry Pi sd. A good idea is to create an scummvm folder in your /home/pi directory, and put the executable there along with the games you want to use with it.