Skip to content

Latest commit

 

History

History
executable file
·
203 lines (138 loc) · 5.16 KB

File metadata and controls

executable file
·
203 lines (138 loc) · 5.16 KB

How to build on Linux

Requirements

  • GNU Autotools
  • GCC 7.0+
  • SDL 2.0.18+
  • RmlUi (see instructions below)
  • GLEW
  • libsamplerate (optional)
  • libasound (optional)
  • libespeak-ng (optional)

Without libsamplerate the PC Speaker will not emit any sound and other audio sources will not be played unless they are at the same rate as the mixer. So while not technically required, it effectively is.

Without libasound there'll be no MIDI output support.

Without libespeak-ng there'll be no text-to-speech support.

Ubuntu specific packages

Install the following packages:

sudo apt install build-essential git autoconf cmake libfreetype6-dev libsdl2-dev libasound2-dev libharfbuzz-dev libbz2-dev libglew-dev libsamplerate0-dev libespeak-ng-dev

Then follow the general instructions.

General instructions

RmlUi

RmlUi is a C++ user interface library based on the HTML and CSS standards.

To compile RmlUi you need cmake and libfreetype.

git clone https://github.com/mikke89/RmlUi
cd RmlUi && mkdir build && cd build
cmake .. -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=Release

If you don't want to install RmlUi as a system library, add the CMAKE_INSTALL_PREFIX option to cmake:

-DCMAKE_INSTALL_PREFIX:PATH=$PWD/workspace/RmlUi/build/release

Then compile and install:

make -j`nproc` && make install

SDL2

If your distribution doesn't have the minimum required version of SDL2 (2.0.18), e.g. Ubuntu 20.04 LTS, you have to compile it from source, then use the --with-sdl-prefix IBMulator configuration option.

IBMulator

Download the sources:

git clone https://github.com/barotto/IBMulator

Enter the directory and run autoreconf:

cd IBMulator
autoreconf --install

Run the configure script:

./configure

Use ./configure --help to read the various compilation options.

You might want to use the --prefix option to install to a local directory instead of the default /usr/local.

If you did not install RmlUi as a system library use --with-rmlui-prefix to specify the full path of the library.

Any missing library will be pointed out; use your distributon's software manager to install them.

Here's an example configuration:

./configure --with-rmlui-prefix=$PWD/workspace/RmlUi/build/release --prefix=$PWD/workspace/IBMulator/build/release

Finally, compile and install:

make -j`nproc` && make install

Statically linked version

Static linking is not recommended on Linux.

This procedure works only on my Ubuntu system with some library recompiled. These notes are for my reference and convenience only.

NOTE: this is actually a hybrid and not all libraries will be linked statically, specifically:

  • libGL (OpenGL)
  • libasound (ALSA)
  • libdl (dynamic linking library)
  • libpthread (POSIX Threads)
  • libm (C math lib)
  • libc (C stdlib)

To know the needed dynamic libraries:

readelf -d ibmulator | grep NEEDED

Compilation

Instructions for Ubuntu 22.04 LTS (oldest supported version) and 24.04 LTS.

Compile SDL2 with all the available features enabled:

sudo apt-get install build-essential git make autoconf automake libtool pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev libaudio-dev libjack-dev libsndio-dev libsamplerate0-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libwayland-dev libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev
cd ~/workspace
git clone https://github.com/libsdl-org/SDL.git
cd SDL && git switch SDL2
./configure --prefix=$PWD/build/release
make -j`nproc` && make install

Compile GLEW:

cd ~/workspace
wget https://github.com/nigels-com/glew/releases/download/glew-2.2.0/glew-2.2.0.tgz
tar -xzf glew-2.2.0.tgz
cd glew-2.2.0/build
cmake cmake -G "Unix Makefiles" -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=$PWD/release
make -j`nproc` && make install

Compile RmlUi with the shared libs option disabled:

cd ~/workspace
git clone https://github.com/mikke89/RmlUi
cd RmlUi && mkdir build && cd build
cmake .. -G "Unix Makefiles" -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=$PWD/release
make -j`nproc` && make install

Compile libsamplerate (required for Ubuntu 24.04):

cd ~/workspace
git clone https://github.com/libsndfile/libsamplerate.git
cd libsamplerate
autoreconf -vif
./configure --enable-static --enable-sse2-lrint --prefix=$PWD/build/release
make -j`nproc` && make install

Configure IBMulator:

./configure \
 --prefix=$PWD/build/release \
 --enable-static \
 --disable-sdltest \
 --with-rmlui-prefix=$PWD/../RmlUi/build/release \
 --with-sdl-prefix=$PWD/../SDL/build/release \
 --with-glew-prefix=$PWD/../glew-2.2.0/build/release \
 --with-libsamplerate-prefix=$PWD/../libsamplerate/build/release

AppImage

Configure IBMulator with the correct AppDir prefix:

./configure --prefix=$PWD/AppDir/usr
make install

Run the linuxdeploy command:

./linuxdeploy-x86_64.AppImage --appdir AppDir --output appimage