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 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ımlanması gereken ilk değerler proje adı ve desteklenen platformlardır.
Bu örnekte, proje adını 0.0.1
sürümüne sahip ot-efr32
olarak ayarladık. Ayrıca, ot-efr32
tarafından desteklenen efr32
platformların listesi olan EFR32_PLATFORM_VALUES
değişkenini de tanımlıyoruz. Örnekte olduğu gibi, birden fazla platform tanımladık ancak _PLATFORM_VALUES
değişkeni için tek bir platforma sahip olmanız 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ç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, platformunuza bağlantı oluşturmak için OpenThread örnek uygulamaları tarafından 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ı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)
Derleme ağacına OpenThread ekleme
Derleme ağacına openthread
alt modülünü 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ı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 hedefleriyle bağlantılı olan 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
Artık üst düzey yapılandırma tanımlandığına göre, derleme ağacına başka alt dizinler eklemeye geçebilirsiniz.
src
klasörü, platform soyutlama katmanı kaynak kodunun bulunduğu yerdir. third_party
klasörü herhangi bir üçüncü taraf kodu içeriyor.
Depoya örnek uygulamalar eklemek isterseniz bir examples
klasörü oluşturun ve bunu derleme ağacına da ekleyin.
add_subdirectory(src) add_subdirectory(third_party) # Optional add_subdirectory(examples)
src
dizini
Deponun kalbi burası ve platform soyutlama katmanının uygulandığı yer. 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
Burada platform kitaplığınız için kaynak dosyaları tanımlar, yollar ve derleyici işaretleri eklersiniz. Yalnızca tek bir platformu destekleyen depo için bu dosyaya iyi bir örnek olarak ot-cc2538
verilebilir.
Tek bir depoda birden fazla platform desteklenebilir ve çeşitli platform depoları referans olarak kullanılabilir. ot-efr32 ve ot-nrf528xx'e göz atın.