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. Deponuzun kökündeki CMakeLists.txt, derleme ağacının en üstüdür ve derleme sürecinde 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 ayarlıyoruz. Ayrıca, ot-efr32 tarafından desteklenen efr32 platformlarının listesi olan EFR32_PLATFORM_VALUES değişkenini de tanımlarız. Bu örnekte birden fazla platform tanımladık ancak _PLATFORM_VALUES değişkeni için tek bir platform kullanmak da uygundur.

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çerir.

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

OpenThread'i derleme ağacına ekleme

openthread alt modülünü derleme ağacına dahil etmek 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ımlamalar, seçenekler ve dahil edilen dizinler gibi) tanımlamanıza olanak tanır.

Bu tanımları eklemenin uygun bir yolu, ot-config hedefini kullanmaktır. Bu hedef, yalnızca yapılandırmayı tanımlamak amacıyla kullanılan ve openthread'teki neredeyse tüm CMake hedefleri tarafından bağlanan 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ığından artık derleme ağacına başka alt dizinler ekleme zamanı gelmiştir.

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

Depoya örnek uygulamalar eklemek istiyorsanız 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, deponun kalbidir ve platform soyutlama katmanının uygulandığı yerdir. Ayrıca gerekli olan birkaç dosya 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. Başlangıç olarak bu dosyanın ot-efr32 sürümünü kopyalayıp platformunuza uyacak şekilde değiştirmeyi deneyebilirsiniz.

src/CMakeLists.txt

Platform kitaplığınız için kaynak dosyaları, dahil etme yollarını ve derleyici işaretlerini burada tanımlarsınız. Yalnızca tek bir platformu destekleyen bir depo için bu dosyanın iyi bir örneği ot-cc2538'den alınmıştır.

Tek bir depoda birden fazla platform desteklenebilir ve referans olarak birkaç platform deposu kullanılabilir. ot-efr32 ve ot-nrf528xx dosyalarına bakın.