aboutsummaryrefslogtreecommitdiff
path: root/doc/build/gcc.rst
blob: c51b3e73b837e5696b8b3cda1fb7037a0ef34523 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
Building with GCC
=================

Dependencies
------------

For building U-Boot you need a GCC compiler for your host platform. If you
are not building on the target platform you further need  a GCC cross compiler.

Debian based
~~~~~~~~~~~~

On Debian based systems the cross compiler packages are named
gcc-<architecture>-linux-gnu.

You could install GCC and the GCC cross compiler for the ARMv8 architecture with

.. code-block:: bash

    sudo apt-get install gcc gcc-aarch64-linux-gnu

Depending on the build targets further packages maybe needed

.. code-block:: bash

    sudo apt-get install bc bison build-essential coccinelle \
      device-tree-compiler dfu-util efitools flex gdisk liblz4-tool \
      libguestfs-tools libncurses-dev libpython3-dev libsdl2-dev libssl-dev \
      lzma-alone openssl python3 python3-coverage python3-pyelftools \
      python3-pytest python3-sphinxcontrib.apidoc python3-sphinx-rtd-theme swig

SUSE based
~~~~~~~~~~

On suse based systems the cross compiler packages are named
cross-<architecture>-gcc<version>.

You could install GCC and the GCC 10 cross compiler for the ARMv8 architecture
with

.. code-block:: bash

    sudo zypper install gcc cross-aarch64-gcc10

Depending on the build targets further packages maybe needed.

.. code-block:: bash

    zypper install bc bison flex gcc libopenssl-devel libSDL2-devel make \
      ncurses-devel python3-devel python3-pytest swig

Prerequisites
-------------

For some boards you have to build prerequisite files before you can build
U-Boot, e.g. for the some boards you will need to build the ARM Trusted Firmware
beforehand. Please, refer to the board specific documentation
:doc:`../board/index`.

Configuration
-------------

Directory configs/ contains the template configuration files for the maintained
boards following the naming scheme::

    <board name>_defconfig

These files have been stripped of default settings. So you cannot use them
directly. Instead their name serves as a make target to generate the actual
configuration file .config. For instance the configuration template for the
Odroid C2 board is called odroid-c2_defconfig. The corresponding .config file
is generated by

.. code-block:: bash

    make odroid-c2_defconfig

You can adjust the configuration using

.. code-block:: bash

    make menuconfig

Building
--------

When cross compiling you will have to specify the prefix of the cross-compiler.
You can either specify the value of the CROSS_COMPILE variable on the make
command line or export it beforehand.

.. code-block:: bash

    CROSS_COMPILE=<compiler-prefix> make

Assuming cross compiling on Debian for ARMv8 this would be

.. code-block:: bash

    CROSS_COMPILE=aarch64-linux-gnu- make

Build parameters
~~~~~~~~~~~~~~~~

A list of available parameters for the make command can be obtained via

.. code-block:: bash

    make help

You can speed up compilation by parallelization using the -j parameter, e.g.

.. code-block:: bash

    CROSS_COMPILE=aarch64-linux-gnu- make -j$(nproc)

Further important build parameters are

* O=<dir> - generate all output files in directory <dir>, including .config
* V=1 - verbose build

Other build targets
~~~~~~~~~~~~~~~~~~~

A list of all make targets can be obtained via

.. code-block:: bash

    make help

Important ones are

* clean - remove most generated files but keep the configuration
* mrproper - remove all generated files + config + various backup files

Installation
------------

The process for installing U-Boot on the target device is device specific.
Please, refer to the board specific documentation :doc:`../board/index`.