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 các tệp CMakeLists.txt để xác định các mục tiêu bản dựng. CMakeLists.txt ở 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 phù hợp để bắt đầu xác định các mục tiêu, tuỳ chọn và macro khác nhau được dùng trong quy trình xây dựng.

Những giá trị đầu tiên cần xác định là tên dự án và 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 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 cũng không sao cả khi chỉ có một nền tảng duy nhất 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 đã 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 ví dụ về 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 tuỳ chọn cho 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 nhiều tệp đích bằng cách sử dụng các biến bên dưới.

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 của bản dựng (chẳng hạn như định nghĩa, tuỳ chọn và thư mục) mà bạn nên thêm vào cây bản dựng openthread và các 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ả chỉ dùng cho mục đích xác định cấu hình và được hầu hết mọi mục tiêu CMake trong openthread liên kết đến.

# 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

Hiện tại, 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 chứa mã nguồn của lớp trừu tượng nền tảng. Thư mục third_party chứa bất kỳ mã của bên thứ ba nào.

Nếu bạn muốn đưa các ứng dụng mẫu vào kho lưu trữ này, 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 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 xây 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 và sửa đổi 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 đường dẫn và cờ trình biên dịch cho thư viện nền tảng của mình. 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 là từ ot-cc2538.

Một kho lưu trữ duy nhất có thể hỗ trợ nhiều nền tảng và bạn có thể dùng nhiều kho lưu trữ nền tảng để tham khảo. Hãy xem ot-efr32ot-nrf528xx.