Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Definir reglas de CMake

Ver fuente en GitHub

El sistema de construcción CMake se basa en CMakeLists.txt archivos que definen tipos de generación. El CMakeLists.txt en la raíz de su repositorio es la parte superior del árbol de construcción y es un lugar bueno para empezar a definir los diferentes destinos, opciones y macros utilizadas en el proceso de construcción.

Los primeros valores a definir son el nombre del proyecto y las plataformas compatibles.

En este ejemplo, hemos creado el nombre del proyecto a ot-efr32 con una versión de 0.0.1 . También definimos una variable EFR32_PLATFORM_VALUES que es una lista de efr32 plataformas soportadas por ot-efr32 . Por el bien de este ejemplo, hemos definido múltiples plataformas, pero tener una única plataforma para la _PLATFORM_VALUES variable está muy bien también.

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

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

El CMakeLists.txt archivo incluye un cheque que aborta se acumula en marcha para las plataformas 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 siguiente variable que debe ser definido es OT_PLATFORM_LIB . Las aplicaciones de ejemplo de OpenThread utilizan esta variable para vincularla con su plataforma.

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

Opciones de OpenThread CMake

Varias características en OpenThread pueden habilitarse / deshabilitarse / configurarse definiendo variables de CMake.

Por ot-efr32 plataforma, una biblioteca mbedTLS externos silabs-mbedtls se utiliza.

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

Definir directorios de salida

El directorio de salida para diferentes archivos de destino se puede configurar utilizando las siguientes variables.

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)

Agregar OpenThread al árbol de compilación

Para incluir el openthread submódulo en el árbol de construcción:

add_subdirectory(openthread)

Pasar propiedades de compilación a OpenThread

La sección final de este archivo permite definir las propiedades de construcción (tales como definiciones, opciones, e incluir directorios), que es posible que desee agregar a la openthread árbol de construcción y para sus bibliotecas de la plataforma.

Una manera conveniente de añadir estas definiciones es mediante el uso de la ot-config objetivo. Este objetivo es un objetivo falso que se utiliza únicamente para el propósito de la configuración de la definición y está vinculado contra por casi todos los objetivos CRealice en 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
)

Agregar subdirectorios al árbol de construcción

Ahora que la configuración de nivel superior está definida, es hora de agregar otros subdirectorios al árbol de compilación.

El src carpeta es donde se encuentra el código fuente de la capa de plataforma Abstration. El third_party carpeta contiene ningún código de terceros.

Si desea incluir aplicaciones de ejemplo en el repositorio, crear un examples de carpeta y añadirlo al árbol de construcción también.

add_subdirectory(src)
add_subdirectory(third_party)

# Optional
add_subdirectory(examples)

El src directorio

Este es el corazón del repositorio y es donde se implementa la capa de abstracción de la plataforma. También contiene algunos otros archivos necesarios.

src/arm-none-eabi.cmake

Este es un archivo de cadena de herramientas que define algunas variables que CMake usa en el proceso de construcción. Un buen punto de partida sería copiar el ot-efr32 versión de este archivo y modificarlo para adaptarse a su plataforma.

src/CMakeLists.txt

Aquí es donde se definen los archivos de origen, se incluyen las rutas y los indicadores del compilador para la biblioteca de su plataforma. Un buen ejemplo de este archivo para un repositorio, que sólo admite una única plataforma es de ot-cc2538 .

Es posible el soporte para múltiples plataformas en un solo repositorio y se pueden usar varios repositorios de plataforma como referencia. Ver ot-efr32 y ot-nrf528xx .