Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Tentukan Aturan CMake

Lihat sumber di GitHub

The CMake membangun sistem bergantung pada CMakeLists.txt file yang menentukan target membangun. The CMakeLists.txt pada akar repositori Anda adalah bagian atas bangunan pohon dan adalah tempat yang baik untuk memulai mendefinisikan berbagai sasaran, pilihan, dan makro yang digunakan dalam proses membangun.

Nilai pertama yang harus ditentukan adalah nama proyek dan platform yang didukung.

Dalam contoh ini, kita menetapkan nama proyek untuk ot-efr32 dengan versi 0.0.1 . Kami juga mendefinisikan variabel EFR32_PLATFORM_VALUES yang merupakan daftar efr32 platform yang didukung oleh ot-efr32 . Demi contoh ini, kita telah mendefinisikan beberapa platform, tetapi memiliki satu platform untuk _PLATFORM_VALUES variabel baik-baik saja juga.

cmake_minimum_required(VERSION 3.10.2)
project(ot-efr32 VERSION 0.0.1)

set(EFR32_PLATFORM_VALUES
    "efr32mg1"
    "efr32mg12"
    "efr32mg13"
    "efr32mg21"
)

The CMakeLists.txt file termasuk cek yang dibatalkan membangun diluncurkan untuk platform yang tidak didukung.

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

Variabel berikutnya yang perlu didefinisikan adalah OT_PLATFORM_LIB . Variabel ini digunakan oleh aplikasi contoh OpenThread untuk menautkan ke platform Anda.

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

Opsi OpenThread CMake

Berbagai fitur di OpenThread dapat diaktifkan/dinonaktifkan/dikonfigurasi dengan mendefinisikan variabel CMake.

Di ot-efr32 Platform, sebuah mbedTLS eksternal perpustakaan silabs-mbedtls digunakan.

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

Tentukan direktori keluaran

Direktori output untuk file target yang berbeda dapat dikonfigurasi menggunakan variabel di bawah ini.

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)

Tambahkan OpenThread ke pohon build

Untuk memasukkan openthread submodule di pohon membangun:

add_subdirectory(openthread)

Berikan properti build ke OpenThread

Bagian akhir dari file ini memungkinkan Anda untuk menentukan membangun properti (seperti definisi, pilihan, dan termasuk direktori) yang Anda mungkin ingin menambah openthread pohon membangun dan platform perpustakaan Anda.

Sebuah cara mudah untuk menambahkan definisi ini adalah dengan menggunakan ot-config sasaran. Target ini merupakan target palsu yang digunakan semata-mata untuk tujuan mendefinisikan konfigurasi dan dihubungkan terhadap hampir semua target CMake di openthread .

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

Tambahkan subdirektori ke pohon build

Setelah konfigurasi tingkat atas ditentukan, saatnya menambahkan subdirektori lain ke pohon build.

The src folder di mana platform-abstration kode sumber lapisan berada. The third_party folder berisi kode pihak ketiga.

Jika Anda ingin memasukkan aplikasi sampel di repo, membuat examples folder dan menambahkannya ke pohon membangun juga.

add_subdirectory(src)
add_subdirectory(third_party)

# Optional
add_subdirectory(examples)

The src direktori

Ini adalah jantung dari repositori dan di mana lapisan abstraksi platform diimplementasikan. Ini juga berisi beberapa file lain yang diperlukan.

src/arm-none-eabi.cmake

Ini adalah file rantai alat yang mendefinisikan beberapa variabel yang digunakan CMake dalam proses pembuatan. Sebuah titik yang baik mulai akan menyalin yang ot-efr32 versi file ini dan memodifikasi agar sesuai platform Anda.

src/CMakeLists.txt

Di sinilah Anda menentukan file sumber, menyertakan jalur, dan flag kompiler untuk pustaka platform Anda. Sebuah contoh yang baik dari file ini untuk repositori yang hanya mendukung platform tunggal adalah dari ot-cc2538 .

Dukungan untuk beberapa platform dalam satu repositori dimungkinkan dan beberapa repositori platform dapat digunakan sebagai referensi. Lihat ot-efr32 dan ot-nrf528xx .