This is an old revision of the document!
Build system setup
- Assuming a GNU/Linux environment, otherwise see alternative guides.
- Install
Gitto download the source code, and your distro's defaultbuild toolsmetapackage to do the cross-compilation process. - You may also need to install
Subversion (SVN)orMercurialto fetch the source-code for some feeds which are not available over Git. - Install other prerequisite packages, as indicated in the table and examples below.
- Unset environment variables like
SEDandGREP_OPTIONSand aliases/functions likewhich.
Prerequisites
This table contains the package name for each build prerequisite in different GNU/Linux and Unix like distributions.
- Bleeding edge distros like Arch Linux may fail to build base-files if
Cryptographically signed package listsinGlobal build settingsis enabled.
| Prerequisite | Debian | SUSE | Red Hat | macOS (via MacPorts) | Fedora | Arch | Gentoo |
|---|---|---|---|---|---|---|---|
| asciidoc | asciidoc | asciidoc | asciidoc | asciidoc | asciidoc | asciidoc | app-text/asciidoc |
| GNU Bash | bash | bash | bash | bash | bash | bash | app-shells/bash |
| GNU Binutils | binutils | binutils | binutils | binutils | binutils | binutils | sys-devel/binutils |
| bzip2 | bzip2 | bzip2 | bzip2 | bzip2 | bzip2 | bzip2 | app-arch/bzip2 |
| flex | flex | flex | flex | flex | flex | flex | sys-devel/flex |
| git | git-core | git-core | git | git-core | git | git | dev-vcs/git |
| GNU C++ Compiler | g++ | gcc-c++ | gcc-c++ | ? | gcc-c++ | gcc | sys-devel/gcc |
| GNU C Compiler | gcc | gcc | gcc | ? | gcc | gcc | sys-devel/gcc |
| GNU Time | ? | ? | ? | gtime | ? | time | sys-process/time |
| getopt | util-linux | util-linux | util-linux | getopt | util-linux | util-linux | sys-apps/util-linux |
| GNU awk | gawk | gawk | gawk | gawk | gawk | gawk | sys-apps/gawk |
| help2man | help2man | ? | ? | help2man | help2man | help2man | sys-apps/help2man |
| intltool-update | intltool | intltool | intltool | intltool | intltool | intltool | dev-util/intltool |
| libelf-dev | libelf-dev | ? | ? | libelf | elfutils-libelf-devel | libelf | virtual/libelf |
| libz, libz-dev | zlib1g-dev | zlib-devel | zlib-devel | zlib | zlib-devel | zlib | sys-libs/zlib |
| GNU make | make | make | make | gmake | make | make | sys-devel/make |
| ncurses | libncurses5-dev | ncurses-devel | ncurses-devel | ncurses | ncurses-devel | ncurses | sys-libs/ncurses |
| openssl/ssl.h | libssl-dev | libopenssl-devel | openssl-devel | openssl | openssl-devel | openssl | dev-libs/openssl |
| patch | patch | patch | patch | patchutils | patch | patch | sys-devel/patch |
| perl-ExtUtils-MakeMaker | perl-modules | perl-ExtUtils-MakeMaker | perl-ExtUtils-MakeMaker | p5-extutils-makemaker | perl-ExtUtils-MakeMaker | perl-extutils-makemaker | virtual/perl-ExtUtils-MakeMaker |
| perl-Thread-Queue | ? | ? | ? | ? | perl-Thread-Queue | ? | virtual/perl-Thread-Queue |
| python2-dev | python2-dev | python-devel | ? | python27 | ? | python2 | dev-lang/python:2 |
| ? | python3-dev | ? | ? | python310 | ? | ? | ? |
| unzip | unzip | unzip | unzip | unzip | unzip | unzip | app-arch/unzip |
| GNU Wget | wget | wget | wget | wget | wget | wget | net-misc/wget |
| xgettext | gettext | gettext-tools | gettext | gettext | gettext | gettext | sys-devel/gettext |
| xsltproc | xsltproc | libxslt-tools | ? | libxslt | libxslt | libxslt | dev-libs/libxslt |
| zlib, zlib-static | zlib1g-dev | zlib-devel-static | zlib-devel | zlib-devel | zlib-devel,zlib-static | zlib | sys-libs/zlib (USE=static-libs) |
Package prerequisites
Unfortunately not all dependencies are checked by make config, especially for packages.
You may encounter compile errors because you need a specific library in your system, and the only way is to search the missing library from the compiler error log and see what package contains it in your own distro.
The following table is a partial list of such dependencies:
| Package | Prerequisite | Debian | SUSE | Red Hat | macOS (via MacPorts) | Fedora | Arch | Gentoo |
|---|---|---|---|---|---|---|---|---|
| boost | bjam / boost-jam | libboost-dev | boost-jam boost-build | boost-jam | boost | dev-util/boost-build | ||
| intltool | [Perl] XML::Parser | libxml-parser-perl | perl-XML-Parser | p5.28-xml-parser p5.30-xml-parser | perl-XML-Parser | intltool | dev-perl/XML-Parser | |
| libftdi | libusb-config | libusb-dev | libusb | libusb-devel | libusb | dev-libs/libusb-compat | ||
| lilo | as86,ld86 | bin86 | dev86 | bin86 | sys-devel/bin86 | |||
| lilo | bcc | bcc | dev86 | aur/bcc | sys-devel/dev86 | |||
| lilo | uudecode | sharutils | sharutils | sharutils | sharutils | app-arch/sharutils | ||
| luajit | x86 g++ libs on amd64 hosts | gcc-multilib | ||||||
| classpath | javac, gcj | openjdk-7-jdk | openjdk7-zulu | java-1.8.0-openjdk-devel | jdk7-openjdk | dev-java/oracle-jdk-bin, sys-devel/gcc[gcj], and one (or both) of dev-java/icedtea-bin:7 and dev-java/icedtea:7 | ||
| mac80211 | b43-fwcutter | cutter | b43-fwcutter | b43-fwcutter | net-wireless/b43-fwcutter | |||
| jamvm | zip | zip | zip | app-arch/zip |
Linux distributions
Distribution-specific instructions.
Alpine
apk add asciidoc bash bc binutils bzip2 cdrkit coreutils diffutils \ findutils flex g++ gawk gcc gettext git grep intltool libxslt \ linux-headers make ncurses-dev openssl-dev patch perl python2-dev \ python3-dev rsync tar unzip util-linux wget zlib-dev
Arch / Manjaro
Arch users may install the openwrt-devel meta-package from the AUR or alternatively, manually install the build dependencies as follows:
# Essential prerequisites pacman -S --needed base-devel autoconf automake bash binutils bison \ bzip2 fakeroot file findutils flex gawk gcc gettext git grep groff \ gzip libelf libtool libxslt m4 make ncurses openssl patch pkgconf \ python rsync sed texinfo time unzip util-linux wget which zlib # Optional prerequisites, depend on the package selection pacman -S --needed asciidoc help2man intltool perl-extutils-makemaker
CentOS / Fedora
sudo dnf --setopt install_weak_deps=False --skip-broken install \ bash-completion bzip2 gcc gcc-c++ git make ncurses-devel patch \ rsync tar unzip wget which diffutils python2 python3 perl-base \ perl-Data-Dumper perl-File-Compare perl-File-Copy perl-FindBin \ perl-Thread-Queue
Debian / Ubuntu
sudo apt update sudo apt install build-essential ccache ecj fastjar file g++ gawk \ gettext git java-propose-classpath libelf-dev libncurses5-dev \ libncursesw5-dev libssl-dev python python2.7-dev python3 unzip wget \ python3-distutils python3-setuptools python3-dev rsync subversion \ swig time xsltproc zlib1g-dev
Gentoo
echo \ app-arch/{bzip2,sharutils,unzip,zip} sys-process/time \ app-text/asciidoc \ dev-libs/{libusb-compat,libxslt,openssl} dev-util/intltool \ dev-vcs/{git,mercurial} net-misc/{rsync,wget} \ sys-apps/util-linux sys-devel/{bc,bin86,dev86} \ sys-libs/{ncurses,zlib} virtual/perl-ExtUtils-MakeMaker \ | sed "s/\s/\n/g" \ | sort \ | sudo tee /etc/portage/sets/openwrt-prerequisites \ && sudo emerge -DuvNa "@openwrt-prerequisites"
openSUSE
sudo zypper install --no-recommends asciidoc bash bc binutils bzip2 \ fastjar flex gawk gcc gcc-c++ gettext-tools git git-core intltool \ libopenssl-devel libxslt-tools make mercurial ncurses-devel patch \ perl-ExtUtils-MakeMaker python-devel rsync sdcc unzip util-linux \ wget zlib-devel
Void
sudo xbps-install -Su asciidoc bash bc binutils bzip2 cdrtools \ coreutils diffutils findutils flex gawk gcc gettext git grep intltool \ libxslt linux-headers make ncurses-devel openssl-devel patch perl \ pkg-config python-devel python3-devel rsync tar unzip util-linux \ wget zlib-devel