/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/


/*!
//! [building qt for imx6quad]
    To set up the development environment for Qt for INTEGRITY, you need to
    build Qt from the sources for the i.MX6 Quad board. Before building Qt,
    create a shell script that will run the exports for your environment.

    \section1 Creating Script for Running Exports

    Create a new shell script \e{setEnvironment.sh}, and save it under
    your home folder. Add the following export commands to the script:

    \badcode
    export PATH=$PATH:/usr/ghs/comp_201654
    export INTEGRITY_DIR=/usr/ghs/int1144
    export INTEGRITY_BSP=platform-cortex-a9
    export GL_INC_DIR=/usr/ghs/int1144/INTEGRITY-include/Vivante/sdk/inc
    export GL_LIB_DIR=/usr/ghs/int1144/libs/Vivante
    \endcode

    These exports assume you have used the default installation directories
    while installing MULTI IDE and INTEGRITY (see
    \l {Installing Platform Dependencies}). If you have not used the default
    directories, you need to adjust the exported paths accordingly.

    To initialize your build environment, run the following command in a terminal:

    \badcode
    source ~/setEnvironment.sh
    \endcode

    \note You need to run this command in your terminal every time you build Qt,
    or use the \c qmake build system.

    \section1 Getting Qt Source Code

    You can download the Qt source code via your
    \l {https://login.qt.io/login} {Qt Account}.

    You can also get the Qt sources via the Git version control system. Qt Wiki has
    instructions for getting Qt sources via Git, see
    \l {https://wiki.qt.io/Building_Qt_5_from_Git#Getting_the_source_code}.
    You find the step by step instructions also from \l {Getting Qt Sources via Git}.

    \section2 Getting Qt Sources via Git

    Clone the top-level Qt 5 repository by running the following command in
    a terminal:

    \badcode
    git clone git://code.qt.io/qt/qt5.git
    \endcode

    \note If you are behind a firewall and want to use the HTTPS protocol,
    you can clone the top-level Qt 5 repository with the following command:

    \badcode
    git clone https://code.qt.io/qt/qt5.git
    \endcode

    Check out the target branch and the Qt sources with the following commands:

    \badcode
    cd qt5
    git checkout <Qt version>
    perl init-repository
    \endcode

    For example, the \c {git checkout} command for Qt 5.9.0 is \c {git checkout 5.9.0}.

    The init-repository script initializes the Qt 5 repository and clones various
    Qt 5 sub-modules (see
    \l {https://wiki.qt.io/Building_Qt_5_from_Git#Getting_the_submodule_source_code}).
    Qt modules supported by Qt for INTEGRITY are listed in \l {Supported Qt Modules}.

    \section1 Configuring Qt

    Configure Qt for the i.MX6 Quad board with the following command:

    \badcode
    cd <Qt installation directory>
    ./configure -prefix $PWD/qtbase -xplatform integrity-armv7-imx6 -confirm-license
    -opensource -nomake examples -nomake tests -no-dbus -silent -opengl es2 -static
    \endcode

    \note INTEGRITY supports only static Qt builds.

    \section1 Building Qt

    Build Qt with the \c make command in the terminal. You can run \c make with as
    many cores on your host machine as you desire. In our example we use six cores:

    \badcode
    make -j6
    \endcode

    \target installing-qt-for-imx6
    \section1 Installing Qt

    If you have not used the configure option \c {-prefix $PWD/qtbase} in \l {Configuring Qt},
    run the following command in a terminal:

    \badcode
    cd <Qt installation directory>
    make install
    \endcode

    If you have used the configure option \c {-prefix $PWD/qtbase},
    you can use Qt from the build directory, without running the
    \c {make install} command.

    Qt is now configured and built for the i.MX6 Quad board.
//! [building qt for imx6quad]
*/
