Определить правила CMake

Посмотреть исходный код на GitHub

Система сборки CMake опирается на CMakeLists.txt файлы , которые определяют цели сборки. CMakeLists.txt в корне вашего хранилища является вершиной дерева сборки и является хорошим местом , чтобы начать определять различные задания, параметры и макросы , используемые в процессе сборки.

Самые первые значения, которые необходимо определить, - это имя проекта и поддерживаемые платформы.

В этом примере мы устанавливаем имя проекта ot-efr32 с версией 0.0.1 . Мы также определяем переменную EFR32_PLATFORM_VALUES , которая представляет собой список efr32 платформ , поддерживаемых ot-efr32 . Ради этого примера, мы определили несколько платформ, но имеющий единую платформу для _PLATFORM_VALUES переменного отлично , а также.

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

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

CMakeLists.txt файл включает в себя проверку , что билды запущены аборты для неподдерживаемых платформ.

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

Следующая переменная , которая должна быть определена в OT_PLATFORM_LIB . Эта переменная используется приложениями-примерами OpenThread для связи с вашей платформой.

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

Параметры OpenThread CMake

Различные функции OpenThread могут быть включены / отключены / настроены путем определения переменных CMake.

На ot-efr32 платформы, внешний 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})

Определите выходные каталоги

Выходной каталог для различных целевых файлов можно настроить с помощью переменных ниже.

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)

Добавить OpenThread в дерево сборки

Чтобы включить openthread подмодуль в дереве сборки:

add_subdirectory(openthread)

Передать свойства сборки в OpenThread

В заключительном разделе этого файла позволяет определять свойство сборки (например, определение, параметры, и включают в себя каталоги) , которые вы можете добавить к openthread дереву сборки и библиотекам платформы.

Удобный способ добавить эти определения является использование ot-config цели. Эта целью является мишенью фальшивой , которая используется исключительно для целей определения конфигурации и связана с почти всеми целями CMake в 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
)

Добавить подкаталоги в дерево сборки

Теперь, когда конфигурация верхнего уровня определена, пора добавить другие подкаталоги в дерево сборки.

src папка где платформенного abstration исходного слоя код расположен. third_party папка содержит любой код третьих сторон.

Если вы хотели бы включить примеры приложений в репозитории, создать examples папки и добавить его к дереву сборки , а также.

add_subdirectory(src)
add_subdirectory(third_party)

# Optional
add_subdirectory(examples)

src каталог

Это сердце репозитория, где реализован уровень абстракции платформы. Он также содержит несколько других необходимых файлов.

src/arm-none-eabi.cmake

Это файл инструментальной цепочки, который определяет некоторые переменные, которые CMake использует в процессе сборки. Хорошая отправная точка будет скопировать в ot-efr32 версию этого файла и изменить его под вашу платформу.

src/CMakeLists.txt

Здесь вы определяете исходные файлы, включаете пути и флаги компилятора для вашей библиотеки платформы. Хороший пример этого файла для хранилища , который поддерживает только одну платформу от ot-cc2538 .

Возможна поддержка нескольких платформ в одном репозитории, и несколько репозиториев платформ могут использоваться в качестве справочных. См Ot-efr32 и OT-nrf528xx .