CMake Kurallarını Tanımlama

Kaynağı GitHub'da görüntüleyin

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

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

Bu örnekte, proje adını 0.0.1 sürümüyle ot-efr32 olarak ayarladık. Ayrıca, ot-efr32 tarafından desteklenen efr32 platformlarının listesi olan bir EFR32_PLATFORM_VALUES değişkeni de tanımlarız. Bu örnek adına birden fazla platform tanımladık ancak _PLATFORM_VALUES değişkeni için tek bir platforma sahip olmak da uygun olacaktır.

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 etmeye dair bir denetim 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, OpenThread örnek uygulamaları tarafından platformunuza bağlantı oluşturmak için kullanılır.

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

OpenThread CMake seçenekleri

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

ot-efr32 platformunda, harici bir mbedTLS kitaplığı silabs-mbedtls 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ımlayın

Farklı hedef dosyalar için çı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)

Derleme ağacına OpenThread'i ekleyin

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

add_subdirectory(openthread)

Derleme özelliklerini OpenThread'e iletme

Bu dosyanın son bölümü, openthread derleme ağacına ve platform kitaplıklarınıza eklemek isteyebileceğiniz derleme özelliklerini (tanımlar, seçenekler ve dizinleri dahil etme gibi) 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 amacıyla kullanılan ve openthread içindeki hemen hemen tüm CMake hedefleri tarafından bağlanılan sahte bir 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
)

Derleme ağacına alt dizinler ekleme

Üst düzey yapılandırma tanımlandığına göre, artık derleme ağacına diğer alt dizinleri ekleyebilirsiniz.

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

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

Burası, veri havuzunun kalbidir ve platform soyutlama katmanının uygulandığı yerdir. Ayrıca, gerekli birkaç dosyayı daha içerir.

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

Burası, platform kitaplığınız için kaynak dosyaları tanımladığınız, yolları ve derleyici işaretlerini eklediğiniz yerdir. Bu dosyanın yalnızca tek platformu destekleyen bir depoya ilişkin iyi bir örneği, ot-cc2538 dosyasındadır.

Tek bir depoda birden fazla platform desteği vardır ve birden fazla platform deposu referans olarak kullanılabilir. Bkz. ot-efr32 ve ot-nrf528xx.