blob: 52b82181f70fbd3749a6999ec706beee8e00df5c [file] [log] [blame]
# ##############################################################################
# apps/netutils/connectedhomeip/CMakeLists.txt
#
# Licensed to the Apache Software Foundation (ASF) under one or more contributor
# license agreements. See the NOTICE file distributed with this work for
# additional information regarding copyright ownership. The ASF licenses this
# file to you under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
#
# ##############################################################################
if(CONFIG_MATTER)
include(ExternalProject)
function(chip_download_and_patch)
# parse arguments into variables
nuttx_parse_function_args(
FUNC
chip_download_and_patch
ONE_VALUE
NAME
URL
SOURCE_DIR
BINARY_DIR
TIMEOUT
MULTI_VALUE
PATCH_LIST
ARGN
${ARGN})
if(NOT EXISTS ${SOURCE_DIR})
FetchContent_Declare(
${NAME}_fetch
URL ${URL} SOURCE_DIR ${SOURCE_DIR} BINARY_DIR ${BINARY_DIR}
DOWNLOAD_NO_PROGRESS true
TIMEOUT ${TIMEOUT})
FetchContent_GetProperties(${NAME}_fetch)
if(NOT ${NAME}_fetch_POPULATED)
FetchContent_Populate(${NAME}_fetch)
endif()
if(PATCH_LIST)
foreach(PATCH ${PATCH_LIST})
execute_process(COMMAND sh -c "patch -p1 < ${PATCH}"
WORKING_DIRECTORY ${SOURCE_DIR})
endforeach()
endif()
endif()
endfunction()
get_filename_component(
CHIP_ROOT ${NUTTX_APPS_DIR}/netutils/connectedhomeip/connectedhomeip
REALPATH)
chip_download_and_patch(
NAME
chip
URL
https://github.com/project-chip/connectedhomeip/archive/refs/tags/v1.2.0.1.zip
SOURCE_DIR
${CMAKE_CURRENT_LIST_DIR}/connectedhomeip
BINARY_DIR
${CMAKE_BINARY_DIR}/apps/netutils/connectedhomeip
TIMEOUT
90
PATCH_LIST
${CMAKE_CURRENT_SOURCE_DIR}/0001-chip-add-compile-support-for-NuttX.patch)
chip_download_and_patch(
NAME
pigweed
URL
https://github.com/google/pigweed/archive/refs/heads/main.zip
SOURCE_DIR
${CMAKE_CURRENT_LIST_DIR}/pigweed
BINARY_DIR
${CMAKE_BINARY_DIR}/apps/netutils/connectedhomeip
TIMEOUT
90)
chip_download_and_patch(
NAME
nlio
URL
https://github.com/nestlabs/nlio/archive/refs/tags/1.1.8.zip
SOURCE_DIR
${CMAKE_CURRENT_LIST_DIR}/nlio
BINARY_DIR
${CMAKE_BINARY_DIR}/apps/netutils/connectedhomeip
TIMEOUT
30)
chip_download_and_patch(
NAME
nlassert
URL
https://github.com/nestlabs/nlassert/archive/refs/tags/1.1.8.zip
SOURCE_DIR
${CMAKE_CURRENT_LIST_DIR}/nlassert
BINARY_DIR
${CMAKE_BINARY_DIR}/apps/netutils/connectedhomeip
TIMEOUT
30)
chip_download_and_patch(
NAME
nlunit-test
URL
https://github.com/nestlabs/nlunit-test/archive/refs/tags/1.0.9.zip
SOURCE_DIR
${CMAKE_CURRENT_LIST_DIR}/nlunit-test
BINARY_DIR
${CMAKE_BINARY_DIR}/apps/netutils/connectedhomeip
TIMEOUT
30)
chip_download_and_patch(
NAME
inipp
URL
https://github.com/mcmtroffaes/inipp/archive/refs/tags/1.0.12.zip
SOURCE_DIR
${CMAKE_CURRENT_LIST_DIR}/inipp
BINARY_DIR
${CMAKE_BINARY_DIR}/apps/netutils/connectedhomeip
TIMEOUT
30)
get_filename_component(GN_ROOT_TARGET ${CHIP_ROOT}/config/nuttx/chip-gn
REALPATH)
get_filename_component(COMMON_CMAKE_SOURCE_DIR
${CHIP_ROOT}/config/common/cmake REALPATH)
include(${COMMON_CMAKE_SOURCE_DIR}/chip_gn_args.cmake)
include(${COMMON_CMAKE_SOURCE_DIR}/chip_gn.cmake)
set(nuttx_include_dirs)
get_target_property(include_dirs nuttx NUTTX_INCLUDE_DIRECTORIES)
list(APPEND nuttx_include_dirs ${include_dirs})
get_target_property(include_dirs nuttx INCLUDE_DIRECTORIES)
list(APPEND nuttx_include_dirs ${include_dirs})
get_target_property(include_dirs mbedtls INCLUDE_DIRECTORIES)
list(APPEND nuttx_include_dirs ${include_dirs})
set(MATTER_INCDIR
${nuttx_include_dirs}
${CMAKE_BINARY_DIR}/apps/netutils/connectedhomeip/gen/include
${NUTTX_APPS_DIR}/netutils/jsoncpp/jsoncpp/include
inipp
nlio/include
nlassert/include
connectedhomeip/src
connectedhomeip/src/include
connectedhomeip/src/lib/dnssd
connectedhomeip/src/app/util/mock/include
connectedhomeip/zzz_generated
connectedhomeip/zzz_generated/lighting-app
connectedhomeip/zzz_generated/app-common
connectedhomeip/src/platform/Linux
connectedhomeip/examples/platform/linux
connectedhomeip/examples/lighting-app/lighting-common/include)
set(MATTER_FLAGS
-DCHIP_HAVE_CONFIG_H
-std=c++17
-Wno-undef
-DCHIP_ADDRESS_RESOLVE_IMPL_INCLUDE_HEADER=<lib/address_resolve/AddressResolve_DefaultImpl.h>
)
set(EXTERNAL_MATTER_INCDIR)
foreach(estring ${MATTER_INCDIR})
list(APPEND EXTERNAL_MATTER_INCDIR "\"${estring}\"")
endforeach()
matter_add_gn_arg_string("nuttx_ar" ${CMAKE_AR})
matter_add_gn_arg_string("nuttx_cc" ${CMAKE_C_COMPILER})
matter_add_gn_arg_string("nuttx_cxx" ${CMAKE_CXX_COMPILER})
matter_add_flags("-D__NuttX__ ")
if(CONFIG_ARCH_SIM)
if(CONFIG_SIM_M32)
matter_add_gn_arg_string("target_cpu" "x86")
else()
matter_add_gn_arg_string("target_cpu" "x86_64")
endif()
elseif(CONFIG_ARCH_ARM)
matter_add_gn_arg_string("target_cpu" "arm")
elseif(CONFIG_ARCH_RISCV)
matter_add_gn_arg_string("target_cpu" "riscv")
matter_add_gn_arg_string("riscv_arch" "${ARCHTYPE}${ARCHCPUEXTFLAGS}")
if(CONFIG_ARCH_DPFPU)
matter_add_gn_arg_string("riscv_abi" "${ARCHABITYPE}d")
elseif(CONFIG_ARCH_FPU)
matter_add_gn_arg_string("riscv_abi" "${ARCHABITYPE}f")
else()
matter_add_gn_arg_string("riscv_abi" "${ARCHABITYPE}")
endif()
if(CONFIG_ARCH_RV32)
if(${ARCHCPUEXTFLAGS} STREQUAL imc)
matter_add_gn_arg_string("riscv_cpu" "sifive-e20")
elseif(${ARCHCPUEXTFLAGS} STREQUAL imac)
matter_add_gn_arg_string("riscv_cpu" "sifive-e31")
elseif(${ARCHCPUEXTFLAGS} STREQUAL imafc)
matter_add_gn_arg_string("riscv_cpu" "sifive-e76")
endif()
else()
if(${ARCHCPUEXTFLAGS} STREQUAL imac)
matter_add_gn_arg_string("riscv_cpu" "sifive-s51")
elseif(${ARCHCPUEXTFLAGS} STREQUAL imafdc)
matter_add_gn_arg_string("riscv_cpu" "sifive-u54")
endif()
endif()
if(CONFIG_ARCH_RV64)
matter_add_flags("-mcmodel=medany")
endif()
endif()
matter_add_gn_arg_bool("chip_inet_config_enable_ipv4" CONFIG_NET_IPv4)
matter_add_gn_arg_bool("chip_enable_ble")
matter_add_gn_arg_bool("chip_example_lighting" true)
matter_add_gn_arg_bool("chip_config_network_layer_ble")
matter_get_compiler_flags_from_targets(nuttx)
matter_common_gn_args(PROJECT_CONFIG_INC_DIR ${EXTERNAL_MATTER_INCDIR})
matter_generate_args_tmp_file()
matter_build(
chip
LIB_SHELL
${CONFIG_CHIP_LIB_SHELL}
LIB_PW_RPC
${CONFIG_CHIP_PW_RPC}
LIB_TESTS
${CONFIG_CHIP_BUILD_TESTS}
LIB_MBEDTLS
GN_DEPENDENCIES
mbedtls)
add_custom_command(
OUTPUT connectedhomeip/third_party/pigweed/repo
COMMAND rm ${CHIP_ROOT}/third_party/pigweed/repo -rf
COMMAND ln -s ${NUTTX_APPS_DIR}/netutils/connectedhomeip/pigweed
${CHIP_ROOT}/third_party/pigweed/repo)
add_custom_target(chippigweed ALL
DEPENDS connectedhomeip/third_party/pigweed/repo)
ExternalProject_Add_StepDependencies(chip-gn configure chippigweed)
add_custom_command(
OUTPUT ${CHIP_ROOT}/build_overrides/pigweed_environment.gni
COMMAND touch ${CHIP_ROOT}/build_overrides/pigweed_environment.gni)
add_custom_target(
chipnpigweedenv ALL
DEPENDS ${CHIP_ROOT}/build_overrides/pigweed_environment.gni)
ExternalProject_Add_StepDependencies(chip-gn configure chipnpigweedenv)
add_dependencies(chippigweed chipnpigweedenv)
add_custom_command(
OUTPUT connectedhomeip/third_party/nlassert/repo
COMMAND rm ${CHIP_ROOT}/third_party/nlassert/repo -rf
COMMAND ln -s ${NUTTX_APPS_DIR}/netutils/connectedhomeip/nlassert
${CHIP_ROOT}/third_party/nlassert/repo)
add_custom_target(chipnlassert ALL
DEPENDS connectedhomeip/third_party/nlassert/repo)
ExternalProject_Add_StepDependencies(chip-gn configure chipnlassert)
add_custom_command(
OUTPUT connectedhomeip/third_party/nlio/repo
COMMAND rm ${CHIP_ROOT}/third_party/nlio/repo -rf
COMMAND ln -s ${NUTTX_APPS_DIR}/netutils/connectedhomeip/nlio
${CHIP_ROOT}/third_party/nlio/repo)
add_custom_target(chipnlio ALL DEPENDS connectedhomeip/third_party/nlio/repo)
ExternalProject_Add_StepDependencies(chip-gn configure chipnlio)
add_custom_command(
OUTPUT connectedhomeip/third_party/nlunit-test/repo
COMMAND rm ${CHIP_ROOT}/third_party/nlunit-test/repo -rf
COMMAND ln -s ${NUTTX_APPS_DIR}/netutils/connectedhomeip/nlunit-test
${CHIP_ROOT}/third_party/nlunit-test/repo)
add_custom_target(chipnlunit-test ALL
DEPENDS connectedhomeip/third_party/nlunit-test/repo)
ExternalProject_Add_StepDependencies(chip-gn configure chipnlunit-test)
add_custom_command(
OUTPUT connectedhomeip/third_party/jsoncpp/repo
COMMAND rm -rf ${CHIP_ROOT}/third_party/jsoncpp/repo
COMMAND ln -s ${NUTTX_APPS_DIR}/netutils/jsoncpp/jsoncpp
${CHIP_ROOT}/third_party/jsoncpp/repo)
add_custom_target(chipjsoncpp ALL
DEPENDS connectedhomeip/third_party/jsoncpp/repo)
ExternalProject_Add_StepDependencies(chip-gn configure chipjsoncpp)
set(DEMOSRC
${CHIP_ROOT}/examples/lighting-app/linux/main.cpp
${CHIP_ROOT}/examples/lighting-app/linux/LightingAppCommandDelegate.cpp)
nuttx_add_application(
NAME
matter
SRCS
${DEMOSRC}
INCLUDE_DIRECTORIES
${MATTER_INCDIR}
COMPILE_FLAGS
${MATTER_FLAGS}
DEPENDS
chip-gn
mbedtls
STACKSIZE
16384
PRIORITY
100)
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/apps/netutils/connectedhomeip/lib/libchipnuttx.a
COMMAND echo generate libchipnuttx.a)
add_custom_target(
libchipnuttx ALL
DEPENDS ${CMAKE_BINARY_DIR}/apps/netutils/connectedhomeip/lib/libchipnuttx.a
)
add_dependencies(libchipnuttx chip-gn)
nuttx_add_extra_library(
${CMAKE_BINARY_DIR}/apps/netutils/connectedhomeip/lib/libchipnuttx.a)
endif()