ビルド・システムとしての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
STM32CubeMXでのツールチェーンの変更
まず、STM32CubeMXの[Project Manager]タブでツールチェーンを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
リンカ・スクリプトの更新
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)
:
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から直接プロジェクトの設定やビルドを行うこともできます。