מערכת ה-build של CMake מסתמכת על קובצי CMakeLists.txt
שמגדירים יעדי build. השדה CMakeLists.txt
ברמה הבסיסית (root) של המאגר הוא החלק העליון של עץ ה-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
כולל בדיקה לביטול גרסאות 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 לעץ ה-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 משתמש בהם בתהליך ה-build. בתור התחלה, כדאי להעתיק את הגרסה של הקובץ הזה בפורמט ot-efr32
ולשנות אותה בהתאם לפלטפורמה שלך.
src/CMakeLists.txt
כאן מגדירים את קובצי המקור, כוללים נתיבים ודגלי מהדר עבור ספריית הפלטפורמה. דוגמה טובה לקובץ הזה למאגר שתומך רק בפלטפורמה אחת היא מהקובץ ot-cc2538
.
אפשר לתמוך בכמה פלטפורמות במאגר אחד ואפשר להשתמש בכמה מאגרים של פלטפורמות כחומר עזר. ראו ot-efr32 ו-ot-nrf528xx.