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 を導入したことにより、プラットフォームのファイル構造にいくつかの変更が生じました。この新しいアプローチの詳細については、プラットフォーム移植ガイドを参照してください。
アーキテクチャビルド
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 ファイルにあるqul_platform_add_default_linker_script() CMake 関数を使用して、 デフォルトのリンカ・スクリプトを設定します:
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 platform abstraction の Memory allocationを参照してください。
リソース保存場所
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 nameの末尾にnameを追加します。例えば、mimxrt1050-evk-baremetal 。
現在サポートされている構成は2つだけです:
- ベアメタル
- FreeRTOS
注: Qt for MCUs 2.0 以降、OS はQUL_OS に改名されています。既存のポートが v2.0 よりも古いQt for MCUs バージョンに基づいている場合は、それに応じて変数を変更することを検討してください。