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

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

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

सीपीमेक बिल्ड सिस्टम 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 विकल्प

CMake वैरिएबल तय करके, OpenThread की अलग-अलग सुविधाएं चालू/बंद/कॉन्फ़िगर की जा सकती हैं.

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

यह एक टूलचेन फ़ाइल है जो बिल्ड प्रोसेस में इस्तेमाल होने वाले कुछ वैरिएबल के बारे में बताती है. सबसे अच्छा तरीका यह है कि इस फ़ाइल के ot-efr32 वर्शन को कॉपी कर लें और फिर इसमें बदलाव करें, ताकि यह आपके प्लैटफ़ॉर्म के हिसाब से फ़िट हो जाए.

src/CMakeLists.txt

यहां आप सोर्स प्लैटफ़ॉर्म की जानकारी देते हैं. साथ ही, अपनी प्लैटफ़ॉर्म लाइब्रेरी के लिए पाथ, और कंपाइलर फ़्लैग शामिल करते हैं. रिपॉज़िटरी के लिए इस फ़ाइल का एक अच्छा उदाहरण जो सिर्फ़ एक प्लैटफ़ॉर्म पर काम करता है, वह ot-cc2538 का है.

एक रिपॉज़िटरी में एक से ज़्यादा प्लैटफ़ॉर्म के लिए सहायता उपलब्ध है और कई प्लैटफ़ॉर्म डेटा स्टोर करने की जगहों को संदर्भ के रूप में इस्तेमाल किया जा सकता है. ot-efr32 और ot-nrf528xx देखें.