CMake Kuralları tanımlayın

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

CMake derleme sistemi, derleme hedeflerini tanımlayan CMakeLists.txt dosyalarını temel alır. Deponuzun kökündeki CMakeLists.txt, derleme ağacının ü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 ot-efr32 olarak ayarladık. ot-efr32 tarafından desteklenen efr32 platformların listesi olan EFR32_PLATFORM_VALUES değişkenini de tanımlıyoruz. Bu örnekte, 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 derlemelerin iptal edildiğini gösteren 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, 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'teki ç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 ekleme

Derleme ağacına openthread alt modülünü 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 dizinler dahil) tanımlamanızı sağlar.

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 sınırlarındaki hemen hemen tüm CMake hedefleri tarafından bağlantı kurulan bir numara hedefidir.

# 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 dizin ekleme

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

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

Depoya örnek uygulamalar eklemek isterseniz bir examples klasörü oluşturun ve bunu yapı ağacına da ekleyin.

add_subdirectory(src)
add_subdirectory(third_party)

# Optional
add_subdirectory(examples)

src dizini

Bu, kod deposunun kalbidir ve platformun soyutlama katmanı burada uygulanır. Ayrıca, gerekli birkaç dosyayı daha içerir.

src/arm-none-eabi.cmake

Bu, CMake'in derleme sürecinde 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ştirebilirsiniz.

src/CMakeLists.txt

Platform kitaplığınız için kaynak dosyaları burada tanımlar, yollar ve derleyici işaretleri tanımlarsınız. Bu dosyanın yalnızca bir platformu destekleyen bir depoya iyi bir örneği ot-cc2538'ten alınmıştır.

Tek bir kod deposunda birden fazla platform için destek sunulabilir ve çeşitli platform depoları referans olarak kullanılabilir. Bkz. ot-efr32 ve ot-nrf528xx.