1Building 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 20 sudo apt-get install gcc gcc-aarch64-linux-gnu 21 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 32SUSE 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 52Prerequisites 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`. 140