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

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 देखें.