Meta: Updated BuildInstructions.md for the cmake update

List of changes:
- The cmake command has been moved away from the main build instructions since
  the BuildIt script executes it automatically
- The ninja install has been clarified to take the BuildIt script into account
  and explain that the folder needs to be cleaned before executing cmake
- The ports instructions have been updated to use the make commands
- "brew install bash" has been added to the macOS prerequisites as per #2132
- The build instructions headers have been indented to group the prerequisites
  together
- The build instructions code snippets have been standardized into code blocks
- Fixed a typo
This commit is contained in:
DexesTTP 2020-05-15 09:00:12 +02:00 committed by Andreas Kling
parent c715b13ffc
commit 5386508119
Notes: sideshowbarker 2024-07-19 06:38:57 +09:00

View file

@ -1,6 +1,8 @@
## SerenityOS build instructions ## SerenityOS build instructions
### Linux prerequisites ### Prerequisites
#### Linux prerequisites
Make sure you have all the dependencies installed: Make sure you have all the dependencies installed:
**Debian / Ubuntu** **Debian / Ubuntu**
@ -30,7 +32,7 @@ sudo apt-get install gcc-9 g++-9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 900 --slave /usr/bin/g++ g++ /usr/bin/g++-9 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 900 --slave /usr/bin/g++ g++ /usr/bin/g++-9
``` ```
### macOS prerequisites #### macOS prerequisites
Make sure you have all the dependencies installed: Make sure you have all the dependencies installed:
```bash ```bash
brew install coreutils brew install coreutils
@ -43,6 +45,7 @@ brew install m4
brew install autoconf brew install autoconf
brew install libtool brew install libtool
brew install automake brew install automake
brew install bash
brew cask install osxfuse brew cask install osxfuse
Toolchain/BuildFuseExt2.sh Toolchain/BuildFuseExt2.sh
``` ```
@ -54,9 +57,10 @@ Notes:
- `flock` command can also be installed with `brew install util-linux` but in that case you will need to add it to `$PATH` - `flock` command can also be installed with `brew install util-linux` but in that case you will need to add it to `$PATH`
- qemu is needed to run the compiled OS image. You can also build it using the `BuildQemu.sh` script - qemu is needed to run the compiled OS image. You can also build it using the `BuildQemu.sh` script
- osxfuse, e2fsprogs, m4, autoconf, automake, libtool and `BuildFuseExt2.sh` are needed if you want to build the root filesystem disk image natively on macOS. This allows mounting an EXT2 fs and also installs commands like `mke2fs` that are not available on stock macOS. - osxfuse, e2fsprogs, m4, autoconf, automake, libtool and `BuildFuseExt2.sh` are needed if you want to build the root filesystem disk image natively on macOS. This allows mounting an EXT2 fs and also installs commands like `mke2fs` that are not available on stock macOS.
- bash is needed because the default version installed on macOS doesn't support globstar
- If you install some commercial EXT2 macOS fs handler instead of osxfuse and fuse-ext2, you will need to `brew install e2fsprogs` to obtain `mke2fs` anyway. - If you install some commercial EXT2 macOS fs handler instead of osxfuse and fuse-ext2, you will need to `brew install e2fsprogs` to obtain `mke2fs` anyway.
### OpenBSD prerequisites #### OpenBSD prerequisites
``` ```
pkg_add bash gmp gcc git flock gmake sudo pkg_add bash gmp gcc git flock gmake sudo
``` ```
@ -64,19 +68,29 @@ pkg_add bash gmp gcc git flock gmake sudo
### Build ### Build
> Before starting, make sure that you have configured your global identity for git, or the first script will fail after running for a bit. > Before starting, make sure that you have configured your global identity for git, or the first script will fail after running for a bit.
Go into the `Toolchain/` directory and run the **BuildIt.sh** script. Go into the `Toolchain/` directory and run the **BuildIt.sh** script:
```bash
Once you've built the toolchain, create a directory for the build to live in (for example, `Build/`), and run the CMake build: $ cd Toolchain
$ ./BuildIt.sh
``` ```
$ mkdir Build && cd Build
$ cmake .. Building the toolchain will also automatically create a `Build/` directory for the build to live in, and build cmake inside that directory.
Once the toolchain and cmake have been built, go into the `Build/` directory and run the `make` and `make install` commands:
```bash
$ cd ..
$ cd Build
$ make $ make
$ make install $ make install
``` ```
This will compile all of SerenityOS and install the built files into `Root/` inside the build tree. `make install` actually pulls in the regular `make` (`make all`) automatically, so there isn't really a need to run it exlicitly. You may also want ask `make` to build things in parallel by using `-j`, optionally specifying the maximum number of jobs to run. This will compile all of SerenityOS and install the built files into `Root/` inside the build tree. `make install` actually pulls in the regular `make` (`make all`) automatically, so there isn't really a need to run it explicitly. You may also want ask `make` to build things in parallel by using `-j`, optionally specifying the maximum number of jobs to run.
Now to build a disk image, run `make image`, and if nothing breaks too much, take it for a spin by using `make run`. Now to build a disk image, run `make image`, and if nothing breaks too much, take it for a spin by using `make run`.
```bash
$ make image
$ make run
```
Note that the `anon` user is able to become `root` without password by default, as a development convenience. Note that the `anon` user is able to become `root` without 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`. To prevent this, remove `anon` from the `wheel` group and he will no longer be able to run `/bin/su`.
@ -87,7 +101,7 @@ Bare curious users may even consider sourcing suitable hardware to [install Sere
Later on, when you `git pull` to get the latest changes, there's no need to rebuild the toolchain. You can simply run `make install`, `make image`, `make run` again. CMake will only rebuild those parts that have been updated. Later on, when you `git pull` to get the latest changes, there's no need to rebuild the toolchain. You can simply run `make install`, `make image`, `make run` again. CMake will only rebuild those parts that have been updated.
You may also want to replace `make` with `ninja` in the above (use `cmake .. -G Ninja` when configuring the build) for some additional build speed benefits. You may also want to replace `make` with `ninja` in the above commands for some additional build speed benefits. To do this, go to an empty directory at the root and call `cmake .. -G Ninja` inside that directory. You might either create a new directory or reuse the existing `Build` directory after cleaning it.
#### Ports #### Ports
To add a package from the ports collection to Serenity, for example curl, go into `Ports/curl/` and run **./package.sh**. The sourcecode for the package will be downloaded and the package will be built. After that, run **./sync.sh** from the `Kernel/` directory to update the disk image. The next time you start Serenity with **./run**, `curl` will be available. To add a package from the ports collection to Serenity, for example curl, go into `Ports/curl/` and run **./package.sh**. The sourcecode for the package will be downloaded and the package will be built. After that, run **make image** from the `Build/` directory to update the disk image. The next time you start Serenity with **make run**, `curl` will be available.