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 をビルドするたびに、またはqmake
やCMake
のビルドシステムを使用するたびに、ターミナルでこのコマンドを実行してください。
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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。