blob: b883cf73eeb9cba2edfccc92ffc4d38f144099f2 [file] [log] [blame]
Heinrich Schuchardt70e38ee2020-09-05 10:58:53 +02001Building with GCC
2=================
3
4Dependencies
5------------
6
7For building U-Boot you need a GCC compiler for your host platform. If you
8are not building on the target platform you further need a GCC cross compiler.
9
10Debian based
11~~~~~~~~~~~~
12
13On Debian based systems the cross compiler packages are named
14gcc-<architecture>-linux-gnu.
15
16You could install GCC and the GCC cross compiler for the ARMv8 architecture with
17
18.. code-block:: bash
19
Heinrich Schuchardt40611912020-09-20 12:31:47 +020020 sudo apt-get install gcc gcc-aarch64-linux-gnu
Heinrich Schuchardt70e38ee2020-09-05 10:58:53 +020021
22Depending on the build targets further packages maybe needed
23
24.. code-block:: bash
25
26 sudo apt-get install bc bison build-essential coccinelle \
Heinrich Schuchardtc0b6f7d2021-08-01 23:29:20 +020027 device-tree-compiler dfu-util efitools flex gdisk graphviz imagemagick \
28 liblz4-tool libguestfs-tools libncurses-dev libpython3-dev libsdl2-dev \
Heinrich Schuchardt5f6efc32021-08-02 22:10:04 +020029 libssl-dev lz4 lzma lzma-alone openssl pkg-config python3 \
Heinrich Schuchardt2443fd72021-10-11 14:59:48 +020030 python3-coverage python3-pkg-resources python3-pycryptodome \
31 python3-pyelftools python3-pytest python3-sphinxcontrib.apidoc \
32 python3-sphinx-rtd-theme python3-virtualenv swig
Heinrich Schuchardt70e38ee2020-09-05 10:58:53 +020033
Heinrich Schuchardtc2067022020-09-20 12:01:30 +020034SUSE based
35~~~~~~~~~~
36
37On suse based systems the cross compiler packages are named
38cross-<architecture>-gcc<version>.
39
40You could install GCC and the GCC 10 cross compiler for the ARMv8 architecture
41with
42
43.. code-block:: bash
44
45 sudo zypper install gcc cross-aarch64-gcc10
46
47Depending on the build targets further packages maybe needed.
48
49.. code-block:: bash
50
51 zypper install bc bison flex gcc libopenssl-devel libSDL2-devel make \
52 ncurses-devel python3-devel python3-pytest swig
53
Heinrich Schuchardtbba1cc92022-01-11 01:37:01 +010054Alpine Linux
55~~~~~~~~~~~~
56
57For building U-Boot on Alpine Linux at least the following packages are needed:
58
59.. code-block:: bash
60
61 apk add alpine-sdk bc bison dtc flex linux-headers ncurses-dev \
Heinrich Schuchardt3280eaa2022-01-15 20:35:37 +010062 openssl-dev perl python3 py3-setuptools python3-dev sdl2-dev
Heinrich Schuchardtbba1cc92022-01-11 01:37:01 +010063
Heinrich Schuchardt70e38ee2020-09-05 10:58:53 +020064Prerequisites
65-------------
66
67For some boards you have to build prerequisite files before you can build
68U-Boot, e.g. for the some boards you will need to build the ARM Trusted Firmware
69beforehand. Please, refer to the board specific documentation
70:doc:`../board/index`.
71
72Configuration
73-------------
74
75Directory configs/ contains the template configuration files for the maintained
76boards following the naming scheme::
77
78 <board name>_defconfig
79
80These files have been stripped of default settings. So you cannot use them
81directly. Instead their name serves as a make target to generate the actual
82configuration file .config. For instance the configuration template for the
83Odroid C2 board is called odroid-c2_defconfig. The corresponding .config file
84is generated by
85
86.. code-block:: bash
87
88 make odroid-c2_defconfig
89
90You can adjust the configuration using
91
92.. code-block:: bash
93
94 make menuconfig
95
96Building
97--------
98
99When cross compiling you will have to specify the prefix of the cross-compiler.
100You can either specify the value of the CROSS_COMPILE variable on the make
101command line or export it beforehand.
102
103.. code-block:: bash
104
105 CROSS_COMPILE=<compiler-prefix> make
106
107Assuming cross compiling on Debian for ARMv8 this would be
108
109.. code-block:: bash
110
111 CROSS_COMPILE=aarch64-linux-gnu- make
112
113Build parameters
114~~~~~~~~~~~~~~~~
115
116A list of available parameters for the make command can be obtained via
117
118.. code-block:: bash
119
120 make help
121
122You can speed up compilation by parallelization using the -j parameter, e.g.
123
124.. code-block:: bash
125
126 CROSS_COMPILE=aarch64-linux-gnu- make -j$(nproc)
127
128Further important build parameters are
129
130* O=<dir> - generate all output files in directory <dir>, including .config
131* V=1 - verbose build
132
Simon Glass93b19652021-09-22 11:34:44 -0600133Devicetree compiler
134~~~~~~~~~~~~~~~~~~~
135
136Boards that use `CONFIG_OF_CONTROL` (i.e. almost all of them) need the
137devicetree compiler (dtc). Those with `CONFIG_PYLIBFDT` need pylibfdt, a Python
138library for accessing devicetree data. Suitable versions of these are included
139in the U-Boot tree in `scripts/dtc` and built automatically as needed.
140
141To use the system versions of these, use the DTC parameter, for example
142
143.. code-block:: bash
144
145 DTC=/usr/bin/dtc make
146
147In this case, dtc and pylibfdt are not built. The build checks that the version
148of dtc is new enough. It also makes sure that pylibfdt is present, if needed
149(see `scripts_dtc` in the Makefile).
150
151Note that the :doc:`tools` are always built with the included version of libfdt
152so it is not possible to build U-Boot tools with a system libfdt, at present.
153
Heinrich Schuchardt70e38ee2020-09-05 10:58:53 +0200154Other build targets
155~~~~~~~~~~~~~~~~~~~
156
157A list of all make targets can be obtained via
158
159.. code-block:: bash
160
161 make help
162
163Important ones are
164
165* clean - remove most generated files but keep the configuration
166* mrproper - remove all generated files + config + various backup files
167
168Installation
169------------
170
171The process for installing U-Boot on the target device is device specific.
172Please, refer to the board specific documentation :doc:`../board/index`.