- 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.
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.
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
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.
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
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
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
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