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