Building from source¶
You’re going to need the following tools to get started:
- gcc or clang
- meson
- ninja
- pkg-config
- sphinx-build*
And the following dependencies:
- cmocka [1]
- linux-headers [2]
- libpci [2]
- libusb1 [2]
- libftdi1 [2]
- libjaylink [2]
- NI-845x driver & library package [3]
[1] | optional, for building unit testing
|
[2] | (1, 2, 3, 4, 5) optional, depending on the selected programmer
|
[3] | optional, proprietary and Windows only. (See Windows build instructions)
|
If you are cross compiling, install the dependencies for your target.
TL;DR¶
meson setup builddir
meson compile -C builddir
meson install -C builddir
Installing dependencies¶
- Linux
- Debian / Ubuntu
apt-get install -y \ gcc meson ninja-build pkg-config python3-sphinx \ libcmocka-dev libpci-dev libusb-1.0-0-dev libftdi1-dev libjaylink-dev
- ArchLinux / Manjaro
pacman -S --noconfirm \ gcc meson ninja pkg-config python-sphinx cmocka \ pciutils libusb libftdi libjaylink
- openSUSE / SUSE
zypper install -y \ gcc meson ninja pkg-config python3-Sphinx \ libcmocka-devel pciutils-devel libusb-1_0-devel libftdi1-devel libjaylink-devel
- NixOS / nixpkgs
- There is a
shell.nix
underscripts/
nix-shell -p \ gcc meson ninja pkg-config sphinx \ cmocka pciutils libusb1 libftdi1 libjaylink
- There is a
- Alpine Linux
apk add \ build-base meson ninja pkgconf py3-sphinx \ cmocka-dev pciutils-dev libusb-dev libjaylink-dev
- Windows
- MSYS2
Install MSYS2 and ensure it is fully updated.
libpci
is not available through the package manager and pci based programmer are not supported on Windows.ni845x_spi
is only available with the proprietary library from National Instruments. Download and install the driver from ni.com and build flashrom for 32-bit. Add-Dprogrammer=ni845x_spi
to your meson configuration.
In the MINGW64 shell run:
pacman -Sy \ mingw-w64-x86_64-gcc mingw-w64-x86_64-meson mingw-w64-x86_64-ninja mingw-w64-x86_64-pkg-config mingw-w64-x86_64-python-sphinx \ mingw-w64-x86_64-cmocka mingw-w64-x86_64-libusb mingw-w64-x86_64-libftdi mingw-w64-x86_64-libjaylink-git
For building flashrom as 32-bit application, use the MSYS2 MINGW32 shell and run:
pacman -Sy \ mingw-w64-i686-gcc mingw-w64-i686-meson mingw-w64-i686-ninja mingw-w64-i686-pkg-config mingw-w64-i686-python-sphinx \ mingw-w64-i686-cmocka mingw-w64-i686-libusb mingw-w64-i686-libftdi mingw-w64-i686-libjaylink-git
- MacOS
- Homebrew
libpci
is not available through the package managerlibjaylink
is not available through the package manager
brew install \ meson ninja pkg-config sphinx-doc \ libusb libftdi
- BSD
- FreeBSD / DragonFlyBSD
libusb1
is part of the systemlibjaylink
is not available through the package manager
pkg install \ meson ninja pkgconf py39-sphinx \ cmocka libpci libftdi1
- OpenBSD
libjaylink
is not available through the package manager
pkg_add \ meson ninja pkg-config py39-sphinx\ cmocka pciutils libusb1 libftdi1
- NetBSD
libjaylink
is not available through the package manager- note: https://www.cambus.net/installing-ca-certificates-on-netbsd/
pkgin install \ meson ninja pkg-config py39-sphinx \ cmocka pciutils libusb1 libftdi1
- OpenIndiana (Illumos, Solaris, SunOS)
libpci
missing, pciutils is build without itlibftdi1
&libjaylink
are not available through the package manager- TODO: replace
build-essential
with the default compiler
pkg install build-essential meson ninja cmocka libusb-1
- DJGPP-DOS
-
Run the following commands in the the pciutils directory to build libpci for DOS.Replace
<DOS_INSTALL_ROOT>
with your cross-compile install root.make install-lib \ ZLIB=no \ DNS=no \ HOST=i386-djgpp-djgpp \ CROSS_COMPILE=i586-pc-msdosdjgpp- \ STRIP="--strip-program=i586-pc-msdosdjgpp-strip -s" \ PREFIX=<DOS_INSTALL_ROOT>
Point pkg-config to the
<DOS_INSTALL_ROOT>
export PKG_CONFIG_SYSROOT=<DOS_INSTALL_ROOT>
- To compile flashrom use the
meson_cross/i586_djgpp_dos.txt
cross-file - You will need CWSDPMI.EXE to run flashrom
- To compile flashrom use the
- libpayload
Configuration¶
In the flashrom repository run:
meson setup [builtin options] [flashrom options] <builddir>
Mesons [builtin options]
can be displayed with meson setup --help
.
The flashrom specific options can be found in meson_options.txt
in the top-level
directory of flashrom and are used like in cmake with -Doption=value
Run meson configure
to display all configuration options.
Configuration for Crossbuilds¶
Flashrom specific cross-files can be found in the meson_cross
folder.
To use them run:
meson setup --cross-file <path/to/crossfile> [builtin options] [flashrom options] <builddir>
The options are the same as the normal configuration options. For more information see https://mesonbuild.com/Cross-compilation.html
Update configuration¶
If you want to change your initial configuration for some reason (for example you discovered that a programmer is missing), run:
meson configure [updated builtin options] [updated flashrom options] <builddir>
Unit Tests¶
To execute the unit tests run:
meson test -C <builddir>
You will get a summary of the unit test results at the end.
Code coverage¶
- gcov
Due to a bug in lcov, the html file will only be correct if lcov is not installed and gcovr is installed. See https://github.com/linux-test-project/lcov/issues/168 and https://github.com/mesonbuild/meson/issues/6747
To create the coverage target add
-Db_coverage=true
to your build configuration. After executing the tests, you can runninja -C <builddir> coverage
to generate the coverage report.
- lcov / llvm
https://clang.llvm.org/docs/SourceBasedCodeCoverage.html Make sure that you are using clang as compiler, e.g. by setting CC=clang during configuration. Beside that you need to add
-Dllvm_cov=enabled
to your build configurationCC=clang meson setup -Dllvm_cov=enable <builddir> meson test -C <builddir> ninja -C <builddir> llvm-cov-tests
For additional information see the meson documentation
Installing¶
To install flashrom and documentation, run:
meson install -C <builddir>
This will install flashrom under the PREFIX selected in the configuration phase. Default is /usr/local
.
To install into a different directory use DESTDIR, like this:
DESTDIR=/your/destination/directory meson install -C <your_build_dir>
You can also set the prefix during configuration with:
meson setup --prefix <DESTDIR> <your_build_dir>
Create distribution package¶
To create a distribution tarball from your builddir
, run:
meson dist -C <builddir>
This will collect all git tracked files and pack them into an archive.
Current flashrom version is in the VERSION file. To release a new flashrom version you need to change VERSION file and tag the changing commit.