CMake के नियम तय करें

GitHub पर स्रोत देखें

CMake बिल्ड सिस्टम CMakeLists.txt फ़ाइलों पर निर्भर करता है, जो बिल्ड टारगेट तय करते हैं. आपके डेटा स्टोर करने की जगह के रूट में मौजूद CMakeLists.txt, बिल्ड ट्री के सबसे ऊपर है. यह बिल्ड प्रोसेस में इस्तेमाल किए जाने वाले अलग-अलग टारगेट, विकल्प, और मैक्रो की जानकारी देता है.

प्रोजेक्ट का नाम और इस्तेमाल किए जा सकने वाले प्लैटफ़ॉर्म, तय किए जाने वाले सबसे पहले मान होते हैं.

इस उदाहरण में, हमने प्रोजेक्ट के नाम को 0.0.1 के वर्शन के साथ ot-efr32 पर सेट किया है. हम वैरिएबल EFR32_PLATFORM_VALUES भी तय करते हैं जो ot-efr32 में काम करने वाले 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 टारगेट का इस्तेमाल करना है. यह टारगेट एक ऐसा डुप्लीकेट टारगेट है जिसका इस्तेमाल सिर्फ़ कॉन्फ़िगरेशन को तय करने के लिए किया जाता है. साथ ही, इसे openthread के सभी CMake टारगेट से लिंक किया जाता है.

# 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 फ़ोल्डर में कोई भी तीसरे पक्ष का कोड होता है.

अगर आप रेपो में नमूना ऐप्लिकेशन शामिल करना चाहते हैं, तो एक 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 देखें.