在 Ubuntu 上构建高通骁龙8155P板上的 Qt

在继续之前,需要设置 Green Hills INTEGRITY 和高通开发环境。请参阅安装平台依赖项

创建一个设置环境 shell 脚本

为了设置 INTEGRITY 的 Qt 开发环境,需要从高通骁龙8155P板的源代码构建 Qt。在为 INTEGRITY 构建 Qt 之前,需要设置构建环境。这里有一个批处理脚本来自动化这个过程,因为它需要在每次构建之前执行。

创建一个新的 shell 脚本 setEnvironment.sh,并将其保存在您的家目录下。将以下 export 命令添加到脚本中

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/

这些 export 路径假设您在安装 MULTI IDE 和 INTEGRITY 时使用了 /work/ghs/* 安装目录(请参阅 安装平台依赖项)。如果您没有使用默认目录,请相应地调整 export 路径。

要初始化您的构建环境,请在终端中运行以下命令

source ~/setEnvironment.sh

注意:每次构建 Qt 时,请在您的终端中运行此命令,或使用 qmakeCMake 构建系统。

获取 Qt 源代码

您可以从您的 Qt 账户 下载 Qt 源代码。

您还可以从 Git 仓库获取 Qt 源代码,请参阅 获取源代码

注意:Qt 源代码版本必须为 6.2 或更高版本。

注意:Qt for INTEGRITY 支持的 Qt 模块列表请参阅 支持的 Qt 模块

构建用于交叉编译工具使用的 Qt 桌面版本

交叉编译的 Qt 需要可用的宿主机 Qt 构建。在构建过程中,会从该宿主机调用 moc、rcc、qmlcachegen、qsb 以及其他工具。有关更详细的信息,请参阅 交叉编译 Qt

运行以下命令

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

注意:如果可用的 ninja 可执行文件,则 configure 总是使用 Ninja 生成器和构建工具。Ninja 是跨平台的、功能丰富、性能优良的,且在所有平台上都推荐使用。其他生成器的使用可能有效,但未得到官方支持。

为 INTEGRITY 创建工具链文件

为了使用 CMake 交叉编译项目,必须指定一个工具链文件。这个以 CMake 语言编写的文件设置平台的名称、使用的编译器/链接器以及其他许多工具链特定值。对于在 Ubuntu 上创建 Integrity 构建,请创建一个名为 toolchain.cmake 的文件,并包含以下内容

# 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})

为 INTEGRITY 配置 Qt

使用以下命令使用这些命令为高通骁龙8155P板配置 Qt

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

注意:INTEGRITY 仅支持静态 Qt 构建。

注意:在 Qt 6 中引入的变量 QT_HOST_PATH。在进行交叉编译时,此必须设置为宿主平台的 Qt 安装位置。它用于定位在宿主上运行的工具(moc、rcc、androiddeployqt 等)。

为 INTEGRITY 构建(Qt)

通过在终端中调用 cmake 来构建 Qt。您可以在宿主机器上根据自己的需求运行具有多少核心的 cmake。在我们的示例中,我们使用了六个核心。

cmake --build . --parallel 6

安装 Qt

如果您在配置 Qt中未使用配置选项 -prefix $PWD/qtbase,请在终端中运行以下命令:

cd <Qt installation directory>
cmake --install .

如果您已使用配置选项 -prefix $PWD/qtbase,则可以直接在构建目录中使用 Qt,而无需运行 cmake install 命令。

Qt 现已针对 sa8155 板进行配置和构建。

© 2024 Qt 公司有限公司。包含在此处的文档贡献权归其各自的拥有者。此处的提供文档根据GNU 自由文档许可证版本 1.3 的条款进行许可,由自由软件基金会发布。Qt 和相应的标识是芬兰的 Qt 公司及其在全球的商标。所有其他商标均为其各自所有者的财产。