تحديد قواعد 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 على أي رمز برمجي تابع لجهة خارجية.

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