Définir des règles CMake

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Voir la source sur GitHub

Le système de compilation CMake s'appuie sur des fichiers CMakeLists.txt qui définissent des cibles de compilation. Le CMakeLists.txt à la racine de votre dépôt se trouve en haut de l'arborescence de compilation et constitue un bon point de départ pour définir les différentes cibles, options et macros utilisées dans le processus de compilation.

Les premières valeurs à définir sont le nom du projet et les plates-formes compatibles.

Dans cet exemple, nous définissons le nom du projet sur ot-efr32 avec une version de 0.0.1. Nous définissons également une variable EFR32_PLATFORM_VALUES, qui est une liste de efr32 plates-formes compatibles avec ot-efr32. Dans cet exemple, nous avons défini plusieurs plates-formes, mais vous pouvez également utiliser une seule plate-forme pour la variable _PLATFORM_VALUES.

cmake_minimum_required(VERSION 3.10.2)
project(ot-efr32 VERSION 0.0.1)

set(EFR32_PLATFORM_VALUES
    "efr32mg1"
    "efr32mg12"
    "efr32mg13"
    "efr32mg21"
)

Le fichier CMakeLists.txt inclut une vérification qui abandonne les builds lancés pour les plates-formes non compatibles.

set_property(CACHE EFR32_PLATFORM PROPERTY STRINGS ${EFR32_PLATFORM_VALUES})
if(NOT EFR32_PLATFORM IN_LIST EFR32_PLATFORM_VALUES)
    message(FATAL_ERROR "Please select a supported platform: ${EFR32_PLATFORM_VALUES}")
endif()

La variable suivante à définir est OT_PLATFORM_LIB. Cette variable est utilisée par les exemples d'application OpenThread pour établir un lien avec votre plate-forme.

set(OT_PLATFORM_LIB "openthread-${EFR32_PLATFORM}")

Options CMake d'OpenThread

Plusieurs fonctionnalités d'OpenThread peuvent être activées/désactivées/configurées en définissant des variables CMake.

Sur la plate-forme ot-efr32, une bibliothèque mbedTLS externe (silabs-mbedtls) est utilisée.

set(OT_BUILTIN_MBEDTLS_MANAGEMENT OFF CACHE BOOL "disable builtin mbedtls management" FORCE)
set(OT_EXTERNAL_MBEDTLS "silabs-mbedtls" CACHE STRING "use silabs mbedtls" FORCE)
set(OT_MBEDTLS ${OT_EXTERNAL_MBEDTLS})

Définir des répertoires de sortie

Le répertoire de sortie des différents fichiers cibles peut être configuré à l'aide des variables ci-dessous.

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)

Ajouter OpenThread à l'arborescence de compilation

Pour inclure le sous-module openthread dans l'arborescence de compilation, procédez comme suit:

add_subdirectory(openthread)

Transmettre les propriétés de compilation à OpenThread

La dernière section de ce fichier vous permet de définir les propriétés de compilation (telles que les définitions, les options et les répertoires) que vous souhaitez ajouter à l'arborescence de compilation openthread et à vos bibliothèques de plate-forme.

Un moyen pratique d'ajouter ces définitions consiste à utiliser la cible ot-config. Cette cible est un faux, qui sert uniquement à définir la configuration et qui est associée à presque toutes les cibles CMake dans openthread.

# Define config filename macros
target_compile_definitions(ot-config INTERFACE
    OPENTHREAD_CONFIG_FILE="openthread-core-efr32-config.h"
    OPENTHREAD_PROJECT_CORE_CONFIG_FILE="openthread-core-efr32-config.h"
    OPENTHREAD_CORE_CONFIG_PLATFORM_CHECK_FILE="openthread-core-efr32-config-check.h"
)

# Disable -Wshadow and -Wpedantic
target_compile_options(ot-config INTERFACE
    -Wno-shadow
    -Wno-pedantic
)

# Add platform dirs to "include" dirs
target_include_directories(ot-config INTERFACE
    ${PROJECT_SOURCE_DIR}/src/src
    ${PROJECT_SOURCE_DIR}/src/${EFR32_PLATFORM}
    ${PROJECT_SOURCE_DIR}/src/${EFR32_PLATFORM}/crypto
)

Ajouter des sous-répertoires à l'arborescence de compilation

Maintenant que la configuration de premier niveau est définie, il est temps d'ajouter d'autres sous-répertoires à l'arborescence de compilation.

Le dossier src contient le code source de la couche d'abstraction de plate-forme. Le dossier third_party contient un code tiers.

Si vous souhaitez inclure des exemples d'applications dans le dépôt, créez un dossier examples et ajoutez-le également à l'arborescence de compilation.

add_subdirectory(src)
add_subdirectory(third_party)

# Optional
add_subdirectory(examples)

Le répertoire src

Il s'agit du cœur du dépôt. C'est là que la couche d'abstraction de la plate-forme est implémentée. Il contient également d'autres fichiers obligatoires.

src/arm-none-eabi.cmake

Il s'agit d'un fichier de chaîne d'outils qui définit certaines variables utilisées par CMake dans le processus de compilation. Pour commencer, nous vous conseillons de copier la version ot-efr32 de ce fichier et de la modifier en fonction de votre plate-forme.

src/CMakeLists.txt

C'est là que vous définissez les fichiers sources, et incluez les chemins d'accès et les indicateurs de compilation pour votre bibliothèque de plate-forme. ot-cc2538 est un bon exemple de ce fichier pour un dépôt compatible avec une seule plate-forme.

Il est possible de prendre en charge plusieurs plates-formes dans un seul dépôt, et plusieurs dépôts de plates-formes peuvent être utilisés comme référence. Voir ot-efr32 et ot-nrf528xx.