Xác định quy tắc CMake

Xem nguồn trên GitHub

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

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 là ot-efr32 bằng phiên bản 0.0.1. Chúng tôi cũng định nghĩa biến EFR32_PLATFORM_VALUES là danh sách các nền tảng efr32 được 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 được chấp nhận.

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 có một bước kiểm tra để biết việc huỷ các bản dựng được khởi 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. Các ứng dụng mẫu OpenThread dùng biến này để liên kết với nền tảng của bạn.

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

Các tuỳ chọn OpenThread CMake

Bạn có thể bật/tắt các 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, silabs-mbedtls thư viện mbedTLS bên ngoài đượ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ách sử dụ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 xây dựng

Cách đưa mô-đun phụ openthread vào cây xây dựng:

add_subdirectory(openthread)

Chuyển thuộc tính bản dựng sang 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 của bản dựng (chẳng hạn như định nghĩa, các tuỳ chọn và đưa vào các thư mục) mà bạn có thể muốn thêm vào cây bản dựng openthread cũng như vào thư viện nền tảng.

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 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 các thư mục con vào cây bản dựng

Bây giờ, khi đã định cấu hình xong 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 xây dựng.

Thư mục src là nơi đặt mã nguồn lớp trừu 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 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à trung tâm 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 vài 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 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 để 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 của bạn. Một ví dụ điển hình về tệp này cho kho lưu trữ chỉ hỗ trợ một nền tảng duy nhất là của ot-cc2538.

Có thể hỗ trợ nhiều nền tảng trong một kho lưu trữ duy nhất và một số kho lưu trữ nền tảng có thể dùng làm tệp đối chiếu. Hãy xem ot-efr32ot-nrf528xx.