تعريف قواعد CMade

عرض المصدر على 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.