blob: c51b3e73b837e5696b8b3cda1fb7037a0ef34523 [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 \
27 device-tree-compiler dfu-util efitools flex gdisk liblz4-tool \
28 libguestfs-tools libncurses-dev libpython3-dev libsdl2-dev libssl-dev \
29 lzma-alone openssl python3 python3-coverage python3-pyelftools \
30 python3-pytest python3-sphinxcontrib.apidoc python3-sphinx-rtd-theme swig
31
Heinrich Schuchardtc2067022020-09-20 12:01:30 +020032SUSE based
33~~~~~~~~~~
34
35On suse based systems the cross compiler packages are named
36cross-<architecture>-gcc<version>.
37
38You could install GCC and the GCC 10 cross compiler for the ARMv8 architecture
39with
40
41.. code-block:: bash
42
43 sudo zypper install gcc cross-aarch64-gcc10
44
45Depending on the build targets further packages maybe needed.
46
47.. code-block:: bash
48
49 zypper install bc bison flex gcc libopenssl-devel libSDL2-devel make \
50 ncurses-devel python3-devel python3-pytest swig
51
Heinrich Schuchardt70e38ee2020-09-05 10:58:53 +020052Prerequisites
53-------------
54
55For some boards you have to build prerequisite files before you can build
56U-Boot, e.g. for the some boards you will need to build the ARM Trusted Firmware
57beforehand. Please, refer to the board specific documentation
58:doc:`../board/index`.
59
60Configuration
61-------------
62
63Directory configs/ contains the template configuration files for the maintained
64boards following the naming scheme::
65
66 <board name>_defconfig
67
68These files have been stripped of default settings. So you cannot use them
69directly. Instead their name serves as a make target to generate the actual
70configuration file .config. For instance the configuration template for the
71Odroid C2 board is called odroid-c2_defconfig. The corresponding .config file
72is generated by
73
74.. code-block:: bash
75
76 make odroid-c2_defconfig
77
78You can adjust the configuration using
79
80.. code-block:: bash
81
82 make menuconfig
83
84Building
85--------
86
87When cross compiling you will have to specify the prefix of the cross-compiler.
88You can either specify the value of the CROSS_COMPILE variable on the make
89command line or export it beforehand.
90
91.. code-block:: bash
92
93 CROSS_COMPILE=<compiler-prefix> make
94
95Assuming cross compiling on Debian for ARMv8 this would be
96
97.. code-block:: bash
98
99 CROSS_COMPILE=aarch64-linux-gnu- make
100
101Build parameters
102~~~~~~~~~~~~~~~~
103
104A list of available parameters for the make command can be obtained via
105
106.. code-block:: bash
107
108 make help
109
110You can speed up compilation by parallelization using the -j parameter, e.g.
111
112.. code-block:: bash
113
114 CROSS_COMPILE=aarch64-linux-gnu- make -j$(nproc)
115
116Further important build parameters are
117
118* O=<dir> - generate all output files in directory <dir>, including .config
119* V=1 - verbose build
120
121Other build targets
122~~~~~~~~~~~~~~~~~~~
123
124A list of all make targets can be obtained via
125
126.. code-block:: bash
127
128 make help
129
130Important ones are
131
132* clean - remove most generated files but keep the configuration
133* mrproper - remove all generated files + config + various backup files
134
135Installation
136------------
137
138The process for installing U-Boot on the target device is device specific.
139Please, refer to the board specific documentation :doc:`../board/index`.