ladybird/Documentation/BuildInstructions.md
Linus Groh f2cc067c9b Documentation: Escape asterisk ("*NIX") in BuildInstructions.md
Even though Markdown renderers should handle this fine as-is, not
escaping the asterisk makes vim render a lot of text in italics, for
example.
2021-08-29 16:10:21 +01:00

3.3 KiB

SerenityOS build instructions

Prerequisites

Make sure you have all the dependencies installed:

Debian / Ubuntu

sudo apt install build-essential cmake curl libmpfr-dev libmpc-dev libgmp-dev e2fsprogs ninja-build qemu-system-i386 qemu-utils ccache rsync genext2fs

GCC 10

On Ubuntu gcc-10 is available in the repositories of 20.04 (Focal) and later - add the ubuntu-toolchain-r/test PPA if you're running an older version:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test

On Debian your system must be on the testing or unstable branch as gcc 10 is not available on stable or in the backports. If you want to switch from stable to testing, see the instructions on the Debian website on switching to testing. Alternatively, if you want to stay on stable, you can build SerenityOS in a Debian testing or Ubuntu Docker container.

Now on Ubuntu or Debian you can install gcc-10 with apt like this:

sudo apt install gcc-10 g++-10

QEMU 5 or later

QEMU version 5 is available in Ubuntu 20.10. For earlier versions, you can build version 6 using the Toolchain/BuildQemu.sh script. You may need the gtk+ 3.0 dev package:

sudo apt install libpixman-1-dev libgtk-3-dev

Windows

If you're on Windows you can use WSL2 to build SerenityOS. Please have a look at the Windows guide for details.

Arch Linux / Manjaro

sudo pacman -S --needed base-devel cmake curl mpfr libmpc gmp e2fsprogs ninja qemu qemu-arch-extra ccache rsync

Other systems

There is also documentation for installing the build prerequisites for some less commonly used systems:

Build

In order to build SerenityOS you will first need to build the toolchain by running the following command:

Meta/serenity.sh rebuild-toolchain

Later on, when you use git pull to get the latest changes, there's (usually) no need to rebuild the toolchain.

Run the following command to build and run SerenityOS:

Meta/serenity.sh run

This will compile all of SerenityOS and install the built files into the Build/i686/Root directory inside your Git repository. It will also build a disk image and start SerenityOS using QEMU.

Note that the anon user is able to become root without a password by default, as a development convenience. To prevent this, remove anon from the wheel group and he will no longer be able to run /bin/su.

If you want to test whether your code changes compile without running the VM you can use Meta/serenity.sh build. The serenity.sh script also provides a number of other commands. Run the script without arguments for a list.

Ports

To add a package from the ports collection to Serenity, for example curl, change into the Ports/curl directory and run ./package.sh. The source code for the package will be downloaded and the package will be built. The next time you start Serenity, curl will be available.

More information

At this point you should have a fully functioning VM for SerenityOS. The advanced build instructions guide has more information for some less commonly used features of the build system.