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 akan ditentukan 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
. Untuk contoh ini, kami telah menentukan beberapa platform, tetapi kami juga dapat menggunakan satu platform untuk variabel _PLATFORM_VALUES
.
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 membatalkan 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 harus 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 direktori direktori) yang mungkin ingin Anda tambahkan ke hierarki build openthread
dan ke library platform.
Cara yang mudah untuk menambahkan definisi ini adalah dengan menggunakan target ot-config
. Target ini adalah target palsu yang hanya digunakan untuk menentukan konfigurasi dan ditautkan oleh hampir semua target CMake dalam 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 tingkat atas ditentukan, kini saatnya untuk 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 aplikasi contoh 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 jantung repositori dan tempat lapisan abstraksi platform diimplementasikan. File ini juga berisi beberapa file lain yang diperlukan.
src/arm-none-eabi.cmake
Ini adalah file toolchain yang menentukan beberapa variabel yang digunakan CMake dalam proses build. Anda dapat menyalin versi ot-efr32
file ini dan mengubahnya agar sesuai dengan platform Anda.
src/CMakeLists.txt
Di sinilah Anda menentukan file sumber, menyertakan jalur, dan flag compiler untuk library platform Anda. Contoh 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.