Skip to content
Permalink
Browse files

net: openthread: Use repository provided by west

Move CMake ExternalProject integration of OpenThread to the
CMakeLists.txt file within the OpenThread fork.

Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
  • Loading branch information...
rlubos authored and carlescufi committed Jul 22, 2019
1 parent c6c20f0 commit ddf2230f44c3d15be1bc80aa223737fcf7804da2
Showing with 0 additions and 274 deletions.
  1. +0 −274 subsys/net/lib/openthread/CMakeLists.txt
@@ -1,277 +1,3 @@
# SPDX-License-Identifier: Apache-2.0

# Invoke OpenThread's external autoconf-based build system.
include(ExternalProject)

set(ep_base ${PROJECT_BINARY_DIR}/ext_proj)
set_property(DIRECTORY PROPERTY "EP_BASE" ${ep_base})

# Construct a list of commands to give to ExternalProject_Add()
#
# See https://cmake.org/cmake/help/latest/module/ExternalProject.html
# for documentation on ExternalProject_Add
set(cmd "")

set(ot_name ot)
list(APPEND cmd
${ot_name}
)

set(ot_STAMP_DIR ${ep_base}/Stamp/${ot_name})
set(ot_INSTALL_DIR ${ep_base}/Install/${ot_name})

#--Download step--------------
if(NOT EXTERNAL_PROJECT_PATH_OPENTHREAD)
# TODO: Point to a Zephyr fork
# Nov. 7
set_ifndef(ot_GIT_REPOSITORY "https://github.com/openthread/openthread.git")
set_ifndef(ot_GIT_TAG f9d757a161fea4775d033a1ce88cf7962fe24a93)
set_ifndef(ot_GIT_PROGRESS 1)

list(APPEND cmd
GIT_REPOSITORY ${ot_GIT_REPOSITORY}
GIT_TAG ${ot_GIT_TAG}
GIT_PROGRESS ${ot_GIT_PROGRESS}
)
endif()

#--Update/Patch step-------------

# An update step is not necessary because we are using a commit hash
# as a tag, and the code behind a hash cannot change.

# UPDATE_DISCONNECTED should be used when updates aren't needed, but
# for some reason we were not able to get this to work, so we use a
# dummy step to fake updating. This ensures that the git repo is not
# downloaded on every 'make' invocation.
list(APPEND cmd
UPDATE_COMMAND
${CMAKE_COMMAND} -E touch ${ot_STAMP_DIR}/${ot_name}-update
)

#--Configure step-------------
if(EXTERNAL_PROJECT_PATH_OPENTHREAD)
set(ot_SOURCE_DIR ${EXTERNAL_PROJECT_PATH_OPENTHREAD})

list(APPEND cmd
SOURCE_DIR ${ot_SOURCE_DIR}
)

else()
set(ot_SOURCE_DIR ${ep_base}/Source/${ot_name}) # TODO: Download dir?

# "If SOURCE_DIR is explicitly set to an existing directory the
# project will be built from it. Otherwise a download step must be
# specified using one of the DOWNLOAD_COMMAND, CVS_*, SVN_*, or URL
# options." -- CMake docs
endif()

# TODO: Can we omit this, does OpenThread need to use install?
# TODO: Move this to host-tools?
find_program(INSTALL install)

# It looks like OpenThread requires a *nix system to build for
# embedded.
#
# https://github.com/openthread/openthread/blob/master/examples/drivers/windows/README.md

# TODO: Use different includes for C and CXX
zephyr_get_include_directories_for_lang_as_string( C includes)
zephyr_get_system_include_directories_for_lang_as_string(C system_includes)
zephyr_get_compile_definitions_for_lang_as_string( C definitions)

zephyr_get_compile_options_for_lang_as_string(C c_options)
zephyr_get_compile_options_for_lang_as_string(CXX cxx_options)

# TODO: What happens if a CFLAG is added after this build script has
# been run?

# TODO: Does OpenThread need all flags, or just some? Should we
# whitelist, or blacklist flags?


# TODO: What is all this? $(dir $(realpath $(firstword $(MAKEFILE_LIST))))

set(exec_prefix zephyr)

set(commoncflags "-DOPENTHREAD_CONFIG_LOG_LEVEL=${CONFIG_OPENTHREAD_LOG_LEVEL}")
set(commoncflags "${commoncflags} -DOPENTHREAD_PROJECT_CORE_CONFIG_FILE=\\\"openthread-core-zephyr-config.h\\\"")
set(commoncflags "${commoncflags} -I${CMAKE_CURRENT_LIST_DIR}/platform")

get_property(RULE_LAUNCH_COMPILE GLOBAL PROPERTY RULE_LAUNCH_COMPILE)

set(configure_flags
"INSTALL=${INSTALL} -p"
"CPP=${CMAKE_C_COMPILER} -E" # TODO: Find CPP in toolchain-gcc.cmake and use that instead?
"CC=${RULE_LAUNCH_COMPILE} ${CMAKE_C_COMPILER}"
"CXX=${RULE_LAUNCH_COMPILE} ${CMAKE_CXX_COMPILER}"
OBJC="" # TODO: Omit this?
"OBJCXX=${OBJCXX}" # TODO: Omit this?
"AR=${CMAKE_AR}"
"RANLIB=${CMAKE_RANLILB}"
"NM=${CROSS_COMPILE}nm" # TODO: Find NM in toolchain-gcc.cmake and use that instead?
"STRIP=${CMAKE_STRIP}"
"CPPFLAGS=${definitions} ${commoncflags} ${includes} ${system_includes}"
"CFLAGS=${c_options} ${commoncflags} ${includes} ${system_includes}"
"CXXFLAGS=${cxx_options} ${commoncflags} ${includes} ${system_includes}" # TODO: Do we need includes here?
LDFLAGS="" # TODO: What does a networking stack need to use the linker for?

--host=arm-none-eabi
--prefix=/
--exec-prefix=/${exec_prefix}
--target=arm-none-eabi # TODO: Is Kconfig expressing that OT is ARM-only?
--enable-no-executables-hack
--disable-docs
--with-platform-info=zephyr
)

# TODO: Simplify
set(ZEPHYR_MBEDTLS_CPPFLAGS "${ZEPHYR_MBEDTLS_CPPFLAGS} ")
set(ZEPHYR_MBEDTLS_CPPFLAGS "-DMBEDTLS_CONFIG_FILE='\"mbedtls-config.h\"'")
set(ZEPHYR_MBEDTLS_CPPFLAGS "${ZEPHYR_MBEDTLS_CPPFLAGS} -DMBEDTLS_USER_CONFIG_FILE='\"${CMAKE_CURRENT_SOURCE_DIR}/zephyr-mbedtls-config.h\"'")
set(ZEPHYR_MBEDTLS_CPPFLAGS "${ZEPHYR_MBEDTLS_CPPFLAGS} -I${ot_SOURCE_DIR}/third_party/mbedtls")
set(ZEPHYR_MBEDTLS_CPPFLAGS "${ZEPHYR_MBEDTLS_CPPFLAGS} -I${ot_SOURCE_DIR}/third_party/mbedtls/repo/include")
set(ZEPHYR_MBEDTLS_CPPFLAGS "${ZEPHYR_MBEDTLS_CPPFLAGS} -I${ot_SOURCE_DIR}/third_party/mbedtls/repo/include/mbedtls")

list(APPEND configure_flags
"MBEDTLS_CPPFLAGS=${ZEPHYR_MBEDTLS_CPPFLAGS}"
)

if(CONFIG_OPENTHREAD_FTD)
list(APPEND configure_flags
--enable-ftd
)
elseif(CONFIG_OPENTHREAD_MTD)
list(APPEND configure_flags
--enable-mtd
)
endif()

if(CONFIG_OPENTHREAD_COMMISSIONER)
list(APPEND configure_flags
--enable-commissioner
)
endif()

if(CONFIG_OPENTHREAD_JAM_DETECTION)
list(APPEND configure_flags
--enable-jam-detection
)
endif()

if(CONFIG_OPENTHREAD_JOINER)
list(APPEND configure_flags
--enable-joiner
)
endif()

if(CONFIG_OPENTHREAD_DHCP6_CLIENT)
list(APPEND configure_flags
--enable-dhcp6-client
)
endif()

if(CONFIG_OPENTHREAD_DHCP6_SERVER)
list(APPEND configure_flags
--enable-dhcp6-server
)
endif()

if(CONFIG_OPENTHREAD_SHELL)
list(APPEND configure_flags
--enable-cli
)
endif()

if(CONFIG_OPENTHREAD_DIAG)
list(APPEND configure_flags
--enable-diag
)
endif()

list(APPEND cmd
CONFIGURE_COMMAND ./configure ${configure_flags}
)

#--Build step-----------------

# Invoke OpenThread's build system from the root of it's source
# directory
# TODO: Support out-of-source builds
set(ot_BINARY_DIR ${ot_SOURCE_DIR})
list(APPEND cmd
BINARY_DIR ${ot_BINARY_DIR}
INSTALL_DIR ${ot_INSTALL_DIR}
)

set(make_flags
-j99 # TODO: Why 99?
--no-print-directory
)

list(APPEND cmd
BUILD_COMMAND make ${make_flags} all
INSTALL_COMMAND make ${make_flags} DESTDIR=${ot_INSTALL_DIR} install
)

# TODO: Find out how to make this work.
set(ot_include_dir ${ot_SOURCE_DIR}/include)
# For platform.h
set(ot_platforms_dir ${ot_SOURCE_DIR}/examples/platforms)

# TODO: Is this only needed by alarm.c?
zephyr_system_include_directories(${ot_include_dir})
zephyr_system_include_directories(${ot_platforms_dir})

# TODO: Why doesn't app get this path from the above function call?
target_include_directories(app SYSTEM PRIVATE ${ot_include_dir})
target_include_directories(app SYSTEM PRIVATE ${ot_platforms_dir})

#set_target_properties(ot_lib PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${ot_include_dir})
zephyr_include_directories(${ot_include_dir})
zephyr_include_directories(${ot_platforms_dir})

# Determine which libs should be linked in
set(ot_libs
openthread-platform-utils
mbedcrypto
)
if(CONFIG_OPENTHREAD_FTD)
list(APPEND ot_libs openthread-ftd)
set(cli_lib openthread-cli-ftd)
elseif(CONFIG_OPENTHREAD_MTD)
list(APPEND ot_libs openthread-mtd)
set(cli_lib openthread-cli-mtd)
endif()

if(CONFIG_OPENTHREAD_SHELL)
list(APPEND ot_libs ${cli_lib})
endif()

foreach(ot_lib ${ot_libs})
set(build_byproducts ${build_byproducts} ${ot_INSTALL_DIR}/${exec_prefix}/lib/lib${ot_lib}.a)
endforeach()

list(APPEND cmd
BUILD_BYPRODUCTS ${build_byproducts}
)

ExternalProject_Add(${cmd})

ExternalProject_Add_Step(
${ot_name} bootstrap # Names of project and custom step
COMMAND ./bootstrap # Command line invoked by this step
COMMENT "bootstrapping..." # Text printed when step executes
DEPENDEES download # Steps on which this step depends
DEPENDERS configure # Steps that depend on this step
WORKING_DIRECTORY ${ot_SOURCE_DIR}
)

# Create wrapper CMake libraries
foreach(ot_lib ${ot_libs})
zephyr_library_import(${ot_lib}
${ot_INSTALL_DIR}/${exec_prefix}/lib/lib${ot_lib}.a
)
endforeach()

add_subdirectory(platform)

0 comments on commit ddf2230

Please sign in to comment.
You can’t perform that action at this time.