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

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

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

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

इस उदाहरण में, हमने प्रोजेक्ट का नाम ot-efr32 और वर्शन 0.0.1 पर सेट किया है. हमने एक वैरिएबल 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 देखें.