Ver el código fuente en GitHub
El sistema de compilación de CMake se basa en archivos CMakeLists.txt
que definen los destinos de compilación. El elemento CMakeLists.txt
en la raíz de tu repositorio es la parte superior del árbol de compilación y es un buen punto de partida para definir los diferentes destinos, opciones y macros que se usan en el proceso de compilación.
Los primeros valores que se deben definir son el nombre del proyecto y las plataformas compatibles.
En este ejemplo, configuramos el nombre del proyecto en ot-efr32
con una versión de 0.0.1
. También definimos una variable EFR32_PLATFORM_VALUES
, que es una lista de plataformas efr32
compatibles con ot-efr32
. A los fines de este ejemplo, definimos varias plataformas, pero tener una sola plataforma para la variable _PLATFORM_VALUES
también es adecuada.
cmake_minimum_required(VERSION 3.10.2) project(ot-efr32 VERSION 0.0.1) set(EFR32_PLATFORM_VALUES "efr32mg1" "efr32mg12" "efr32mg13" "efr32mg21" )
El archivo CMakeLists.txt
incluye una verificación que anula las compilaciones iniciadas para plataformas no 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 definirse es OT_PLATFORM_LIB
. Las aplicaciones de ejemplo de OpenThread usan esta variable para vincularla a tu plataforma.
set(OT_PLATFORM_LIB "openthread-${EFR32_PLATFORM}")
Opciones de OpenThread CMake
Se pueden habilitar, inhabilitar o configurar varias funciones de OpenThread mediante la definición de variables de CMake.
En la plataforma ot-efr32
, se usa una biblioteca mbedTLS externa 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})
Define directorios de salida
El directorio de salida para diferentes archivos de destino se puede configurar con las variables a continuación.
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)
Cómo agregar OpenThread al árbol de compilación
Para incluir el submódulo openthread
en el árbol de compilación, haz lo siguiente:
add_subdirectory(openthread)
Cómo pasar propiedades de compilación a OpenThread
La sección final de este archivo te permite definir propiedades de compilación (como definiciones, opciones e incluir directorios) que quizás desees agregar al árbol de compilación openthread
y a tus bibliotecas de plataformas.
Una forma conveniente de agregar estas definiciones es mediante el objetivo ot-config
. Este objetivo es un objetivo falso que se usa únicamente con el fin de definir una configuración y está vinculado por casi todos los objetivos CMake 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 )
Cómo agregar subdirectorios al árbol de compilación
Ahora que se definió la configuración de nivel superior, es momento de agregar otros subdirectorios al árbol de compilación.
La carpeta src
es donde se encuentra el código fuente de la capa de abstracción de la plataforma. La carpeta third_party
contiene cualquier código de terceros.
Si quieres incluir aplicaciones de ejemplo en el repositorio, crea una carpeta examples
y agrégala al árbol de compilación.
add_subdirectory(src) add_subdirectory(third_party) # Optional add_subdirectory(examples)
El directorio src
Este es el corazón del repositorio y es donde se implementa la capa de abstracción de la plataforma. También contiene algunos archivos obligatorios más.
src/arm-none-eabi.cmake
Este es un archivo de cadena de herramientas que define algunas variables que CMake usa en el proceso de compilación. Un buen punto de partida sería copiar la versión ot-efr32
de este archivo y modificarla para que se adapte a tu plataforma.
src/CMakeLists.txt
Aquí es donde defines los archivos de origen, incluye las rutas de acceso y las marcas del compilador para la biblioteca de tu plataforma. Un buen ejemplo de este archivo para un repositorio que admite una sola plataforma es el de ot-cc2538
.
Es posible admitir múltiples plataformas en un solo repositorio y se pueden usar varios repositorios de plataforma como referencia. Consulta ot-efr32 y ot-nrf528xx.