הגדרה של כללי CMake

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

מערכת ה-CMake של Build מסתמכת על CMakeLists.txt קבצים שמגדירים יעדי build. ה-CMakeLists.txt בבסיס המאגר הוא החלק העליון של עץ ה-build, והוא מקום טוב להתחיל בהגדרת היעדים, האפשרויות ופקודות המאקרו השונים המשמשים בתהליך ה-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 כולל בדיקה של ביטולי גרסאות שהושקו בפלטפורמות שאינן נתמכות.

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 לעץ Build

כדי לכלול את מודול המשנה 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

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

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

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

add_subdirectory(src)
add_subdirectory(third_party)

# Optional
add_subdirectory(examples)

הספרייה src

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

src/arm-none-eabi.cmake

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

src/CMakeLists.txt

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

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