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
여기에서 플랫폼 라이브러리의 소스 파일, include 경로, 컴파일러 플래그를 정의합니다. 단일 플랫폼만 지원하는 저장소의 이 파일의 좋은 예는 ot-cc2538
입니다.
단일 저장소에서 여러 플랫폼을 지원할 수 있으며 여러 플랫폼 저장소를 참조로 사용할 수 있습니다. ot-efr32 및 ot-nrf528xx를 참고하세요.