CMake Kurallarını Tanımlama

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

Kaynağı GitHub'da göster

CMake derleme sistemi, derleme hedeflerini tanımlayan CMakeLists.txt dosyalarını kullanır. Deponuzun kökünde bulunan CMakeLists.txt, derleme ağacının en üst kısmıdır ve derleme işleminde kullanılan çeşitli hedefleri, seçenekleri ve makroları tanımlamaya başlamak için iyi bir yerdir.

Tanımlanacak ilk değerler proje adı ve desteklenen platformlardır.

Bu örnekte, proje adını 0.0.1 sürümüyle birlikte ot-efr32 olarak ayarladık. ot-efr32 tarafından desteklenen efr32 platformlarının listesi olan EFR32_PLATFORM_VALUES değişkenini de tanımlıyoruz. Bu örnek kapsamında birden fazla platform tanımladık ancak _PLATFORM_VALUES değişkeni için tek bir platforma sahip olmak da sorun teşkil etmez.

cmake_minimum_required(VERSION 3.10.2)
project(ot-efr32 VERSION 0.0.1)

set(EFR32_PLATFORM_VALUES
    "efr32mg1"
    "efr32mg12"
    "efr32mg13"
    "efr32mg21"
)

CMakeLists.txt dosyası, desteklenmeyen platformlar için başlatılan derlemeleri iptal eden bir kontrol içeriyor.

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()

Tanımlanması gereken bir sonraki değişken: OT_PLATFORM_LIB. Bu değişken, platformunuzla bağlantı kurmak için OpenThread örnek uygulamaları tarafından kullanılır.

set(OT_PLATFORM_LIB "openthread-${EFR32_PLATFORM}")

OpenThread CMake seçenekleri

CMake değişkenleri tanımlanarak OpenThread'taki çeşitli özellikler etkinleştirilebilir/devre dışı bırakılabilir/yapılandırılabilir.

ot-efr32 platformunda silabs-mbedtls harici bir mbedTLS kitaplığı kullanılır.

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})

Çıkış dizinlerini tanımlama

Farklı hedef dosyaların çıkış dizini aşağıdaki değişkenler kullanılarak yapılandırılabilir.

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)

Yapı ağacına OpenThread'ı ekleyin

Derleme ağacına openthread alt modülünü eklemek için:

add_subdirectory(openthread)

Derleme özelliklerini OpenThread'a iletme

Bu dosyanın son bölümü, openthread derleme ağacına ve platform kitaplıklarına eklemek isteyebileceğiniz derleme özelliklerini (ör. tanımlar, seçenekler ve dizinleri dahil etme) tanımlamanıza olanak tanır.

Bu tanımları eklemenin kolay bir yolu ot-config hedefini kullanmaktır. Bu hedef, yalnızca yapılandırmayı tanımlamak için kullanılan ve openthread bölgesinde neredeyse tüm CMake hedefleri ile bağlantılı olan bir sahte hedeftir.

# 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
)

Yapı ağacına alt dizinler ekleme

Üst düzey yapılandırma tanımlandığına göre, derleme ağacına başka alt dizinler eklemenin tam zamanı.

src klasörü, platform soyutlama katmanı kaynak kodunun bulunduğu yerdir. third_party klasörü, üçüncü taraf kodu içeriyor.

Depoya örnek uygulamalar eklemek isterseniz bir examples klasörü oluşturup derleme ağacına da ekleyin.

add_subdirectory(src)
add_subdirectory(third_party)

# Optional
add_subdirectory(examples)

src dizini

Bu, kod deposunun kalbidir ve platform soyutlama katmanının uygulandığı yerdir. Dosyada bazı zorunlu dosyalar da bulunmaktadır.

src/arm-none-eabi.cmake

Bu, CMake'in derleme işleminde kullandığı bazı değişkenleri tanımlayan bir araç zinciri dosyasıdır. Bu dosyanın ot-efr32 sürümünü kopyalayıp platformunuza uyacak şekilde değiştirmek iyi bir başlangıç noktasıdır.

src/CMakeLists.txt

Kaynak dosyalarınızı burada tanımlar, yolları ve platform kitaplığınızın derleyici işaretlerini içerir. Yalnızca tek bir platformu destekleyen depo için bu dosyaya iyi bir örnek ot-cc2538 dosyasıdır.

Tek bir depoda birden fazla platform için destek sağlanabilir ve referans olarak birden fazla platform deposu kullanılabilir. ot-efr32 ve ot-nrf528xx sayfalarına göz atın.