Erstellung von Qt für das Qualcomm Snapdragon 8155P Board unter Ubuntu

Die Einrichtung der Green Hills INTEGRITY- und Qualcomm-Entwicklungsumgebungen ist eine Voraussetzung, bevor Sie fortfahren. Siehe Installieren von Plattform-Abhängigkeiten.

Erstellen eines Shell-Skripts für eine feste Umgebung

Um die Entwicklungsumgebung für Qt für INTEGRITY einzurichten, erstellen Sie Qt aus den Quellen für das Qualcomm Snapdragon 8155P Board. Bevor Sie Qt für INTEGRITY erstellen, müssen Sie die Build-Umgebung einrichten. Hier ein Batch-Skript, um dies zu automatisieren, da es vor jedem Build durchgeführt werden muss.

Erstellen Sie ein neues Shell-Skript setEnvironment.sh, und speichern Sie es in Ihrem Home-Ordner. Fügen Sie die folgenden Exportbefehle in das Skript ein:

export PATH=$PATH:/work/ghs/sa8155/es7/es7_dev_env/hlos_dev_boot/apps/ghs_apps_proc/comp
export INTEGRITY_DIR=/work/ghs/sa8155/es7/es7_dev_env/hlos_dev_boot/apps/ghs_apps_proc/integrity
export INTEGRITY_BSP=platform-sa8155
export INTEGRITY_BUILD_TARGET=chk
export QC_MULTIMEDIA_INC_DIR=/work/ghs/sa8155/es7/es7_dev_env/hlos_dev_boot/apps/ghs_apps_proc/qc_bsp/include/amss/multimedia
export GL_INC_DIR=/work/ghs/sa8155/es7/es7_dev_env/hlos_dev_boot/apps/ghs_apps_proc/qc_bsp/AMSS/multimedia/graphics/include/public
export GL_LIB_DIR=/work/ghs/sa8155/es7/es7_dev_env/hlos_dev_boot/apps/ghs_apps_proc/qc_bsp/out/rel/libs/base:/work/ghs/sa8155/es7/es7_dev_env/hlos_dev_boot/apps/ghs_apps_proc/qc_bsp/out/rel/libs/multimedia/display:/work/ghs/sa8155/es7/es7_dev_env/hlos_dev_boot/apps/ghs_apps_proc/qc_bsp/out/rel/libs/multimedia/graphics:/work/ghs/sa8155/es7/es7_dev_env/hlos_dev_boot/apps/ghs_apps_proc/qc_bsp/out/rel/libs/platform/:/work/ghs/sa8155/es7/es7_dev_env/hlos_dev_boot/apps/ghs_apps_proc/qc_bsp/AMSS/multimedia/graphics/opengl/esx/build/integrity/prebuilt/

Diese Exportpfade gehen davon aus, dass Sie bei der Installation von MULTI IDE und INTEGRITY die /work/ghs/* Installationsverzeichnisse verwendet haben (siehe Installation von Plattformabhängigkeiten). Wenn Sie nicht die Standardverzeichnisse verwendet haben, passen Sie die Exportpfade entsprechend an.

Um Ihre Build-Umgebung zu initialisieren, führen Sie den folgenden Befehl in einem Terminal aus:

source ~/setEnvironment.sh

Hinweis: Führen Sie diesen Befehl jedes Mal in Ihrem Terminal aus, wenn Sie Qt bauen, oder verwenden Sie die Build-Systeme qmake oder CMake.

Qt-Quellen beziehen

Sie können den Qt-Quellcode von Ihrem Qt-Konto herunterladen.

Sie können die Qt-Quellen auch aus dem Git-Repository beziehen, siehe Quellcode beziehen.

Hinweis: Die Qt-Quellen müssen Version 6.2 oder höher sein.

Hinweis: Qt-Module, die von Qt für INTEGRITY unterstützt werden, sind unter Unterstützte Qt-Module aufgeführt.

Erstellen von Qt Desktop für die Verwendung von Cross-Compiling-Tools

Die Cross-Kompilierung von Qt erfordert, dass ein Host-Build von Qt verfügbar ist. Während des Builds werden Tools wie moc, rcc, qmlcachegen, qsb und andere von dort aus aufgerufen. Für detailliertere Informationen lesen Sie bitte Qt cross-compiling.

Führen Sie die folgenden Befehle aus:

mkdir hostbuild
cd hostbuild/
../qt5/configure -nomake tests -nomake examples -release -prefix /work/ghs/hostbuild
cmake --build . --parallel 6
cmake --install .

Hinweis: configure verwendet immer den Ninja-Generator und das Build-Tool, wenn eine ninja ausführbare Datei verfügbar ist. Ninja ist plattformübergreifend, funktionsreich, leistungsfähig und wird für alle Plattformen empfohlen. Die Verwendung anderer Generatoren kann funktionieren, wird aber nicht offiziell unterstützt.

Erstellen einer Toolchain-Datei für INTEGRITY

Um ein Projekt mit CMake crosskompilieren zu können, muss eine Toolchain-Datei angegeben werden. Diese CMake-Sprachdatei setzt die richtigen Werte für den Plattformnamen, den verwendeten Compiler/Linker und einen ganzen Haufen anderer toolchain-spezifischer Dinge. Für Integrity build auf Ubuntu erstellen Sie eine toolchain.cmake-Datei mit dem Inhalt:

# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

set(TARGET_ROOT_PATH "/work/ghs/sa8155/es7/es7_dev_env/hlos_dev_boot")
set(CMAKE_BUILD_TYPE "Release")

set(CMAKE_C_COMPILER cxintarm64)
set(CMAKE_CXX_COMPILER cxintarm64)
set(CMAKE_ASM_COMPILER cxintarm64)

#generic
set(CMAKE_SYSTEM_NAME Integrity)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_CROSSCOMPILING True)

set(EGL_FOUND True)
set(UNIX True)

set (CMAKE_C_COMPILE_FEATURES c_std_99)
set (CMAKE_CXX_COMPILE_FEATURES
cxx_alias_templates
cxx_alignas
cxx_alignof
cxx_attributes
cxx_auto_type
cxx_constexp
cxx_decltype
cxx_delegating_constructors
cxx_explicit_conversions
cxx_extern_templates
cxx_inheriting_constructors
cxx_lambdas
cxx_noexcept
cxx_nonstatic_member_init
cxx_nullptr
cxx_override
cxx_range_for
cxx_raw_string_literals
cxx_reference_qualified_functions
cxx_rvalue_references
cxx_static_assert
cxx_std_17
cxx_thread_local
cxx_unicode_literals
cxx_uniform_initialization
cxx_unrestricted_unions
cxx_variadic_macros
cxx_variadic_templates)

#graphical lib paths
set(EGL_LIBRARY_GRAPHIC_PATH ${TARGET_ROOT_PATH}/apps/ghs_apps_proc/qc_bsp/out/chk/libs/multimedia/graphics)
set(EGL_LIBRARY_PLATFORM_PATH ${TARGET_ROOT_PATH}/apps/ghs_apps_proc/qc_bsp/out/chk/libs/platform)
set(EGL_LIBRARY_BASE_PATH ${TARGET_ROOT_PATH}/apps/ghs_apps_proc/qc_bsp/out/chk/libs/base)
set(EGL_LIBRARY_CHK_PATH ${TARGET_ROOT_PATH}/apps/ghs_apps_proc/integrity/libs/arm64/chk)
set(EGL_LIBRARY_PREBUILD_PATH ${TARGET_ROOT_PATH}/apps/ghs_apps_proc/qc_bsp/AMSS/multimedia/graphics/opengl/esx/build/integrity/prebuilt)
set(EGL_LIBRARY_OPENWFD_PATH ${TARGET_ROOT_PATH}/apps/ghs_apps_proc/qc_bsp/out/chk/libs/multimedia/display)

#base
set(CMAKE_C_FLAGS  "-bsp $ENV{INTEGRITY_BSP} -os_dir $ENV{INTEGRITY_DIR} -non_shared -startfile_dir=$ENV{INTEGRITY_DIR}/libs/$ENV{INTEGRITY_BSP}/$ENV{INTEGRITY_BUILD_TARGET} --rtos_library_directory=libs/$ENV{INTEGRITY_BSP}/$ENV{INTEGRITY_BUILD_TARGET} --rtos_library_directory=libs/arm64/$ENV{INTEGRITY_BUILD_TARGET} -bigswitch -DINTEGRITY -llibposix.a")
set(CMAKE_C_FLAGS_DEBUG "-g -Omaxdebug")
set(CMAKE_C_FLAGS_RELEASE "-Ospeed -Olink -Omax -no_uvfd")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --signed_fields --diag_suppress=1,82,228,236,381,611,961,997,1795,1931,1974,3148 --c++17 --thread_local_storage --exceptions --defer_parse_function_templates")
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -frigor=accurate --signed_fields --no_implicit_include --link_once_templates -non_shared --new_outside_of_constructor --commons -I $ENV{QC_MULTIMEDIA_INC_DIR}")
set(CMAKE_CXX_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG})
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
set(CMAKE_FIND_LIBRARY_PREFIXES "lib")
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
set(BUILD_SHARED_LIBS OFF)
set(QT_CFLAGS_OPTIMIZE_FULL "-Ospeed -Olink -Omax -no_uvfd")
set(GLSLANG_OSDEP_PATH ../3rdparty/glslang/glslang/OSDependent/Unix)
set(GL_INC_DIR ${TARGET_ROOT_PATH}/apps/ghs_apps_proc/qc_bsp/AMSS/multimedia/graphics/include/public)
set(PKG_EGL_LIBRARY_DIRS ${TARGET_ROOT_PATH})

set(EGL_INCLUDE_DIR ${GL_INC_DIR})
set(EGL_LIBRARY "${EGL_LIBRARY_GRAPHIC_PATH}/libESXEGL_Adreno.a")

set(GLESv2_INCLUDE_DIR ${GL_INC_DIR})
set(GLESv2_LIBRARY "${EGL_LIBRARY_GRAPHIC_PATH}/libESXGLESv2_Adreno.a")

set(IntegrityPlatformGraphics_INCLUDE_DIR ${GL_INC_DIR})
set(IntegrityPlatformGraphics_LIBRARY "${EGL_LIBRARY_GRAPHIC_PATH}/libadreno_utils.a")
set(IntegrityPlatformGraphics_LIBRARIES_PACK
    "${EGL_LIBRARY_BASE_PATH}/libplanedef.a"
    "${EGL_LIBRARY_BASE_PATH}/libmmosalfile.a"
    "${EGL_LIBRARY_BASE_PATH}/libOSAbstraction.a"
    "${EGL_LIBRARY_OPENWFD_PATH}/libopenwfd.a"
    "${EGL_LIBRARY_GRAPHIC_PATH}/libOSUser.a"
    "${EGL_LIBRARY_GRAPHIC_PATH}/libpanel.a"
    "${EGL_LIBRARY_GRAPHIC_PATH}/libGSLUser.a"
    "${EGL_LIBRARY_PREBUILD_PATH}/libglnext-llvm.a"
    "${EGL_LIBRARY_PLATFORM_PATH}/libpmem.a"
    "${EGL_LIBRARY_CHK_PATH}/libposix.a"
    "${EGL_LIBRARY_CHK_PATH}/libivfs.a"
)

list(APPEND _qt_igy_gui_libs
    "${GLESv2_LIBRARY}"
    "${IntegrityPlatformGraphics_LIBRARY}"
    "${IntegrityPlatformGraphics_LIBRARIES_PACK}")

set(OPENGL_INCLUDE_DIR ${GL_INC_DIR})
set(OPENGL_opengl_LIBRARY ${EGL_LIBRARY})

Qt für INTEGRITY konfigurieren

Konfigurieren Sie Qt für das Qualcomm Snapdragon 8155P Board mit den folgenden Befehlen:

cd /work/ghs/targetbuild // Path to Qt installation directory
cmake ../qt5/ -DQT_HOST_PATH=/work/ghs/hostbuild/qtbase
-DCMAKE_TOOLCHAIN_FILE=/work/ghs/sa8155/es7/es7_dev_env/hlos_dev_boot/apps/ghs_apps_proc/toolchain_integrity.cmake
-DQT_QMAKE_TARGET_MKSPEC=devices/integrity-armv8-SA8155P -DBUILD_qtdoc=OFF
-DBUILD_qttranslations=OFF -DFEATURE_printdialog=OFF --debug-trycompile -DFEATURE_dbus=OFF
-GNinja -DUNIX=ON
-DEGL_LIBRARY=/work/ghs/sa8155/es7/es7_dev_env/hlos_dev_boot/libeglmegapack.a
-DEGL_INCLUDE_DIR=/work/ghs/sa8155/es7/es7_dev_env/hlos_dev_boot/apps/ghs_apps_proc/qc_bsp/AMSS/multimedia/graphics/include/public
-DFEATURE_dnslookup=OFF -DFEATURE_glib=OFF -DFEATURE_libudev=OFF -DFEATURE_system_pcre2=OFF -DFEATURE_sql_mysql=OFF
-DCMAKE_INSTALL_PREFIX=/work/ghs/targetbuild

Hinweis: INTEGRITY unterstützt nur statische Qt-Builds.

Hinweis: Die VariableQT_HOST_PATH wurde in Qt 6 eingeführt. Beim Cross-Compiling muss diese Variable auf den Installationsort von Qt für die Host-Plattform gesetzt werden. Sie wird verwendet, um Werkzeuge zu finden, die auf dem Host ausgeführt werden sollen (moc, rcc, androiddeployqt usw.).

Erstellen von Qt für INTEGRITY

Bauen Sie Qt, indem Sie cmake im Terminal aufrufen. Sie können cmake mit so vielen Kernen auf Ihrem Host-Rechner ausführen, wie Sie möchten. In unserem Beispiel verwenden wir sechs Kerne:

cmake --build . --parallel 6

Installieren von Qt

Wenn Sie die Option configure -prefix $PWD/qtbase in Configuring Qt nicht verwendet haben, führen Sie die folgenden Befehle in einem Terminal aus:

cd <Qt installation directory>
cmake --install .

Wenn Sie die configure-Option -prefix $PWD/qtbase verwendet haben, können Sie Qt aus dem Build-Verzeichnis verwenden, ohne den Befehl cmake install auszuführen.

Qt ist nun für das sa8155 Board konfiguriert und gebaut.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.