C
Qt for MCUs 2.3 へのプラットフォーム移行ガイド
Qt for MCUs 1.x または 2.x からQt for MCUs 2.3 以降へプラットフォームを移行する際に留意すべき変更点は以下の通りです。
最も重要な変更点は、Qt Quick Ultralite 2.3以降において、BoardDefaults.cmake がBoardDefaults.qmlprojectconfig に置き換えられたことです。ただし、旧バージョンのQt Quick Ultralite(v2.0~2.2)に基づくすべてのプラットフォーム構成については、引き続きCMake APIを使用することができます。
移行についてBoardDefaults.qmlprojectconfig
BoardDefaults.qmlprojectconfig をプラットフォーム設定のデフォルトソースとして導入したことに伴い、プラットフォームファイルの構造にいくつかの変更が生じました。この新しいアプローチの詳細については、『Platform porting guide』を参照してください。
アーキテクチャ別ビルド
Qt for MCUs ではアーキテクチャベースのビルドが採用されているため、ターゲットプラットフォームのアーキテクチャを指定することが重要です。これは、BoardArchitectureConfig.cmake 内のQUL_PLATFORM_ARCHITECTURE 変数を使用して指定できます。詳細については、「アーキテクチャおよびプラットフォーム固有のビルド設定」を参照してください。
注: Qt for MCUs 2.3以降 、QUL_PLATFORM_ARCHITECTURE 変数はBoardDefaults.cmake からBoardArchitectureConfig.cmake へ移動しました。
プラットフォーム用のコンパイルおよびリンクオプション
お使いのプラットフォーム固有のコンパイラおよびリンカフラグを含む `CompilationOptions.cmake ` ファイルの名前を `platform.cmake` に変更してください。
リンカースクリプト
プラットフォームのLinkerScriptConfig.cmake ファイル内で、CMake のqul_platform_add_default_linker_script() 関数を使用して、デフォルトのリンカースクリプトを設定します。
qul_platform_add_default_linker_script("${CMAKE_CURRENT_LIST_DIR}/example-platform.ld")以前のQt for MCUs のバージョンでは、これはLinkerScriptLoader.cmake 内のLINKER_SCRIPT 変数を使用して行われていました。
プラットフォームキットの構成ファイル
boardSdk 属性のenvVar 属性は、cmakeCacheEntries 属性に置き換えられました。詳細については、「 Qt Creator 用のプラットフォームキットファイルの作成」セクションを参照してください。
プラットフォームターゲット名
プラットフォームターゲットの名前が、QuickUltralitePlatform からPlatform に変更されました。target_sources 、target_include_directories 、target_compile_definitions 、およびその他の関連する CMake コマンドを更新し、新しいターゲット名を使用するようにしてください。
プラットフォーム API
以下の関数の実装を、Qul::Platform::PlatformContext クラスのサブクラスに移動してください:
- initializeHardware
- initializeDisplay
- currentTimestamp
- exec
- rand
- scheduleEngineUpdate
- frameBufferingType
- beginFrame
- endFrame
- presentFrame
- availableScreens
- layerEngine
- waitUntilAsyncReadFinished
- flushCachesForAsyncRead
- memoryAllocator
- consoleWrite
注: ` availableScreens ` および `frameBufferingType ` は、const のメンバ関数である必要があります。
さらに、ハードウェアに直接関係しないプラットフォームの初期化を行うために、initializePlatform メンバ関数を追加してください。
最後に、Qul::Platform::getPlatformInstance() 関数を実装し、シングルトンのプラットフォームインスタンスへのポインタを返するようにします。
プラットフォームのプロパティ
Qt for MCUs 2.3 で導入されたプラットフォームプロパティは、プラットフォーム固有の設定を、Qt Quick Ultralite エンジン関連の設定(BoardDefaults.qmlprojectconfig ファイルで定義されているもの)から分離するためのものです。以下の例に示すように、プラットフォームのCMakeLists.txt でこれらを設定できます。
set_target_properties(Platform
PROPERTIES
NXP_CHIP_NAME "MIMXRT1052xxxxB"
NXP_CONNECT_SCRIPT "RT1050_connect.scp"
# variables cannot be expanded that's why there is "\" before "$". It will be later evaluated at CMake runtime using
# qul_private_evaluate_path_from_target_property() function
NXP_PARTFILES_DIR "\${QUL_PLATFORM_TARGET_DIR}/../mimxrt1050-evk-common/cmake"
QUL_PLATFORM_EXCLUDED_DEMOS "automotive;motor_cluster"
QUL_PLATFORM_EXCLUDED_EXAMPLES "freertos_app_switch;imagedecoder;layers;multiscreen;map"
QUL_PLATFORM_EXCLUDED_TESTS "layers;layers_with_shapes;layer_transparency;resource_storage_section"
QUL_PRIVATE_USE_PLATFORM_CONFIGURATION_HEADER ON
EXPORT_PROPERTIES "NXP_CHIP_NAME;NXP_CONNECT_SCRIPT;NXP_PARTFILES_DIR;QUL_PLATFORM_EXCLUDED_DEMOS;QUL_PLATFORM_EXCLUDED_EXAMPLES;QUL_PLATFORM_EXCLUDED_TESTS"
)利用可能なすべてのプラットフォームプロパティの一覧は、『プラットフォーム移植ガイド』に記載されています。以下の表には、名前が変更された変数のみを掲載しています:
| Qt for MCUs 1.9 CMake変数名 | Qt for MCUs 2.xのプロパティ名 |
|---|---|
QUL_DEFAULT_SCREEN_WIDTH | QUL_PLATFORM_DEFAULT_SCREEN_WIDTH |
QUL_DEFAULT_SCREEN_HEIGHT | QUL_PLATFORM_DEFAULT_SCREEN_HEIGHT |
EXCLUDED_EXAMPLES | QUL_PLATFORM_EXCLUDED_EXAMPLES |
EXCLUDED_DEMOS | QUL_PLATFORM_EXCLUDED_DEMOS |
リソースのプリロード
QUL_STATIC_ASSET_SEGMENT は使用されなくなりました。代わりに、プリロードされたアセット用のメモリは、Qul::Platform::PlatformContext から返されるメモリアロケータを使用して割り当てられます。
プリロードの実装方法の詳細については、『Qt Quick Ultralite プラットフォーム抽象化』の「メモリ割り当て」を参照してください。
リソースの保存場所
QUL_STATIC_ASSET_SEGMENT およびQUL_STATIC_NO_PRELOAD_ASSET_SEGMENT を使用する代わりに、リソースはデフォルトでQulResourceData 、QulModuleResourceData 、およびQulFontResourceData セグメントに配置されるようになりました。詳細については、「プロジェクトの設定」を参照してください。
OS構成の定義
Qt for MCUs 2.3 以降、QUL_OS の値は 2 つの方法で指定できるようになりました。CMake 呼び出しのオプション(-DQUL_OS=<os_name> )として渡すか、すべてのQt Quick Ultralite リファレンスプラットフォームと同様に、QUL_PLATFORM の名前の末尾に名前を追加する方法です。例:mimxrt1050-evk-baremetal 。
現在、サポートされている構成は以下の2つだけです:
- baremetal
- FreeRTOS
注: Qt for MCUs 2.0以降 、OS はQUL_OS に名称変更されました。既存のポートがv2.0より古いバージョンのQt for MCUs に基づいている場合は、変数を適宜変更することを検討してください。
特定の Qt ライセンスの下で利用可能です。
詳細はこちら。