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

Menentukan Aturan CMake

Lihat sumber di GitHub

Sistem build CMake bergantung pada file CMakeLists.txt yang menentukan target build. CMakeLists.txt di root repositori Anda adalah bagian atas hierarki build dan merupakan tempat yang baik untuk mulai menentukan berbagai target, opsi, dan makro yang digunakan dalam proses build.

Nilai pertama yang ditetapkan adalah nama project dan platform yang didukung.

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

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

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

File CMakeLists.txt menyertakan pemeriksaan yang dibatalkan build yang 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 ditentukan adalah OT_PLATFORM_LIB. Variabel ini digunakan oleh aplikasi contoh OpenThread untuk ditautkan ke platform Anda.

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

Opsi CMake OpenThread

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

Di platform ot-efr32, library mbedTLS eksternal 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})

Menentukan direktori output

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

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)

Menambahkan OpenThread ke hierarki build

Untuk menyertakan submodul openthread dalam hierarki build:

add_subdirectory(openthread)

Meneruskan properti build ke OpenThread

Bagian terakhir file ini memungkinkan Anda menentukan properti build (seperti definisi, opsi, dan menyertakan direktori) yang mungkin ingin Anda tambahkan ke struktur build openthread dan ke library platform Anda.

Cara yang mudah untuk menambahkan definisi ini adalah dengan menggunakan target ot-config. Target ini adalah target palsu yang digunakan semata-mata untuk tujuan penentuan konfigurasi dan ditautkan oleh 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
)

Menambahkan subdirektori ke hierarki build

Setelah konfigurasi level atas ditentukan, sekarang saatnya menambahkan subdirektori lain ke hierarki build.

Folder src adalah tempat kode sumber lapisan abstrasi platform berada. Folder third_party berisi kode pihak ketiga.

Jika Anda ingin menyertakan contoh aplikasi dalam repo, buat folder examples dan tambahkan juga ke hierarki build.

add_subdirectory(src)
add_subdirectory(third_party)

# Optional
add_subdirectory(examples)

Direktori src

Ini adalah inti dari repositori dan merupakan tempat lapisan abstraksi platform diterapkan. File ini juga berisi beberapa file wajib lainnya.

src/arm-none-eabi.cmake

Ini adalah file toolchain yang menentukan beberapa variabel yang digunakan CMake dalam proses build. Titik awal yang baik adalah menyalin versi ot-efr32 file ini dan mengubahnya agar sesuai dengan platform Anda.

src/CMakeLists.txt

Di sinilah Anda menentukan file sumber, termasuk jalur, dan flag compiler untuk library platform Anda. Contoh yang bagus dari file ini untuk repositori yang hanya mendukung satu platform 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.