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.