הגדרת כללי CMake

הצגת המקור ב-GitHub

מערכת ה-build של CMake מסתמכת על CMakeLists.txt קבצים המגדירים יעדי build. CMakeLists.txt בשורש המאגר שלך הוא החלק העליון של עץ ה-build וזהו מקום טוב להתחיל בהגדרת המטרות, האפשרויות ופקודות המאקרו השונות המשמשות בתהליך הבנייה.

הערכים הראשונים שיוגדרו הם שם הפרויקט והפלטפורמות הנתמכות.

בדוגמה זו אנו מגדירים את שם הפרויקט כ-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 כולל בדיקה על כך שפעולת ביטול של גרסת build הופעלה בפלטפורמות שאינן נתמכות.

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 בעץ build:

add_subdirectory(openthread)

העברת נכסי build אל OpenThread

הקטע האחרון בקובץ זה מאפשר להגדיר מאפייני build (כגון הגדרות, אפשרויות ולכלול ספריות) שייתכן שברצונך להוסיף לעץ ה-build של 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
)

הוספת ספריות משנה לעץ הבנייה

עכשיו, לאחר שהתצורה ברמה העליונה הוגדרה, הגיע הזמן להוסיף ספריות משנה אחרות לעץ ה-build.

התיקייה src היא המקום שבו ממוקם קוד המקור של שכבת ההפשטה של הפלטפורמה. התיקייה third_party מכילה קוד של צד שלישי.

אם ברצונך לכלול אפליקציות לדוגמה במאגר, עליך ליצור תיקייה של examples ולהוסיף אותה גם לעץ ה-build.

add_subdirectory(src)
add_subdirectory(third_party)

# Optional
add_subdirectory(examples)

הספרייה src

זהו הלב של המאגר, ובו מוטמעת פלטפורמת ההפשטה של הפלטפורמה. הוא כולל גם כמה קבצים נדרשים אחרים.

src/arm-none-eabi.cmake

זהו קובץ של מפתח כלים שמגדיר כמה משתנים ש-CMaked משתמש בהם בתהליך ה-build. נקודת התחלה טובה היא להעתיק את הגרסה של ot-efr32 מהקובץ הזה ולשנות אותה כך שתתאים לפלטפורמה שלכם.

src/CMakeLists.txt

זהו המקום שבו אתם מגדירים את קובצי המקור, כוללים נתיבים ודגלים של מהדרים עבור ספריית הפלטפורמה שלכם. דוגמה טובה לקובץ הזה עבור מאגר שתומך בפלטפורמה אחת בלבד היא מ-ot-cc2538.

קיימת תמיכה במספר פלטפורמות במאגר יחיד, וניתן להשתמש במספר מאגרים של פלטפורמות לצורך עיון. למידע על ot-efr32 ו-ot-nrf528xx.