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 विकल्प

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

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

src/CMakeLists.txt

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

एक ही रिपॉज़िटरी में कई प्लैटफ़ॉर्म का इस्तेमाल किया जा सकता है. साथ ही, कई प्लैटफ़ॉर्म रिपॉज़िटरी का इस्तेमाल रेफ़रंस के तौर पर भी किया जा सकता है. ot-efr32 और ot-nrf528xx देखें.