Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Xác định quy tắc CMake

Xem nguồn trên GitHub

Hệ thống bản dựng CMake dựa trên các tệp CMakeLists.txt xác định mục tiêu bản dựng. CMakeLists.txt ở gốc kho lưu trữ của bạn là phần đầu của cây bản dựng và là một vị trí thích hợp để bắt đầu xác định các mục tiêu, tùy chọn và macro khác nhau dùng trong quá trình tạo bản dựng.

Các 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 tôi đặt tên dự án thành ot-efr32 và phiên bản 0.0.1. Chúng tôi cũng xác định một biến EFR32_PLATFORM_VALUES là danh sách nền tảng efr32 do ot-efr32 hỗ trợ. Trong ví dụ này, chúng tôi đã xác định nhiều nền tảng nhưng việc có một nền tảng duy nhất cho biến _PLATFORM_VALUES cũng không sao.

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 dấu kiểm cho phép hủy các bản dựng đã chạy trên 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 mà bạn cần xác định là OT_PLATFORM_LIB. Biến này được các ứng dụng ví dụ 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}")

Các tùy chọn OpenMake CMake

Các tính năng khác nhau trong Openthread có thể được bật/tắt/định cấu hình 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 sẽ đượ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 đích 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

Để đưa mô-đun openthread vào cây tạo:

add_subdirectory(openthread)

Chuyển 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, tùy chọn và bao gồm thư mục) mà bạn có thể muốn thêm vào cây bản dựng openthread và thư viện nền tảng của mình.

Một cách thuận tiện để thêm các định nghĩa này là sử dụng mục tiêu ot-config. Mục tiêu này là mục tiêu giả mạo chỉ được dùng để xác định cấu hình và được hầu hết tất cả các mục tiêu CMake trong openthread liên kết với nhau.

# 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

Bây giờ, khi cấu hình cấp cao nhất được xác định, đã đế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 đặt mã nguồn nền tảng của nền tảng. Thư mục third_party chứa mã của bên thứ ba.

Nếu bạn muốn đưa các ứng dụng mẫu vào repo, hãy tạo thư mục examples và thêm cả 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à trọng tâm của kho lưu trữ và là nơi triển khai lớp trừu tượng trên 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 công cụ xác định một số biến mà CMake sử dụng trong quá trình xây dựng. Bạn nên sao chép phiên bản ot-efr32 của tệp này và sửa đổi tệp cho phù hợp với nền tảng của mình.

src/CMakeLists.txt

Đây là nơi bạn xác định các tệp nguồn, bao gồm đường dẫn và cờ trình biên dịch cho thư viện nền tảng của mình. 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ể dùng một số kho lưu trữ nền tảng để làm tệp đối chiếu. Hãy xem ot-efr32ot-nrf528xx.