From f7555a54f34a28e0cb12077302c6dd19d4406e71 Mon Sep 17 00:00:00 2001 From: Yakun Xu Date: Sat, 7 Dec 2019 01:03:17 +0800 Subject: [PATCH] [posix-host] add cmake support (#4379) --- .travis/script.sh | 15 +++++ CMakeLists.txt | 14 ++++- src/posix/CMakeLists.txt | 98 +++++++++++++++++++++++++++++++ src/posix/platform/CMakeLists.txt | 71 ++++++++++++++++++++++ 4 files changed, 195 insertions(+), 3 deletions(-) create mode 100644 src/posix/CMakeLists.txt create mode 100644 src/posix/platform/CMakeLists.txt diff --git a/.travis/script.sh b/.travis/script.sh index b64d1474e..0b0598c4c 100755 --- a/.travis/script.sh +++ b/.travis/script.sh @@ -515,6 +515,21 @@ build_samr21() { } [ $BUILD_TARGET != posix-app-pty ] || { + # check daemon mode + git checkout -- . || die + git clean -xfd || die + mkdir build && cd build || die + cmake -GNinja -DOT_PLATFORM=posix-host -DOT_DAEMON=ON .. || die + ninja || die + cd .. || die + + git checkout -- . || die + git clean -xfd || die + mkdir build && cd build || die + cmake -GNinja -DOT_PLATFORM=posix-host .. || die + ninja || die + cd .. || die + ./bootstrap .travis/check-posix-app-pty || die } diff --git a/CMakeLists.txt b/CMakeLists.txt index 0901ff5d2..00ffb1409 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,13 +54,19 @@ set(OT_PLATFORM "none" CACHE STRING "Target platform chosen by the user at confi ot_get_platforms(OT_EXAMPLE_PLATFORMS) set_property(CACHE OT_PLATFORM PROPERTY STRINGS ${OT_EXAMPLE_PLATFORMS}) if(NOT OT_PLATFORM IN_LIST OT_EXAMPLE_PLATFORMS) - message(FATAL_ERROR "Platform unknown: ${OT_PLATFORM}") + if(NOT OT_PLATFORM STREQUAL "posix-host") + message(FATAL_ERROR "Platform unknown: ${OT_PLATFORM}") + endif() endif() list(APPEND OT_PUBLIC_INCLUDES ${PROJECT_BINARY_DIR}/etc/cmake) list(APPEND OT_PUBLIC_INCLUDES ${PROJECT_SOURCE_DIR}/etc/cmake) list(APPEND OT_PUBLIC_INCLUDES ${PROJECT_SOURCE_DIR}/include) -if(NOT OT_PLATFORM MATCHES "none") + +if(OT_PLATFORM STREQUAL "posix-host") + list(APPEND OT_PRIVATE_INCLUDES ${PROJECT_SOURCE_DIR}/src/posix/platform) + add_subdirectory("${PROJECT_SOURCE_DIR}/src/posix/platform") +elseif(NOT OT_PLATFORM MATCHES "none") list(APPEND OT_PRIVATE_INCLUDES ${PROJECT_SOURCE_DIR}/examples/platforms/${OT_PLATFORM}) add_subdirectory("${PROJECT_SOURCE_DIR}/examples/platforms/${OT_PLATFORM}") endif() @@ -76,7 +82,9 @@ if(OT_BUILTIN_MBEDTLS) ) endif() -if(NOT OT_PLATFORM MATCHES "none") +if(OT_PLATFORM STREQUAL "posix-host") + add_subdirectory(src/posix) +elseif(NOT OT_PLATFORM MATCHES "none") add_subdirectory(examples) endif() diff --git a/src/posix/CMakeLists.txt b/src/posix/CMakeLists.txt new file mode 100644 index 000000000..920584f9b --- /dev/null +++ b/src/posix/CMakeLists.txt @@ -0,0 +1,98 @@ +# +# Copyright (c) 2019, The OpenThread Authors. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of the copyright holder nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# + +set(COMMON_INCLUDES + ${OT_PUBLIC_INCLUDES} + ${OT_PRIVATE_INCLUDES} + ${PROJECT_SOURCE_DIR}/src/core + ${PROJECT_SOURCE_DIR}/src/posix/platform +) + +if(OT_DAEMON) + add_executable(ot-daemon + main.c + ) + + target_include_directories(ot-daemon PRIVATE ${COMMON_INCLUDES}) + + target_compile_definitions(ot-daemon PRIVATE + OPENTHREAD_POSIX_APP_TYPE=2 + ) + + target_link_libraries(ot-daemon PRIVATE + openthread-cli-ftd + ${OT_PLATFORM_LIB} + openthread-ftd + ${OT_PLATFORM_LIB} + openthread-ncp-ftd + mbedcrypto + ) + + add_executable(ot-ctl + client.c + ) + + target_include_directories(ot-ctl PRIVATE ${COMMON_INCLUDES}) +else() + add_executable(ot-cli + main.c + ) + + target_include_directories(ot-cli PRIVATE ${COMMON_INCLUDES}) + + target_compile_definitions(ot-cli PRIVATE + OPENTHREAD_POSIX_APP_TYPE=2 + ) + + target_link_libraries(ot-cli + openthread-cli-ftd + ${OT_PLATFORM_LIB} + openthread-ftd + ${OT_PLATFORM_LIB} + mbedcrypto + openthread-ncp-ftd + ) + + add_executable(ot-ncp + main.c + ) + target_include_directories(ot-ncp PRIVATE ${COMMON_INCLUDES}) + + target_compile_definitions(ot-ncp PRIVATE + OPENTHREAD_POSIX_APP_TYPE=1 + ) + + target_link_libraries(ot-ncp + openthread-ncp-ftd + ${OT_PLATFORM_LIB} + openthread-ftd + ${OT_PLATFORM_LIB} + mbedcrypto + openthread-ncp-ftd + ) +endif() diff --git a/src/posix/platform/CMakeLists.txt b/src/posix/platform/CMakeLists.txt new file mode 100644 index 000000000..c232e5470 --- /dev/null +++ b/src/posix/platform/CMakeLists.txt @@ -0,0 +1,71 @@ +# +# Copyright (c) 2019, The OpenThread Authors. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of the copyright holder nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# + +set(OT_PLATFORM_LIB "openthread-posix" PARENT_SCOPE) + +option(OT_DAEMON "Enable daemon mode" OFF) +if(OT_DAEMON) + list(APPEND OT_PLATFORM_DEFINES "OPENTHREAD_ENABLE_POSIX_APP_DAEMON=1") +endif() + +list(APPEND OT_PLATFORM_DEFINES + "OPENTHREAD_CONFIG_ENABLE_DYNAMIC_LOG_LEVEL=1" + "OPENTHREAD_CONFIG_NCP_UART_ENABLE=1" + "OPENTHREAD_POSIX=1" + "OPENTHREAD_PROJECT_CORE_CONFIG_FILE=\"openthread-core-posix-config.h\"" +) +set(OT_PLATFORM_DEFINES ${OT_PLATFORM_DEFINES} PARENT_SCOPE) + +add_library(openthread-posix + alarm.c + entropy.c + hdlc_interface.cpp + logging.c + misc.c + netif.cpp + radio_spinel.cpp + settings.cpp + sim.c + system.c + uart.c + udp.cpp +) + +target_link_libraries(openthread-posix PUBLIC + util +) + +target_compile_definitions(openthread-posix PUBLIC ${OT_PLATFORM_DEFINES}) + +target_include_directories(openthread-posix PRIVATE + ${OT_PUBLIC_INCLUDES} + ${OT_PRIVATE_INCLUDES} + ${PROJECT_SOURCE_DIR}/src + ${PROJECT_SOURCE_DIR}/src/core + ${PROJECT_SOURCE_DIR}/src/posix/platform +)