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

ビルド・システムとしての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
│ ├───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でのコード生成の後、arm GCCと互換性のある1つ以上のリンカ・スクリプトがSTM32CubeMXによって生成されます。 リンカ・スクリプトは一度だけ生成され、プロジェクト要件に合うように手動で変更できます。

TouchGFX Board Setupをベースにしたプロジェクトの場合、STM32CubeIDEツールチェーン用にすでに定義済みのリンカ・スクリプトをリファレンスとして使用して、デフォルトのリンカ・スクリプトを更新できます。

あるいは、生成済みのCMakeツールチェーン・ファイルgcc-arm-none-eabi.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拡張機能を使用してプロジェクトをインポートする必要があります。このためには[Import CMake project]を選択し、プロジェクトの場所としてプロジェクトのルートを選択します。

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

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