تحديد قواعد 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}")

خيارات CMake في OpenThread

يمكن تفعيل ميزات مختلفة في 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 على رمز المصدر لطبقة تجريد النظام الأساسي. يحتوي المجلد 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.