Difference between revisions of "Compiling ScummVM/RPI"

Jump to navigation Jump to search
1,206 bytes added ,  05:05, 17 December 2020
 
(9 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Cross-compiling ScummVM on for Raspberry Pi ==
== Cross-compiling ScummVM for Raspberry Pi ==


== Installing the official Raspberry Pi cross-compiler on PC ==
== Installing the official Raspberry Pi cross-compiler on PC ==
Line 22: Line 22:


As an example, on the Raspberry Pi running Raspbian (Buster) OS 3.2 (January 2020) we can execute the following to install third party libraries that ScummVM needs for its features and various game engines:
As an example, on the Raspberry Pi running Raspbian (Buster) OS 3.2 (January 2020) we can execute the following to install third party libraries that ScummVM needs for its features and various game engines:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install -y --no-install-recommends \
              libsdl2-dev \
              liba52-0.7.4-dev \
              libjpeg62-turbo-dev \
              libmpeg2-4-dev \
              libogg-dev \
              libvorbis-dev \
              libflac-dev \
              libmad0-dev \
              libpng-dev \
              libtheora-dev \
              libfaad-dev \
              libfluidsynth-dev \
              libfreetype6-dev \
              libcurl4-openssl-dev  \
              libsdl2-net-dev \
              libspeechd-dev \
              zlib1g-dev \
              libfribidi-dev \
              libglew-dev


  <nowiki>
On the '''host PC''' first we make sure we have some pre-requisite packages installed for the build.
sudo apt-get update
  sudo apt-get update
sudo apt-get upgrade
sudo apt-get upgrade
sudo apt-get install -y --no-install-recommends \
sudo apt-get install -y make pkg-config
            libsdl2-dev \
Then we export the path where we will copy the directories from the RPi SD card into, and then we manually copy them. One option (shown in the example commands below) is to copy the Raspberry Pi headers and libraries to ''/opt/rpi_root'', but any other path with the right permissions for our user (within common sense) should be ok:
            liba52-0.7.4-dev \
            libjpeg62-turbo-dev \
            libmpeg2-4-dev \
            libogg-dev \
            libvorbis-dev \
            libflac-dev \
            libmad0-dev \
            libpng-dev \
            libtheora-dev \
            libfaad-dev \
            libfluidsynth-dev \
            libfreetype6-dev \
            libcurl4-openssl-dev  \
            libsdl2-net-dev \
            libspeechd-dev \
            zlib1g-dev</nowiki>


On the '''host PC''' we first export the path where we will copy these into, and then we manually copy them. One option (shown in the example commands below) is to copy the Raspberry Pi headers and libraries to ''/opt/rpi_root'', but any other path with the right permissions for our user (within common sense) should be ok:
  mkdir -p /opt/rpi_root
 
export RPI_ROOT=/opt/rpi_root
  <nowiki>
cd <Raspbian_SD_card_mountpoint_directory>
mkdir -p /opt/rpi_root
cp -R usr lib opt $RPI_ROOT
export RPI_ROOT=/opt/rpi_root
cd <Raspbian_SD_card_mountpoint_directory>
cp -R usr lib opt $RPI_ROOT</nowiki>


The above copying of files has the unfortunate side-effect that many symbolic links that were copied over are now invalid, particularly those linking to absolute paths. Fortunately, we can remedy this situation by downloading and running a python script that will fix those links:
The above copying of files has the unfortunate side-effect that many symbolic links that were copied over are now invalid, particularly those linking to absolute paths. Fortunately, we can remedy this situation by downloading and running a python script that will fix those links:
Line 59: Line 62:
./sysroot-relativelinks.py $RPI_ROOT</nowiki>
./sysroot-relativelinks.py $RPI_ROOT</nowiki>


Note that the last command above is supposed to run the python script <code>sysroot-relativelinks.py</code>. You will need to have python3 installed on your host PC for that. The script assumes a location for your python binary, but that may not be a valid path on your host PC. An alternative to that would be to run:
$(which python3) ./sysroot-relativelinks.py $RPI_ROOT
Finally, update the ''PATH'' variable to be preceded by the ''RPI_ROOT'' path, since this is required for proper detection of ''libcurl'' related files by ScummVM's ''configure'' script.
Finally, update the ''PATH'' variable to be preceded by the ''RPI_ROOT'' path, since this is required for proper detection of ''libcurl'' related files by ScummVM's ''configure'' script.
  <nowiki>export PATH=$RPI_ROOT:$PATH</nowiki>
  <nowiki>export PATH=$RPI_ROOT:$PATH</nowiki>
Line 70: Line 75:
Now we can configure the ScummVM build system so it knows what backend we target and where our Raspberry Pi ''local sysroot'' is located, containing the Raspberry Pi headers and libraries the cross-compiler and linker will need. In this example configuration, we disable debug symbols since it's intended for final users.
Now we can configure the ScummVM build system so it knows what backend we target and where our Raspberry Pi ''local sysroot'' is located, containing the Raspberry Pi headers and libraries the cross-compiler and linker will need. In this example configuration, we disable debug symbols since it's intended for final users.


  <nowiki>
  mkdir -p ./scummvmDist
PKG_CONFIG_SYSROOT_DIR=$RPI_ROOT PKG_CONFIG_LIBDIR=$RPI_ROOT/usr/lib/arm-linux-gnueabihf/pkgconfig ./configure --host=raspberrypi --with-sdl-prefix=$RPI_ROOT/usr --with-png-prefix=$RPI_ROOT/usr --disable-debug --enable-release</nowiki>
PKG_CONFIG_SYSROOT_DIR=$RPI_ROOT PKG_CONFIG_LIBDIR=$RPI_ROOT/usr/lib/arm-linux-gnueabihf/pkgconfig ./configure --host=raspberrypi --with-sdl-prefix=$RPI_ROOT/usr --with-png-prefix=$RPI_ROOT/usr --disable-debug --enable-release --prefix=$(pwd)/scummvmDist


Remember that we have already exported the ''RPI_ROOT'' environment variable previously and updated the ''PATH'' environment variable to be preceded by the ''RPI_ROOT'' path and succeeded by the path to the Raspberry Pi toolchain bin folder (as shown in the previous steps).
Remember that we have already exported the ''RPI_ROOT'' environment variable previously and updated the ''PATH'' environment variable to be preceded by the ''RPI_ROOT'' path and succeeded by the path to the Raspberry Pi toolchain bin folder (as shown in the previous steps).
Line 88: Line 93:


Provided that the configure step was executed successfully, we can proceed to run the following commands in order to build ScummVM:
Provided that the configure step was executed successfully, we can proceed to run the following commands in order to build ScummVM:
  <nowiki>
  make clean
make clean
make -j$(nproc)
make -j$(nproc)</nowiki>
make install


== Installing ScummVM on the Raspberry Pi ==
== Installing ScummVM on the Raspberry Pi ==


In this step we simply have to copy over the resulting ''scummvm'' executable to our Raspberry Pi (Raspbian OS) SD Card. A good idea is to create a ''scummvm'' folder in our ''/home/pi'' directory on the Raspian OS SD Card, and put the executable there along with any games we want to use with it.
In this step we simply have to copy over the resulting files in our distribution folder ''scummvmDist'' to our Raspberry Pi (Raspbian OS) SD Card. A good idea is to create a ''scummvm'' folder in our ''/home/pi'' directory on the Raspian OS SD Card, and put the distribution folder contents there along with any games we want to use with it.


In order to have the text-to-speech feature available for ScummVM we should also install the speech-dispatcher package and a text-to-speech engine (as per the instructions in this pertinent [https://github.com/scummvm/scummvm/pull/1808 Pull Request])
In order to have the text-to-speech feature available for ScummVM we should also install the speech-dispatcher package and a text-to-speech engine (as per the instructions in this pertinent [https://github.com/scummvm/scummvm/pull/1808 Pull Request])
Line 101: Line 106:
  <nowiki>sudo apt-get install --no-install-recommends speech-dispatcher speech-dispatcher-espeak-ng</nowiki>
  <nowiki>sudo apt-get install --no-install-recommends speech-dispatcher speech-dispatcher-espeak-ng</nowiki>


'''Note 1:''' There's a number of optional additional files that can be copied in the ScummVM directory along with the ''scummvm'' executable, which ScummVM uses for themes, GUI translations and as auxilliary data files for some of the game engines. Such list of files is shown [[HOWTO-Release#Binaries|here]].
'''Note 1:''' There's a number of optional additional files that can be copied in the ScummVM directory along with the ''scummvm'' executable, which ScummVM uses for themes, GUI translations and as auxilliary data files for some of the game engines. Such list of files is shown [[HOWTO-Release#Binaries|here]]. These files should be already present in your distribution folder scummvmDist, if you used the "prefix" switch in configure and the make install command as shown above.


'''Note 2:''' As of yet, there are some known issues with the ALSA sound driver especially in conjunction with the PulseAudio system on Raspbian OS (3.2). Having PulseAudio installed (by default it is not installed) may result to bad sound output in ScummVM (and other apps).
'''Note 2:''' As of yet, there are some known issues with the ALSA sound driver especially in conjunction with the PulseAudio system on Raspbian OS (3.2). Having PulseAudio installed (by default it is not installed) may result to bad sound output in ScummVM (and other apps).
== External Links ==
* [https://github.com/raspberrypi/tools Official Raspberry Pi toolchain repository]
* [https://github.com/Pro/raspi-toolchain/ Alternative Raspberry Pi toolchain by Stefan Profanter (Pro)]
* [http://ulasdikme.com/projects/raspberry/Qt_for_raspberrypi.php Reference article and source for sysroot-relativelinks.py script solution]
1,310

edits

Navigation menu