CMake নিয়ম সংজ্ঞায়িত করুন, 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 দেখুন।