Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기

CMake 규칙 정의

GitHub에서 소스 보기

CMake 빌드 시스템은 빌드 타겟을 정의하는 CMakeLists.txt 파일을 사용합니다. 저장소 루트의 CMakeLists.txt는 빌드 트리의 맨 위에 있으며 빌드 프로세스에서 사용되는 다양한 대상, 옵션 및 매크로를 정의하는 데 적합한 위치입니다.

가장 먼저 정의해야 하는 값은 프로젝트 이름 및 지원되는 플랫폼입니다.

이 예시에서는 프로젝트 이름을ot-efr32 다음 버전으로 바꿉니다.0.0.1 에서 확인할 수 있습니다. 또한 ot-efr32에서 지원하는 efr32 플랫폼 목록인 EFR32_PLATFORM_VALUES 변수를 정의합니다. 이 예에서는 여러 플랫폼을 정의했지만 _PLATFORM_VALUES 변수에 단일 플랫폼을 사용하는 것도 괜찮습니다.

cmake_minimum_required(VERSION 3.10.2)
project(ot-efr32 VERSION 0.0.1)

set(EFR32_PLATFORM_VALUES
    "efr32mg1"
    "efr32mg12"
    "efr32mg13"
    "efr32mg21"
)

CMakeLists.txt 파일에는 지원되지 않는 플랫폼에 대해 실행된 빌드를 취소하는 검사가 포함되어 있습니다.

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()

정의해야 하는 다음 변수는 OT_PLATFORM_LIB입니다. 이 변수는 OpenThread 예시 애플리케이션에서 플랫폼에 연결하는 데 사용됩니다.

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

OpenThread CMake 옵션

CMake 변수를 정의하여 OpenThread의 다양한 기능을 사용 설정/사용 중지/구성할 수 있습니다.

ot-efr32 플랫폼에서는 외부 mbedTLS 라이브러리(silabs-mbedtls)가 사용됩니다.

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})

출력 디렉터리 정의

다른 변수를 위한 출력 디렉터리를 아래 변수를 사용하여 구성할 수 있습니다.

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)

빌드 트리에 OpenThread 추가

빌드 트리에 openthread 하위 모듈을 포함하려면 다음 안내를 따르세요.

add_subdirectory(openthread)

OpenThread에 빌드 속성 전달

이 파일의 마지막 섹션에서는 openthread 빌드 트리 및 플랫폼 라이브러리에 추가할 빌드 속성 (예: 정의, 옵션 및 디렉터리 포함)을 정의할 수 있습니다.

ot-config 대상을 사용하면 이 정의를 편리하게 추가할 수 있습니다. 이 타겟은 구성 정의 목적으로만 사용되며 openthread의 거의 모든 CMake 타겟과 연결되어 있는 가짜 타겟입니다.

# 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
)

빌드 트리에 하위 디렉터리 추가

최상위 구성이 정의되었으므로 빌드 트리에 다른 하위 디렉터리를 추가할 차례입니다.

src 폴더는 플랫폼 추상화 계층 소스 코드가 있는 위치입니다. third_party 폴더에는 타사 코드가 포함되어 있습니다.

샘플 애플리케이션을 저장소에 포함하려면 examples 폴더를 만들어 빌드 트리에도 추가합니다.

add_subdirectory(src)
add_subdirectory(third_party)

# Optional
add_subdirectory(examples)

src 디렉터리

이는 저장소의 핵심이며 플랫폼 추상화 계층이 구현되는 곳입니다. 또한 몇 가지 다른 필수 파일도 포함되어 있습니다.

src/arm-none-eabi.cmake

이 파일은 CMake에서 빌드 프로세스에서 사용하는 변수를 정의하는 도구 모음 파일입니다. 이 파일의 ot-efr32 버전을 복사한 후 플랫폼에 맞게 수정하는 것이 좋습니다.

src/CMakeLists.txt

여기에서 소스 파일, 경로, 플랫폼 라이브러리의 컴파일러 플래그를 정의합니다. 단일 플랫폼만 지원하는 저장소에 대한 이 파일의 좋은 예는 ot-cc2538에 있습니다.

단일 저장소에서 여러 플랫폼을 지원할 수 있으며 여러 플랫폼 저장소를 참조로 사용할 수 있습니다. ot-efr32ot-nrf528xx를 참조하세요.