UbuntuでQualcomm Snapdragon 8155Pボード用のQtをビルドする

先に進む前に、Green Hills INTEGRITYとQualcommの開発環境をセットアップする必要があります。プラットフォーム依存関係のインストールを参照してください。

環境設定シェルスクリプトの作成

Qt for INTEGRITYの開発環境をセットアップするには、Qualcomm Snapdragon 8155Pボード用のソースからQtをビルドします。Qt for INTEGRITYをビルドする前に、ビルド環境を設定します。各ビルドの前に行う必要があるため、これを自動化するバッチスクリプトを以下に示します。

新しいシェルスクリプトsetEnvironment.sh を作成し、ホームフォルダに保存します。スクリプトに以下のエクスポート・コマンドを追加します:

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/

これらのエクスポート・パスでは、MULTI IDEとINTEGRITYのインストール時に/work/ghs/* のインストール・ディレクトリを使用したと仮定しています(プラットフォーム依存関係のインストールを参照)。デフォルトのディレクトリーを使用していない場合は、エクスポート・パスを適宜調整してください。

ビルド環境を初期化するには、ターミナルで次のコマンドを実行します:

source ~/setEnvironment.sh

注: Qt をビルドするたびに、またはqmakeCMake のビルドシステムを使用するたびに、ターミナルでこのコマンドを実行してください。

Qt ソースの取得

Qt のソースコードはQt アカウントからダウンロードできます。

また、Git リポジトリから Qt のソースを入手することもできます。

注意: Qtソースのバージョンは6.2以降でなければなりません。

Note: Qt for INTEGRITY でサポートされている Qt モジュールはSupported Qt Modules に記載されています。

クロスコンパイルツールを使用するための Qt Desktop のビルド

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 を設定する

以下のコマンドを使用して、Qualcomm Snapdragon 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_HOST_PATH 変数は Qt 6 で導入されました。クロスコンパイルする場合は、ホストプラットフォームのQtのインストール場所を設定する必要があります。これは、ホスト上で実行するツール(moc、rcc、androiddeployqtなど)を見つけるために使用されます。

INTEGRITY 用 Qt のビルド

ターミナルでcmake を呼び出して Qt をビルドします。cmake 、ホストマシンのコアの数だけ実行できます。この例では6コアを使用しています:

cmake --build . --parallel 6

Qt のインストール

configure オプション-prefix $PWD/qtbase を使っていない場合は、ターミナルで以下のコマンドを実行してください:

cd <Qt installation directory>
cmake --install .

configure オプション-prefix $PWD/qtbase を使用した場合は、cmake install コマンドを実行せずに、ビルドディレクトリから Qt を使用することができます。

これでQtはsa8155ボード用に設定され、ビルドされました。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。