diff mbox series

[2/2] doc: describe building with GCC

Message ID 20200905085853.29081-3-xypron.glpk@gmx.de
State Accepted
Commit 70e38eea3ada86874934ae5746f93dc793f75447
Delegated to: Tom Rini
Headers show
Series doc: describe building with GCC | expand

Commit Message

Heinrich Schuchardt Sept. 5, 2020, 8:58 a.m. UTC
Provide a description of the U-Boot build process with GCC in the HTML
documentation.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
---
 doc/build/gcc.rst   | 119 ++++++++++++++++++++++++++++++++++++++++++++
 doc/build/index.rst |   1 +
 2 files changed, 120 insertions(+)
 create mode 100644 doc/build/gcc.rst

--
2.28.0

Comments

Tom Rini Sept. 5, 2020, 12:40 p.m. UTC | #1
On Sat, Sep 05, 2020 at 10:58:53AM +0200, Heinrich Schuchardt wrote:

> Provide a description of the U-Boot build process with GCC in the HTML
> documentation.
> 
> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> ---
>  doc/build/gcc.rst   | 119 ++++++++++++++++++++++++++++++++++++++++++++
>  doc/build/index.rst |   1 +
>  2 files changed, 120 insertions(+)
>  create mode 100644 doc/build/gcc.rst

It's good to have this.  Can we restructure things so that it's clear
that the majority of this is toolchain independent and we can update the
clang doc, or if this becomes a more generic "build U-Boot for target"
doc, we just need to add a section about the Clang caveat about how gd
works and then it's just noting that instead of
CROSS_COMPILE=aarch64-linux-gnu- it's CROSS_COMPILE="clang -target
aarch64-linux-gnu" ?  Thanks!
Heinrich Schuchardt Sept. 6, 2020, 11:38 a.m. UTC | #2
On 9/5/20 2:40 PM, Tom Rini wrote:
> On Sat, Sep 05, 2020 at 10:58:53AM +0200, Heinrich Schuchardt wrote:
>
>> Provide a description of the U-Boot build process with GCC in the HTML
>> documentation.
>>
>> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
>> ---
>>  doc/build/gcc.rst   | 119 ++++++++++++++++++++++++++++++++++++++++++++
>>  doc/build/index.rst |   1 +
>>  2 files changed, 120 insertions(+)
>>  create mode 100644 doc/build/gcc.rst
>
> It's good to have this.  Can we restructure things so that it's clear
> that the majority of this is toolchain independent and we can update the
> clang doc, or if this becomes a more generic "build U-Boot for target"
> doc, we just need to add a section about the Clang caveat about how gd
> works and then it's just noting that instead of
> CROSS_COMPILE=aarch64-linux-gnu- it's CROSS_COMPILE="clang -target
> aarch64-linux-gnu" ?  Thanks!

I think the documentation serves different readers:

1) Users who want to build U-Boot and understand how to use it. They
will be interested in:

* What is U-Boot?
* Building U-Boot
* Board specific installation information
* Booting
* Using the shell
* Firmware update

In this area we are lacking a lot. Between "Build U-Boot" and "Develop
U-Boot" I see a need for a main chapter "Using U-Boot".

2) Developers who want to modify U-Boot and contribute to upstream. They
will be interested in

* APIs
* Inner workings of U-Boot
* Contribution guidelines

In this area we should strive to move the existing documentation to
reStructured text.

The description about the clang implementation of gd should be moved to
the "Develop U-Boot" section as a non-developer would not care about it.
We can add a chapter "Global data" collecting all gd related information.

Best regards

Heinrich
Tom Rini Sept. 14, 2020, 7:41 p.m. UTC | #3
On Sat, Sep 05, 2020 at 10:58:53AM +0200, Heinrich Schuchardt wrote:

> Provide a description of the U-Boot build process with GCC in the HTML
> documentation.
> 
> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>

Applied to u-boot/master, thanks!
diff mbox series

Patch

diff --git a/doc/build/gcc.rst b/doc/build/gcc.rst
new file mode 100644
index 0000000000..fcb0b1ffb3
--- /dev/null
+++ b/doc/build/gcc.rst
@@ -0,0 +1,119 @@ 
+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 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
+
+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`.
diff --git a/doc/build/index.rst b/doc/build/index.rst
index 5051a97e70..5f90f95aca 100644
--- a/doc/build/index.rst
+++ b/doc/build/index.rst
@@ -7,5 +7,6 @@  Build U-Boot
    :maxdepth: 2

    source
+   gcc
    clang
    tools