gcc.rst 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. Building with GCC
  2. =================
  3. Dependencies
  4. ------------
  5. For building U-Boot you need a GCC compiler for your host platform. If you
  6. are not building on the target platform you further need a GCC cross compiler.
  7. Debian based
  8. ~~~~~~~~~~~~
  9. On Debian based systems the cross compiler packages are named
  10. gcc-<architecture>-linux-gnu.
  11. You could install GCC and the GCC cross compiler for the ARMv8 architecture with
  12. .. code-block:: bash
  13. sudo apt-get install gcc gcc-aarch64-linux-gnu
  14. Depending on the build targets further packages maybe needed
  15. .. code-block:: bash
  16. sudo apt-get install bc bison build-essential coccinelle \
  17. device-tree-compiler dfu-util efitools flex gdisk graphviz imagemagick \
  18. liblz4-tool libgnutls28-dev libguestfs-tools libncurses-dev \
  19. libpython3-dev libsdl2-dev libssl-dev lz4 lzma lzma-alone openssl \
  20. pkg-config python3 python3-asteval python3-coverage python3-filelock \
  21. python3-pkg-resources python3-pycryptodome python3-pyelftools \
  22. python3-pytest python3-pytest-xdist python3-sphinxcontrib.apidoc \
  23. python3-sphinx-rtd-theme python3-subunit python3-testtools \
  24. python3-virtualenv swig uuid-dev
  25. SUSE based
  26. ~~~~~~~~~~
  27. On suse based systems the cross compiler packages are named
  28. cross-<architecture>-gcc<version>.
  29. You could install GCC and the GCC 10 cross compiler for the ARMv8 architecture
  30. with
  31. .. code-block:: bash
  32. sudo zypper install gcc cross-aarch64-gcc10
  33. Depending on the build targets further packages maybe needed.
  34. .. code-block:: bash
  35. zypper install bc bison flex gcc libopenssl-devel libSDL2-devel make \
  36. ncurses-devel python3-devel python3-pytest swig
  37. Alpine Linux
  38. ~~~~~~~~~~~~
  39. For building U-Boot on Alpine Linux at least the following packages are needed:
  40. .. code-block:: bash
  41. apk add alpine-sdk bc bison dtc flex linux-headers ncurses-dev \
  42. openssl-dev perl python3 py3-setuptools python3-dev sdl2-dev
  43. Prerequisites
  44. -------------
  45. For some boards you have to build prerequisite files before you can build
  46. U-Boot, e.g. for the some boards you will need to build the ARM Trusted Firmware
  47. beforehand. Please, refer to the board specific documentation
  48. :doc:`../board/index`.
  49. Configuration
  50. -------------
  51. Directory configs/ contains the template configuration files for the maintained
  52. boards following the naming scheme::
  53. <board name>_defconfig
  54. These files have been stripped of default settings. So you cannot use them
  55. directly. Instead their name serves as a make target to generate the actual
  56. configuration file .config. For instance the configuration template for the
  57. Odroid C2 board is called odroid-c2_defconfig. The corresponding .config file
  58. is generated by
  59. .. code-block:: bash
  60. make odroid-c2_defconfig
  61. You can adjust the configuration using
  62. .. code-block:: bash
  63. make menuconfig
  64. Building
  65. --------
  66. When cross compiling you will have to specify the prefix of the cross-compiler.
  67. You can either specify the value of the CROSS_COMPILE variable on the make
  68. command line or export it beforehand.
  69. .. code-block:: bash
  70. CROSS_COMPILE=<compiler-prefix> make
  71. Assuming cross compiling on Debian for ARMv8 this would be
  72. .. code-block:: bash
  73. CROSS_COMPILE=aarch64-linux-gnu- make
  74. Build parameters
  75. ~~~~~~~~~~~~~~~~
  76. A list of available parameters for the make command can be obtained via
  77. .. code-block:: bash
  78. make help
  79. You can speed up compilation by parallelization using the -j parameter, e.g.
  80. .. code-block:: bash
  81. CROSS_COMPILE=aarch64-linux-gnu- make -j$(nproc)
  82. Further important build parameters are
  83. * O=<dir> - generate all output files in directory <dir>, including .config
  84. * V=1 - verbose build
  85. Devicetree compiler
  86. ~~~~~~~~~~~~~~~~~~~
  87. Boards that use `CONFIG_OF_CONTROL` (i.e. almost all of them) need the
  88. devicetree compiler (dtc). Those with `CONFIG_PYLIBFDT` need pylibfdt, a Python
  89. library for accessing devicetree data. Suitable versions of these are included
  90. in the U-Boot tree in `scripts/dtc` and built automatically as needed.
  91. To use the system versions of these, use the DTC parameter, for example
  92. .. code-block:: bash
  93. DTC=/usr/bin/dtc make
  94. In this case, dtc and pylibfdt are not built. The build checks that the version
  95. of dtc is new enough. It also makes sure that pylibfdt is present, if needed
  96. (see `scripts_dtc` in the Makefile).
  97. Note that the :doc:`tools` are always built with the included version of libfdt
  98. so it is not possible to build U-Boot tools with a system libfdt, at present.
  99. Link-time optimisation (LTO)
  100. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  101. U-Boot supports link-time optimisation which can reduce the size of the final
  102. U-Boot binaries, particularly with SPL.
  103. At present this can be enabled by ARM boards by adding `CONFIG_LTO=y` into the
  104. defconfig file. Other architectures are not supported. LTO is enabled by default
  105. for sandbox.
  106. This does incur a link-time penalty of several seconds. For faster incremental
  107. builds during development, you can disable it by setting `NO_LTO` to `1`.
  108. .. code-block:: bash
  109. NO_LTO=1 make
  110. Other build targets
  111. ~~~~~~~~~~~~~~~~~~~
  112. A list of all make targets can be obtained via
  113. .. code-block:: bash
  114. make help
  115. Important ones are
  116. * clean - remove most generated files but keep the configuration
  117. * mrproper - remove all generated files + config + various backup files
  118. Installation
  119. ------------
  120. The process for installing U-Boot on the target device is device specific.
  121. Please, refer to the board specific documentation :doc:`../board/index`.