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

إذا أردت تضمين نماذج تطبيقات في Repo، أنشِئ مجلد 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.