מערכת ה-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.