lbwww/site/docs/build/index.md

302 lines
8.8 KiB
Markdown
Raw Normal View History

2021-05-18 12:21:48 +00:00
---
title: Build from source
x-toc-enable: true
...
libreboot's build system is named `lbmk`, short for `Libreboot Make`, and this
2021-05-18 12:21:48 +00:00
document describes how to use it. With this guide, you can know how to compile
libreboot from the available source code.
This version, if hosted live on libreboot.org, assumes that you are using
the `lbmk` git repository, which
2021-05-18 12:21:48 +00:00
you can download using the instructions on [the code review page](../../git.md).
If you're using a release archive of libreboot, please refer to the
documentation included with *that* release. libreboot releases are only intended
2021-05-18 12:21:48 +00:00
as *snapshots*, not for development. For proper development, you should always
be working directly in the libreboot git repository.
2021-05-18 12:21:48 +00:00
The following document describes how `lbmk` works, and how you can make changes
to it: [libreboot maintenance manual](../maintain/)
2021-05-18 12:21:48 +00:00
Git
===
Libreboot's build system uses Git, extensively. You should perform the steps
below, *even if you're using a release archive*.
Before you use the build system, please know: the build system itself uses
Git extensively, when downloading software like coreboot and patching it.
You should make sure to initialize your Git properly, before you begin or else
the build system will not work properly. Do this:
2023-01-08 01:22:04 +00:00
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
Change the name and email address to whatever you want, when doing this.
You may also want to follow more of the steps here:
<https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup>
Python
======
Python2 is unused by lbmk or anything that it pulls down as modules. You
should ensure that the `python` command runs python 3, on your system.
2021-05-18 12:21:48 +00:00
GNU Make
========
libreboot Make includes a file called `Makefile`. You can still use
the `lbmk` build system directly, or you can use GNU Make. The `Makefile`
simply runs `lbmk` commands. However, using `lbmk` directly will offer you
2021-05-18 12:21:48 +00:00
much more flexibility; for example, the Makefile currently cannot build single
ROM images (it just builds all of them, for all boards).
You must ensure that all build dependencies are installed. If you're running
Ubuntu or similar distribution (Debian, Trisquel, etc) you can do this:
2023-01-08 01:22:04 +00:00
sudo make install-dependencies-ubuntu
2021-05-18 12:21:48 +00:00
One exists specifically for Debian:
2023-01-08 01:22:04 +00:00
sudo make install-dependencies-debian
Another exists for Arch:
2023-01-08 01:22:04 +00:00
sudo make install-dependencies-arch
2021-05-18 12:21:48 +00:00
Now, simply build the coreboot images like so:
2023-01-08 01:22:04 +00:00
make
2021-05-18 12:21:48 +00:00
This single command will build ROM images for *every* board integrated in
libreboot. If you only wish to build a limited set, you can use `lbmk` directly:
2021-05-18 12:21:48 +00:00
2023-01-08 01:22:04 +00:00
./build boot roms x200_8mb
2021-05-18 12:21:48 +00:00
You can specify more than one argument:
2023-01-08 01:22:04 +00:00
./build boot roms x200_8mb x60
2021-05-18 12:21:48 +00:00
ROM images appear under the newly created `bin/` directory in the build system.
For other commands, simply read the `Makefile` in your favourite text editor.
The `Makefile` is simple, because it merely runs `lbmk` commands, so it's very
2021-05-18 12:21:48 +00:00
easy to know what commands are available by simply reading it.
Standard `clean` command available (cleans all modules except `crossgcc`):
2023-01-08 01:22:04 +00:00
make clean
2021-05-18 12:21:48 +00:00
To clean your `crossgcc` builds:
2023-01-08 01:22:04 +00:00
make crossgcc-clean
2021-05-18 12:21:48 +00:00
To build release archives:
2023-01-08 01:22:04 +00:00
make release
2021-05-18 12:21:48 +00:00
Build without using GNU Make
============================
The `Makefile` is included just for *compatibility*, so that someone who
instictively types `make` will get a result.
Actual development/testing is always done using `lbmk` directly, and this
2021-05-18 12:21:48 +00:00
includes when building from source. Here are some instructions to get you
started:
First, install build dependencies
---------------------------------
libreboot includes a script that automatically installs apt-get dependencies
2021-05-18 12:21:48 +00:00
in Ubuntu 20.04. It works well in other apt-get distros (such as Trisquel and
Debian):
2023-01-08 01:22:04 +00:00
sudo ./build dependencies ubuntu2004
2021-05-18 12:21:48 +00:00
Separate scripts also exist:
2023-01-08 01:22:04 +00:00
sudo ./build dependencies debian
2023-01-08 01:22:04 +00:00
sudo ./build dependencies arch
2023-01-08 01:22:04 +00:00
sudo ./build dependencies void
2021-11-21 16:25:52 +00:00
Technically, any GNU+Linux distribution can be used to build libreboot.
2021-05-18 12:21:48 +00:00
However, you will have to write your own script for installing build
dependencies.
2023-01-08 01:22:04 +00:00
libreboot Make (lbmk) automatically runs all necessary commands; for
example, `./build payload grub` will automatically run `./build module grub`
if the required utilities for GRUB are not built, to produce payloads.
2021-05-18 12:21:48 +00:00
As a result, you can now (after installing the correct build dependencies) run
just a single command, from a fresh Git clone, to build the ROM images:
2023-01-08 01:22:04 +00:00
./build boot roms
2021-05-18 12:21:48 +00:00
or even just build specific ROM images, e.g.:
2023-01-08 01:22:04 +00:00
./build boot roms x60
2021-05-18 12:21:48 +00:00
If you wish to build payloads, you can also do that. For example:
2023-01-08 01:22:04 +00:00
./build payload grub
2021-05-18 12:21:48 +00:00
2023-01-08 01:22:04 +00:00
./build payload seabios
2021-05-18 12:21:48 +00:00
2023-01-08 01:22:04 +00:00
./build payload u-boot qemu_x86_12mb
2021-05-18 12:21:48 +00:00
Previous steps will be performed automatically. However, you can *still* run
individual parts of the build system manually, if you choose. This may be
beneficial when you're making changes, and you wish to test a specific part of
lbmk.
2021-05-18 12:21:48 +00:00
Therefore, if you only want to build ROM images, just do the above. Otherwise,
please continue reading!
2022-11-13 21:12:15 +00:00
Optional: extract binary blobs
------------------------------
Some boards, including all sandy/ivybridge boards require nonfree blobs which cannot be included in libreboot.
For boards requiring these blobs, libreboot will attempt to download the blobs itself.
2022-11-13 21:12:15 +00:00
If your board does not have blob sources available, then you must extract them from a backup of you vendor rom.
You must point libreboot to the backup rom and tell the build system which board you want to extract blobs for.
2022-11-13 21:12:15 +00:00
For example, to extract blobs for the t440p you must run:
2022-11-14 02:41:34 +00:00
./blobutil extract t440p_12mb /path/to/12mb_backup.rom
2022-11-13 21:12:15 +00:00
You can then build the rom for this board as normal:
./build boot roms t440p_12mb
2021-05-18 12:21:48 +00:00
Second, download all of the required software components
--------------------------------------------------------
2021-05-18 13:08:27 +00:00
If you didn't simply run `./build boot roms` (with or without extra
2021-05-18 12:21:48 +00:00
arguments), you can still perform the rest of the build process manually. Read
on! You can read about all available scripts in `lbmk` by reading
the [libreboot maintenance manual](../maintain/); lbmk is designed to be modular
2021-05-18 12:21:48 +00:00
which means that each script *can* be used on its own (if that's not true, for
any script, it's a bug that should be fixed).
It's as simple as that:
2023-01-08 01:22:04 +00:00
./download all
2021-05-18 12:21:48 +00:00
The above command downloads all modules defined in the libreboot build system.
2021-05-18 12:21:48 +00:00
However, you can download modules individually.
This command shows you the list of available modules:
2023-01-08 01:22:04 +00:00
./download list
2021-05-18 12:21:48 +00:00
Example of downloading an individual module:
2023-01-08 01:22:04 +00:00
./download coreboot
2021-05-18 12:21:48 +00:00
2023-01-08 01:22:04 +00:00
./download seabios
2021-05-18 12:21:48 +00:00
2023-01-08 01:22:04 +00:00
./download grub
2021-05-18 12:21:48 +00:00
2023-01-08 01:22:04 +00:00
./download flashrom
2021-05-18 12:21:48 +00:00
2023-01-08 01:22:04 +00:00
./download u-boot
2021-05-18 12:21:48 +00:00
Third, build all of the modules:
--------------------------------
Building a module means that it needs to have already been downloaded.
Currently, the build system does not automatically do pre-requisite steps
such as this, so you must verify this yourself.
Again, very simple:
2023-01-08 01:22:04 +00:00
./build module all
2021-05-18 12:21:48 +00:00
This builds every module defined in the libreboot build system, but you can
2021-05-18 12:21:48 +00:00
build modules individually.
The following command lists available modules:
2023-01-08 01:22:04 +00:00
./build module list
2021-05-18 12:21:48 +00:00
Example of building specific modules:
2023-01-08 01:22:04 +00:00
./build module grub
2021-05-18 12:21:48 +00:00
2023-01-08 01:22:04 +00:00
./build module seabios
2021-05-18 12:21:48 +00:00
2023-01-08 01:22:04 +00:00
./build module flashrom
2021-05-18 12:21:48 +00:00
Commands are available to *clean* a module, which basically runs make-clean.
You can list these commands:
2023-01-08 01:22:04 +00:00
./build clean list
2021-05-18 12:21:48 +00:00
Clean all modules like so:
2023-01-08 01:22:04 +00:00
./build clean all
2021-05-18 12:21:48 +00:00
Example of cleaning specific modules:
2023-01-08 01:22:04 +00:00
./build clean grub
2021-05-18 12:21:48 +00:00
2023-01-08 01:22:04 +00:00
./build clean cbutils
2021-05-18 12:21:48 +00:00
Fourth, build all of the payloads:
---------------------------------
Very straight forward:
2023-01-08 01:22:04 +00:00
./build payload all
2021-05-18 12:21:48 +00:00
You can list available payloads like so:
2023-01-08 01:22:04 +00:00
./build payload list
2021-05-18 12:21:48 +00:00
Example of building specific payloads:
2023-01-08 01:22:04 +00:00
./build payload grub
2021-05-18 12:21:48 +00:00
2023-01-08 01:22:04 +00:00
./build payload seabios
2021-05-18 12:21:48 +00:00
Each board has its own U-Boot build configuration in `lbmk` under
`resources/u-boot`. To build U-Boot payloads, you need to specify the
target board and maybe a cross compiler for its CPU architecture. These
are handled automatically when building ROM images, but for example:
2023-01-08 01:22:04 +00:00
./build payload u-boot qemu_x86_12mb # on x86 hosts
2023-01-08 01:22:04 +00:00
CROSS_COMPILE=aarch64-linux-gnu- ./build payload u-boot gru_kevin
2023-01-08 01:22:04 +00:00
CROSS_COMPILE=arm-linux-gnueabi- ./build payload u-boot veyron_speedy
2021-05-18 12:21:48 +00:00
The build-payload command is is a prerequsite for building ROM images.
Fifth, build the ROMs!
----------------------
Run this command:
2023-01-08 01:22:04 +00:00
./build boot roms
2021-05-18 12:21:48 +00:00
Each board has its own configuration in `lbmk` under `resources/coreboot/`
2021-05-18 12:21:48 +00:00
which specifies which payloads are supported.
By default, all ROM images are built, for all boards. If you wish to build just
a specific board, you can specify the board name based on the directory name
for it under `resources/coreboot/`. For example:
2023-01-08 01:22:04 +00:00
./build boot roms x60
2021-05-18 12:21:48 +00:00
Board names, like above, are the same as the directory names for each board,
under `resources/coreboot/` in the build system.
That's it!
If all went well, ROM images should be available to you under bin/