Hệ thống xây dựng CMake dựa vào các tệp CMakeLists.txt
xác định các mục tiêu bản dựng. CMakeLists.txt
ở thư mục gốc của kho lưu trữ là phần trên cùng của cây bản dựng và là nơi thích hợp để bắt đầu xác định các mục tiêu, tuỳ chọn và macro khác nhau được sử dụng trong quá trình xây dựng.
Giá trị đầu tiên cần xác định là tên dự án và các nền tảng được hỗ trợ.
Trong ví dụ này, chúng ta đặt tên dự án thành ot-efr32
với phiên bản 0.0.1
. Chúng ta cũng xác định một biến EFR32_PLATFORM_VALUES
là danh sách các nền tảng efr32
được ot-efr32
hỗ trợ. Để minh hoạ ví dụ này, chúng ta đã xác định nhiều nền tảng, nhưng bạn cũng có thể chỉ xác định một nền tảng cho biến _PLATFORM_VALUES
.
cmake_minimum_required(VERSION 3.10.2) project(ot-efr32 VERSION 0.0.1) set(EFR32_PLATFORM_VALUES "efr32mg1" "efr32mg12" "efr32mg13" "efr32mg21" )
Tệp CMakeLists.txt
bao gồm một quy trình kiểm tra để huỷ các bản dựng được chạy cho các nền tảng không được hỗ trợ.
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()
Biến tiếp theo cần được xác định là OT_PLATFORM_LIB
. Biến này được các ứng dụng mẫu OpenThread sử dụng để liên kết với nền tảng của bạn.
set(OT_PLATFORM_LIB "openthread-${EFR32_PLATFORM}")
Tuỳ chọn CMake OpenThread
Bạn có thể bật/tắt/định cấu hình nhiều tính năng trong OpenThread bằng cách xác định các biến CMake.
Trên nền tảng ot-efr32
, thư viện mbedTLS bên ngoài silabs-mbedtls
được sử dụng.
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})
Xác định thư mục đầu ra
Bạn có thể định cấu hình thư mục đầu ra cho các tệp mục tiêu khác nhau bằng các biến dưới đây.
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)
Thêm OpenThread vào cây bản dựng
Cách đưa mô-đun con openthread
vào cây bản dựng:
add_subdirectory(openthread)
Truyền các thuộc tính bản dựng đến OpenThread
Phần cuối cùng của tệp này cho phép bạn xác định các thuộc tính bản dựng (chẳng hạn như định nghĩa, tuỳ chọn và bao gồm các thư mục) mà bạn có thể muốn thêm vào cây bản dựng openthread
và vào thư viện nền tảng.
Bạn có thể thêm các định nghĩa này một cách thuận tiện bằng cách sử dụng mục tiêu ot-config
. Mục tiêu này là một mục tiêu giả chỉ được dùng cho mục đích xác định cấu hình và được liên kết với hầu hết các mục tiêu CMake trong 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 )
Thêm thư mục con vào cây bản dựng
Giờ đây, khi đã xác định cấu hình cấp cao nhất, đã đến lúc thêm các thư mục con khác vào cây bản dựng.
Thư mục src
là nơi chứa mã nguồn lớp trừu tượng nền tảng. Thư mục third_party
chứa mọi mã của bên thứ ba.
Nếu bạn muốn đưa các ứng dụng mẫu vào kho lưu trữ, hãy tạo một thư mục examples
và thêm thư mục đó vào cây bản dựng.
add_subdirectory(src) add_subdirectory(third_party) # Optional add_subdirectory(examples)
Thư mục src
Đây là phần cốt lõi của kho lưu trữ và là nơi triển khai lớp trừu tượng của nền tảng. Tệp này cũng chứa một số tệp bắt buộc khác.
src/arm-none-eabi.cmake
Đây là tệp chuỗi công cụ xác định một số biến mà CMake sử dụng trong quá trình tạo bản dựng. Bạn nên bắt đầu bằng cách sao chép phiên bản ot-efr32
của tệp này rồi sửa đổi tệp đó cho phù hợp với nền tảng của bạn.
src/CMakeLists.txt
Đây là nơi bạn xác định các tệp nguồn, bao gồm cả đường dẫn và cờ trình biên dịch cho thư viện nền tảng. Một ví dụ điển hình về tệp này cho một kho lưu trữ chỉ hỗ trợ một nền tảng là từ ot-cc2538
.
Bạn có thể hỗ trợ nhiều nền tảng trong một kho lưu trữ và có thể sử dụng một số kho lưu trữ nền tảng làm tài liệu tham khảo. Xem ot-efr32 và ot-nrf528xx.