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

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

概要

From TouchGFX V4.25.0 and STM32CubeMX V6.14.0 onwards, CMake is a supported build system for TouchGFX projects. このシナリオでは、CMakeをビルド・システムとして使用して、TouchGFXプロジェクトをセットアップ、ビルド、デバッグする方法を示します。

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

前提条件

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

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

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

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

CMakeツールチェーンの選択

TouchGFX Designerでのコード生成

Generate code from TouchGFX Designer by pressing the button or the F4 key on your keyboard, to add the TouchGFX specific code to the project.

コードの生成

プロジェクトの構造

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ファイルを管理します。 Therefore, it is important to to re-generate code in TouchGFX Designer when adding/deleting GUI elements and assets to the project to reflect the changes to the build system.

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
If TouchGFX Designer fails to correctly include the touchgfx CMake list, a warning message is generated in TouchGFX Designer log. この場合は、警告で指定されたCMakeリスト・ファイル内に行を手動で追加する必要があります。

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

STM32CubeMXでのコード生成の後、arm GCCと互換性のある1つ以上のリンカ・スクリプトがSTM32CubeMXによって生成されます。 リンカ・スクリプトは一度だけ生成され、プロジェクト要件に合うように手動で変更できます。

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

Alternatively, users can update one of the generated CMake toolchain files gcc-arm-none-eabi.cmake/starm-clang.cmake to point out another linker script to be used by the linker instead of the default one. たとえば、すでに定義済みの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拡張機能を使用してプロジェクトのビルドとデバッグを実行できます。 The STM32 VS Code Extension is a useful tool that allow developers to build CMake projects and debug them on target using STM32CubeCLT.

First, the project must be set-up using the STM32 VS Code Extension by selecting Setup STM32Cube project(s):

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

The extension will scan the workspace and determine the selected toolchain and target platform. Various VSCode tasks and launch configurations can be generated by the extension in the VSCode meta data folder .vscode/. These are used to build, clean, flash, and debug the project. あるいは、CMake VS Code拡張機能またはコマンド・ラインを使用して、CMakeから直接プロジェクトの設定やビルドを行うこともできます。