Definisci regole CMake

Visualizza sorgente su GitHub

Il sistema di build di CMake si basa su CMakeLists.txt file che definiscono le destinazioni della build. Il CMakeLists.txt nella directory principale del repository è la parte superiore della struttura di compilazione ed è un buon punto di partenza per definire le varie destinazioni, opzioni e macro utilizzate nel processo di compilazione.

I primi valori da definire sono il nome del progetto e le piattaforme supportate.

In questo esempio, abbiamo impostato il nome del progetto su ot-efr32 con una versione del tipo 0.0.1. Definiamo anche una variabile EFR32_PLATFORM_VALUES, che è un elenco di piattaforme efr32 supportate da ot-efr32. Per questo esempio abbiamo definito più piattaforme, ma una sola piattaforma per la variabile _PLATFORM_VALUES va bene.

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

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

Il file CMakeLists.txt include un controllo che interrompe le build avviate per le piattaforme non supportate.

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 variabile successiva da definire è OT_PLATFORM_LIB. Questa variabile è utilizzata dalle applicazioni di esempio OpenThread per collegarsi alla tua piattaforma.

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

Opzioni CMake di OpenThread

Varie funzionalità in OpenThread possono essere attivate/disattivate/configurate definendo variabili CMake.

Nella piattaforma ot-efr32 viene utilizzata una libreria esterna mbedTLS silabs-mbedtls.

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})

Definisci directory di output

La directory di output per i diversi file di destinazione può essere configurata utilizzando le variabili riportate di seguito.

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)

Aggiungi OpenThread alla struttura ad albero della build

Per includere il sottomodulo openthread nella struttura ad albero della build:

add_subdirectory(openthread)

Passare proprietà di build a OpenThread

La sezione finale di questo file consente di definire le proprietà della build, ad esempio definizioni, opzioni e includere directory, da aggiungere alla struttura ad albero openthread e alle tue librerie di piattaforma.

Un modo pratico per aggiungere queste definizioni è utilizzare il target ot-config. Si tratta di un target fonetico, utilizzato esclusivamente per la definizione della configurazione ed è collegato a quasi tutti i target CMake nel seguente paese: 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
)

Aggiungi sottodirectory all'albero della build

Ora che è stata definita la configurazione di primo livello, è il momento di aggiungere altre sottodirectory alla struttura ad albero delle build.

La cartella src si trova dove si trova il codice sorgente del livello di assorbimento della piattaforma. La cartella third_party contiene un codice di terze parti.

Per includere applicazioni di esempio nel repository, crea una cartella examples e aggiungila anche alla struttura di compilazione.

add_subdirectory(src)
add_subdirectory(third_party)

# Optional
add_subdirectory(examples)

La directory src

Questo è il cuore del repository ed è qui che viene implementato il livello di astrazione della piattaforma. Contiene inoltre alcuni altri file obbligatori.

src/arm-none-eabi.cmake

Si tratta di un file toolchain che definisce alcune variabili che CMake utilizza nel processo di compilazione. Un buon punto di partenza è copiare la versione ot-efr32 di questo file e modificarlo per adattarlo alla tua piattaforma.

src/CMakeLists.txt

Qui puoi definire i file di origine, includere i percorsi e i flag del compilatore per la tua libreria di piattaforma. Un buon esempio di questo file per un repository che supporta una sola piattaforma è quello di ot-cc2538.

È possibile supportare più piattaforme in un unico repository e utilizzare diversi repository di piattaforma come riferimento. Vedi ot-efr32 e ot-nrf528xx.