Afficher le code source sur GitHub
Le système de compilation CMake repose 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 plates-formes efr32
compatibles avec ot-efr32
. Dans cet exemple, nous avons défini plusieurs plates-formes, mais vous pouvez également définir 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 annule 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 prochaine variable à définir est OT_PLATFORM_LIB
. Cette variable est utilisée par les exemples d'applications OpenThread pour établir un lien avec votre plate-forme.
set(OT_PLATFORM_LIB "openthread-${EFR32_PLATFORM}")
Options Open Maker CMake
Vous pouvez activer/désactiver/configurer différentes fonctionnalités d'OpenThread 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 build
Pour inclure le sous-module openthread
dans l'arborescence de compilation:
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 d'inclusion) que vous pouvez 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 n'est utilisé que pour définir la configuration et où presque toutes les cibles CMake dans openthread
se connectent.
# 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, vous pouvez ajouter d'autres sous-répertoires à l'arborescence de compilation.
Le code source de la couche d'abstraction de la plate-forme se trouve dans le dossier src
. 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
C'est au cœur du dépôt 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. Un bon point de départ serait de copier la version ot-efr32
de ce fichier et de la modifier pour l'adapter à votre plate-forme.
src/CMakeLists.txt
C'est ici que vous définissez les fichiers sources, incluez les chemins d'accès et les indicateurs de compilation de votre bibliothèque de plate-forme. ot-cc2538
constitue un bon exemple de ce fichier pour un dépôt qui n'accepte qu'une seule plate-forme.
La compatibilité avec plusieurs plates-formes dans un même dépôt est possible, et plusieurs dépôts de plate-forme peuvent être utilisés comme référence. Voir ot-efr32 et ot-nrf528xx.