メイン・コンテンツまでスキップ

ビルド・システムとしてのCMake

概要​

TouchGFX V4.25.0およびSTM32CubeMX V6.14.0以降、CMakeはTouchGFXプロジェクトでサポートされるビルド・システムになっています。このシナリオでは、CMakeをビルド・システムとして使用して、TouchGFXプロジェクトをセットアップ、ビルド、デバッグする方法を示します。

CMakeの詳細については、公式のCMakeドキュメントを参照してください。

前提条件​

STM32Cubeコマンド・ライン・ツールセット(STM32CubeCLT)のダウンロードを推奨します。ここには、STM32CubeMXによって生成されたCMakeプロジェクトを設定、ビルド、デバッグするために必要なすべてのツール(コンパイラ、デバッガ、CMake、Ninjaなど)が含まれています。

Note
CMakeでは別のコンパイラ、ビルド・システム(Makeなど)、またはデバッガを使用することもできますが、本ガイドではSTM32CubeCLTを使用してセットアップするものとします。

STM32CubeMXでのツールチェーンの変更​

まず、STM32CubeMXの[Project Manager]タブでツールチェーンをCMakeに変更します。次にコードを生成します。

CMakeツールチェーンの選択

TouchGFX Designerでのコード生成​

ボタンまたはキーボード上のF4キーを押すことで、TouchGFX Designerからコードを生成し、TouchGFX固有のコードをプロジェクトに追加します。

コードの生成

プロジェクトの構造​

STM32CubeMXとTouchGFX Designerでコードを生成すると、以下とよく似たファイル構造が作成されます。

├───<project-name>.ioc
├───CMakeLists.txt # Root CMake list
├───CMakePresets.json # Predefined CMake configurations
├───<mcu-part-number>.ld # Generated linker scripts, e.g., STM32U5g9xx_FLASH.ld
├───cmake
| ├───gcc-arm-none-eabi.cmake # CMake toolchain file
| ├───starm-clang.cmake # CMake toolchain file
│ ├───stm32cubemx
│ │ └───CMakeLists.txt # STM32CubeMX CMake list
│ └───touchgfx
│ └───CMakeLists.txt # TouchGFX CMake list
├───Core
├───Drivers
├───Middlewares
└───TouchGFX

プロジェクトのルートにあるCMakeLists.txtファイルはユーザ変更のためにあるもので、CMake設定のエントリ・ポイントになっています。 CMakePresets.jsonファイルは、プロジェクトの各種の設定プリセット(デバッグ、リリースなど)を定義します。

stm32cubemx/CMakeLists.txtリスト・ファイルはSTM32CubeMXによって生成されたファイルを管理し、touchgfx/CMakeLists.txtファイルはTouchGFX固有のGUIファイルを管理します。したがって、GUI要素とアセットをプロジェクトに追加/削除してビルド・システムへの変更を反映させる場合には、TouchGFX Designerでコードを再生成することが重要です。

TouchGFX Designerで初めてコードを生成する際には、ルートのCMakeLists.txtに以下の行の追加が試みられます。これによってTouchGFXがビルド・システムにインクルードされます。

CMakeLists.txt
...
# Add STM32CubeMX generated sources
add_subdirectory(cmake/stm32cubemx)

# Add touchgfx generated sources and libraries
add_subdirectory(cmake/touchgfx)
...

TouchGFX CMakeリスト・ファイルはSTM32CubeMX CMakeリストの後にインクルードする必要があります。STM32CubeMX CMakeリスト内で定義されたマイクロコントローラ固有のHALとドライバへの依存関係が存在するからです。

Caution
TouchGFX DesignerがTouchGFX CMakeリストを正しくインクルードできなかった場合は、TouchGFX Designerのログに警告メッセージが生成されます。この場合は、警告で指定されたCMakeリスト・ファイル内に行を手動で追加する必要があります。

リンカ・スクリプトの更新​

STM32CubeMXでコードを生成すると、GCCとST Arm Clangの両方に互換性のあるリンカ・スクリプトが1つ以上作成されます。 TouchGFX Designerで利用可能なTouchGFX Board Setupの新バージョン(STM32CubeMXバージョン6.16以降でサポート)には、必要な変更が加えられたリンカ・スクリプトが含まれています。これらのリンカ・スクリプトは、CMake、STM32CubeIDE、およびTouchGFX Desginerの「ターゲットの実行」機能で使用されます。

その他のTouchGFX Board Setupについては、プロジェクト要件を満たすために、リンカ・スクリプトを手動で変更する必要があります。 STM32CubeIDEツールチェーンにすでに定義済みのリンカ・スクリプトは、参照として使用できます。コード生成時にリンカ・スクリプトがSTM32CubeMXによって再生成されることはないため、リンカ・スクリプトに加えられた変更は保持されます。

あるいは、生成済みのCMakeツールチェーン・ファイルgcc-arm-none-eabi.cmakeまたはstarm-clang.cmakeのいずれかを更新して、デフォルトのリンカ・スクリプトの代わりに別のリンカ・スクリプトをリンカが使用するように指定できます。たとえば、すでに定義済みのSTM32CubeIDEリンカ・スクリプトを使用するには、以下のように指定します。

gcc-arm-none-eabi.cmake
...
set(CMAKE_C_LINK_FLAGS "${TARGET_FLAGS}")
set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -T \"${CMAKE_SOURCE_DIR}/STM32CubeIDE/STM32U5G9ZJTXQ_FLASH.ld\"")
...

プロジェクトのビルド​

コードを生成し、TouchGFXがビルド・システムの一部として含まれていることを確認したら、STM32 VS Code拡張機能を使用してプロジェクトのビルドとデバッグを実行できます。 STM32 VS Code拡張機能は、開発者がSTM32CubeCLTを使用してCMakeプロジェクトをビルドし、ターゲット上でデバッグできる便利なツールです。

最初に、STM32 VS Code拡張機能を使用して [Setup STM32Cube project(s)]を選択し、プロジェクトを設定する必要があります。

CMakeプロジェクトのインポート

この拡張機能を使用して、ワークスペースをスキャンし、選択されたツールチェーンと対象のプラットフォームを特定します。 VSCodeメタデータ・フォルダ.vscode/内で、さまざまなVSCodeタスクと起動設定を拡張機能で生成できます。これらを使用して、プロジェクトのビルド、クリーン、フラッシュ、デバッグを行います。あるいは、CMake VS Code拡張機能またはコマンド・ラインを使用して、CMakeから直接プロジェクトの設定やビルドを行うこともできます。

Caution
When building CMake projects, CMake sometimes converts paths to object files to absolute paths instead of keeping them relative. This can lead to build errors, especially if the projects is located at a deep path. To mitigate this, it is recommended to place CMake-based TouchGFX projects close the the root of your drive.