2021-03-11 18:03:08 +00:00
# SerenityOS build instructions
2019-12-29 15:23:50 +00:00
2021-03-11 18:03:08 +00:00
## Prerequisites
2020-05-15 07:00:12 +00:00
2021-07-09 22:53:28 +00:00
Make sure you have all the dependencies installed:
2021-06-12 18:46:52 +00:00
2021-07-09 22:53:28 +00:00
### Debian / Ubuntu
2021-06-12 18:46:52 +00:00
```console
2021-11-08 04:11:24 +00:00
sudo apt install build-essential cmake curl libmpfr-dev libmpc-dev libgmp-dev e2fsprogs ninja-build qemu-system-gui qemu-system-x86 qemu-utils ccache rsync unzip texinfo
2021-06-12 18:46:52 +00:00
```
2022-04-04 07:23:22 +00:00
Optional: `fuse2fs` for [building images without root ](https://github.com/SerenityOS/serenity/pull/11224 ).
2021-06-12 18:46:52 +00:00
2022-01-07 06:27:53 +00:00
#### GCC 11
2021-06-12 18:46:52 +00:00
2022-01-07 06:27:53 +00:00
On Ubuntu gcc-11 is available in the repositories of 21.04 (Hirsuite) and later - add the `ubuntu-toolchain-r/test` PPA if you're running an older version:
2021-03-11 18:03:08 +00:00
```console
2021-03-04 11:14:03 +00:00
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
2019-12-29 15:23:50 +00:00
```
2022-02-22 13:00:02 +00:00
Next, update your local package information from this repository:
```console
sudo apt update
```
2022-01-07 06:27:53 +00:00
Now on Ubuntu or Debian you can install gcc-11 with apt like this:
2021-03-11 18:03:08 +00:00
```console
2022-01-07 06:27:53 +00:00
sudo apt install gcc-11 g++-11
2020-04-13 15:20:47 +00:00
```
2022-05-23 21:03:59 +00:00
#### QEMU 6.2 or later
2021-03-04 11:14:03 +00:00
2022-05-23 21:03:59 +00:00
Version 6.2 of QEMU is available in Ubuntu 22.04. On earlier versions of Ubuntu,
you can build the recommended version of QEMU as provided by the toolchain by running
`Toolchain/BuildQemu.sh` .
Note that you might need additional dev packages in order to build QEMU on your machine:
2021-03-11 18:03:08 +00:00
```console
2021-11-16 23:57:51 +00:00
sudo apt install libgtk-3-dev libpixman-1-dev libsdl2-dev libspice-server-dev
2020-07-04 08:51:16 +00:00
```
2021-07-11 20:19:11 +00:00
### Windows
If you're on Windows you can use WSL2 to build SerenityOS. Please have a look at the [Windows guide ](BuildInstructionsWindows.md )
for details.
### Arch Linux / Manjaro
2021-03-11 18:03:08 +00:00
```console
2022-05-20 07:54:46 +00:00
sudo pacman -S --needed base-devel cmake curl mpfr libmpc gmp e2fsprogs ninja qemu-desktop qemu-system-x86 qemu-system-aarch64 ccache rsync unzip
2019-12-29 15:23:50 +00:00
```
2022-04-04 07:23:22 +00:00
Optional: `fuse2fs` for [building images without root ](https://github.com/SerenityOS/serenity/pull/11224 ).
2019-12-29 15:23:50 +00:00
2021-07-09 22:53:28 +00:00
### Other systems
2021-03-11 18:03:08 +00:00
2021-07-09 22:53:28 +00:00
There is also documentation for installing the build prerequisites for some less commonly used systems:
2019-12-29 15:23:50 +00:00
2021-08-29 15:10:21 +00:00
* [Other Linux distributions and \*NIX systems ](BuildInstructionsOther.md )
2021-07-09 22:53:28 +00:00
* [macOS ](BuildInstructionsMacOS.md )
2021-01-13 20:24:46 +00:00
2021-03-11 18:03:08 +00:00
## Build
2021-07-09 22:53:28 +00:00
In order to build SerenityOS you will first need to build the toolchain by running the following command:
2021-03-11 18:03:08 +00:00
```console
2021-07-14 17:34:29 +00:00
Meta/serenity.sh rebuild-toolchain
2020-05-06 15:40:06 +00:00
```
2020-05-15 07:00:12 +00:00
2021-07-09 22:53:28 +00:00
Later on, when you use `git pull` to get the latest changes, there's (usually) no need to rebuild the toolchain.
2021-04-10 07:34:11 +00:00
2021-07-09 22:53:28 +00:00
Run the following command to build and run SerenityOS:
2021-04-10 07:34:11 +00:00
```console
2021-07-14 17:34:29 +00:00
Meta/serenity.sh run
2020-05-06 15:40:06 +00:00
```
2021-07-09 22:53:28 +00:00
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.
2021-03-11 18:03:08 +00:00
2021-07-09 22:53:28 +00:00
Note that the `anon` user is able to become `root` without a password by default, as a development convenience.
2020-03-30 09:32:33 +00:00
To prevent this, remove `anon` from the `wheel` group and he will no longer be able to run `/bin/su` .
2021-10-19 17:56:16 +00:00
By default the `anon` user account's password is: `foo`
2021-07-09 22:53:28 +00:00
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.
2021-06-20 13:07:21 +00:00
2021-03-11 18:03:08 +00:00
## Ports
2021-01-30 19:09:42 +00:00
2021-07-09 22:53:28 +00:00
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.
2021-05-16 02:13:31 +00:00
2021-07-09 22:53:28 +00:00
## More information
2021-01-30 19:09:42 +00:00
2021-07-09 22:53:28 +00:00
At this point you should have a fully functioning VM for SerenityOS. The [advanced build instructions guide ](AdvancedBuildInstructions.md )
has more information for some less commonly used features of the build system.