在 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 时,请在您的终端中运行此命令,或使用 qmake
或 CMake
构建系统。
获取 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 公司及其在全球的商标。所有其他商标均为其各自所有者的财产。