From 084f259904e9b18acef2b85670bb1389fac472f7 Mon Sep 17 00:00:00 2001 From: ATmobica Date: Wed, 1 Mar 2023 10:24:01 +0000 Subject: [PATCH] [Telink] Adapt Telink platform to common cmake sources Change Telink cmake files to the common sources. Remove redundant files. Signed-off-by: ATmobica --- config/telink/chip-module/CMakeLists.txt | 268 +++++----------------- config/telink/chip-module/make_gn_args.py | 73 ------ 2 files changed, 53 insertions(+), 288 deletions(-) delete mode 100755 config/telink/chip-module/make_gn_args.py diff --git a/config/telink/chip-module/CMakeLists.txt b/config/telink/chip-module/CMakeLists.txt index 91d108153bc68f..e1953b324d3c07 100644 --- a/config/telink/chip-module/CMakeLists.txt +++ b/config/telink/chip-module/CMakeLists.txt @@ -30,68 +30,6 @@ include(../../zephyr/ota-image.cmake) include(../../zephyr/zephyr-util.cmake) include(generate_factory_data.cmake) -# ============================================================================== -# Declare configuration variables and define constants -# ============================================================================== - -# C/C++ compiler flags passed to CHIP build system -list(APPEND CHIP_CFLAGS) - -# C compiler flags passed to CHIP build system -list(APPEND CHIP_CFLAGS_C) - -# C++ compiler flags passed to CHIP build system -list(APPEND CHIP_CFLAGS_CC) - -# CHIP libraries that the application should be linked with -list(APPEND CHIP_LIBRARIES) - -# GN meta-build system arguments passed to the make_gn_args.py script -string(APPEND CHIP_GN_ARGS) - -# C/C++ compiler flags which should not be forwarded to CHIP -# build system (e.g. because CHIP configures them on its own) -set(CHIP_CFLAG_EXCLUDES - "-fno-asynchronous-unwind-tables" - "-fno-common" - "-fno-defer-pop" - "-fno-reorder-functions" - "-ffunction-sections" - "-fdata-sections" - "-g*" - "-O*" - "-W*" -) - -# ============================================================================== -# Helper macros -# ============================================================================== - -macro(chip_gn_arg_import FILE) - string(APPEND CHIP_GN_ARGS "--module\n${FILE}\n") -endmacro() - -macro(chip_gn_arg_string ARG STRING) - string(APPEND CHIP_GN_ARGS "--arg-string\n${ARG}\n${STRING}\n") -endmacro() - -macro(chip_gn_arg_bool ARG) - if (${ARGN}) - string(APPEND CHIP_GN_ARGS "--arg\n${ARG}\ntrue\n") - else() - string(APPEND CHIP_GN_ARGS "--arg\n${ARG}\nfalse\n") - endif() -endmacro() - -macro(chip_gn_arg_cflags ARG CFLAGS) - string(APPEND CHIP_GN_ARGS "--arg-cflags\n${ARG}\n${CFLAGS}\n") -endmacro() - -macro(chip_gn_arg ARG VALUE) - string(APPEND CHIP_GN_ARGS "--arg\n${ARG}\n${VALUE}\n") -endmacro() - - # ============================================================================== # Prepare CHIP configuration based on the project Kconfig configuration # ============================================================================== @@ -99,48 +37,29 @@ endmacro() if (NOT CHIP_ROOT) get_filename_component(CHIP_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../.. REALPATH) endif() +get_filename_component(GN_ROOT_TARGET ${CHIP_ROOT}/config/telink/chip-gn REALPATH) +get_filename_component(COMMON_CMAKE_SOURCE_DIR ${CHIP_ROOT}/config/common/cmake REALPATH) -set(GN_ROOT_TARGET ${CHIP_ROOT}/config/telink/chip-gn) - -if (CONFIG_POSIX_API) - list(APPEND CHIP_CFLAGS - -D_SYS__PTHREADTYPES_H_ - -isystem${ZEPHYR_BASE}/include/zephyr/posix - ) -endif() - -zephyr_include_directories(${CHIP_ROOT}/src/platform/telink/) - -zephyr_get_compile_flags(CHIP_CFLAGS_C C) -zephyr_get_compile_flags(CHIP_CFLAGS_CC CXX) -zephyr_get_gnu_cpp_standard(CHIP_CFLAGS_CC) +# Get common Cmake sources -convert_list_of_flags_to_string_of_flags(CHIP_CFLAGS CHIP_CFLAGS) -convert_list_of_flags_to_string_of_flags(CHIP_CFLAGS_C CHIP_CFLAGS_C) -convert_list_of_flags_to_string_of_flags(CHIP_CFLAGS_CC CHIP_CFLAGS_CC) +include(${COMMON_CMAKE_SOURCE_DIR}/chip_gn_args.cmake) +include(${COMMON_CMAKE_SOURCE_DIR}/chip_gn.cmake) -# Prepare CHIP libraries that the application should be linked with +# Prepare compiler flags -if (NOT CHIP_LIBRARIES) - set(CHIP_LIBRARIES -lCHIP) -endif() - -if (CONFIG_CHIP_LIB_SHELL) - list(APPEND CHIP_LIBRARIES -lCHIPShell) +if (CONFIG_POSIX_API) + matter_add_flags(-D_SYS__PTHREADTYPES_H_) + matter_add_flags(-isystem${ZEPHYR_BASE}/include/zephyr/posix) endif() -# Set up CHIP project configuration file +zephyr_include_directories(${CHIP_ROOT}/src/platform/telink/) -if (CONFIG_CHIP_PROJECT_CONFIG) - get_filename_component(CHIP_PROJECT_CONFIG - ${CONFIG_CHIP_PROJECT_CONFIG} - REALPATH - BASE_DIR ${CMAKE_SOURCE_DIR} - ) - set(CHIP_PROJECT_CONFIG "<${CHIP_PROJECT_CONFIG}>") -else() - set(CHIP_PROJECT_CONFIG "") -endif() +zephyr_get_compile_flags(ZEPHYR_CFLAGS_C C) +matter_add_cflags("${ZEPHYR_CFLAGS_C}") +zephyr_get_compile_flags(ZEPHYR_CFLAGS_CC CXX) +matter_add_cxxflags("${ZEPHYR_CFLAGS_CC}") +zephyr_get_gnu_cpp_standard(ZEPHYR_GNU_CPP_STD) +matter_add_cxxflags(${ZEPHYR_GNU_CPP_STD}) # Set up custom OpenThread configuration @@ -153,147 +72,66 @@ if (CONFIG_CHIP_OPENTHREAD_CONFIG) zephyr_set_openthread_config(${CHIP_OPENTHREAD_CONFIG}) endif() -# Find required programs - -find_program(GN_EXECUTABLE gn) -if (${GN_EXECUTABLE} STREQUAL GN_EXECUTABLE-NOTFOUND) - message(FATAL_ERROR "The 'gn' command was not found. Make sure you have GN installed.") -else() - # Parse the 'gn --version' output to find the installed version. - set(MIN_GN_VERSION 1851) - execute_process( - COMMAND - ${GN_EXECUTABLE} --version - OUTPUT_VARIABLE gn_version_output - ERROR_VARIABLE gn_error_output - RESULT_VARIABLE gn_status - ) - - if(${gn_status} EQUAL 0) - if(gn_version_output VERSION_LESS ${MIN_GN_VERSION}) - message(FATAL_ERROR "Found unsuitable version of 'gn'. Required is at least ${MIN_GN_VERSION}") - endif() - else() - message(FATAL_ERROR "Could NOT find working gn: Found gn (${GN_EXECUTABLE}), but failed to load with:\n ${gn_error_output}") - endif() -endif() - -find_package(Python3 REQUIRED) - # ============================================================================== # Generate configuration for CHIP GN build system # ============================================================================== -chip_gn_arg_cflags("target_cflags" ${CHIP_CFLAGS}) -chip_gn_arg_cflags("target_cflags_c" ${CHIP_CFLAGS_C}) -chip_gn_arg_cflags("target_cflags_cc" ${CHIP_CFLAGS_CC}) -chip_gn_arg_string("zephyr_ar" ${CMAKE_AR}) -chip_gn_arg_string("zephyr_cc" ${CMAKE_C_COMPILER}) -chip_gn_arg_string("zephyr_cxx" ${CMAKE_CXX_COMPILER}) -chip_gn_arg_bool ("is_debug" CONFIG_DEBUG) -chip_gn_arg_bool ("chip_logging" CONFIG_LOG) -chip_gn_arg_bool ("chip_enable_openthread" CONFIG_NET_L2_OPENTHREAD) -chip_gn_arg_bool ("chip_openthread_ftd" CONFIG_OPENTHREAD_FTD) -chip_gn_arg_bool ("chip_config_network_layer_ble" CONFIG_BT) -chip_gn_arg_bool ("chip_inet_config_enable_ipv4" CONFIG_NET_IPV4) -chip_gn_arg_bool ("chip_enable_ota_requestor" CONFIG_CHIP_OTA_REQUESTOR) -chip_gn_arg_bool ("chip_build_tests" CONFIG_CHIP_BUILD_TESTS) -chip_gn_arg_bool ("chip_inet_config_enable_tcp_endpoint" CONFIG_CHIP_BUILD_TESTS) -chip_gn_arg_bool ("chip_build_libshell" CONFIG_CHIP_LIB_SHELL) -chip_gn_arg_bool ("chip_error_logging" CONFIG_MATTER_LOG_LEVEL GREATER_EQUAL 1) -chip_gn_arg_bool ("chip_progress_logging" CONFIG_MATTER_LOG_LEVEL GREATER_EQUAL 3) -chip_gn_arg_bool ("chip_detail_logging" CONFIG_MATTER_LOG_LEVEL GREATER_EQUAL 4) -chip_gn_arg_bool ("chip_automation_logging" FALSE) +matter_common_gn_args( + DEBUG CONFIG_DEBUG + LIB_SHELL CONFIG_CHIP_LIB_SHELL + LIB_TESTS CONFIG_CHIP_BUILD_TESTS + PROJECT_CONFIG ${CONFIG_CHIP_PROJECT_CONFIG} + DEVICE_INFO_EXAMPLE_PROVIDER CONFIG_CHIP_EXAMPLE_DEVICE_INFO_PROVIDER +) +matter_add_gn_arg_string("zephyr_ar" ${CMAKE_AR}) +matter_add_gn_arg_string("zephyr_cc" ${CMAKE_C_COMPILER}) +matter_add_gn_arg_string("zephyr_cxx" ${CMAKE_CXX_COMPILER}) +matter_add_gn_arg_bool ("chip_logging" CONFIG_LOG) +matter_add_gn_arg_bool ("chip_enable_openthread" CONFIG_NET_L2_OPENTHREAD) +matter_add_gn_arg_bool ("chip_openthread_ftd" CONFIG_OPENTHREAD_FTD) +matter_add_gn_arg_bool ("chip_config_network_layer_ble" CONFIG_BT) +matter_add_gn_arg_bool ("chip_inet_config_enable_ipv4" CONFIG_NET_IPV4) +matter_add_gn_arg_bool ("chip_enable_ota_requestor" CONFIG_CHIP_OTA_REQUESTOR) +matter_add_gn_arg_bool ("chip_inet_config_enable_tcp_endpoint" CONFIG_CHIP_BUILD_TESTS) +matter_add_gn_arg_bool ("chip_error_logging" CONFIG_MATTER_LOG_LEVEL GREATER_EQUAL 1) +matter_add_gn_arg_bool ("chip_progress_logging" CONFIG_MATTER_LOG_LEVEL GREATER_EQUAL 3) +matter_add_gn_arg_bool ("chip_detail_logging" CONFIG_MATTER_LOG_LEVEL GREATER_EQUAL 4) +matter_add_gn_arg_bool ("chip_automation_logging" FALSE) if (CONFIG_CHIP_FACTORY_DATA) - chip_gn_arg_bool ("chip_use_transitional_commissionable_data_provider" "false") - chip_gn_arg_bool ("chip_enable_factory_data" "true") + matter_add_gn_arg_bool ("chip_use_transitional_commissionable_data_provider" "false") + matter_add_gn_arg_bool ("chip_enable_factory_data" "true") elseif (CONFIG_CHIP_FACTORY_DATA_CUSTOM_BACKEND) - chip_gn_arg_bool ("chip_use_transitional_commissionable_data_provider" "false") + matter_add_gn_arg_bool ("chip_use_transitional_commissionable_data_provider" "false") endif() if (CONFIG_CHIP_ROTATING_DEVICE_ID) - chip_gn_arg_bool("chip_enable_rotating_device_id" "true") - chip_gn_arg_bool("chip_enable_additional_data_advertising" "true") + matter_add_gn_arg_bool("chip_enable_rotating_device_id" "true") + matter_add_gn_arg_bool("chip_enable_additional_data_advertising" "true") endif() if (CONFIG_CHIP_ENABLE_DNSSD_SRP) - chip_gn_arg_string("chip_mdns" "platform") -endif() - -if (CHIP_PROJECT_CONFIG) - chip_gn_arg_string("chip_project_config_include" ${CHIP_PROJECT_CONFIG}) - chip_gn_arg_string("chip_system_project_config_include" ${CHIP_PROJECT_CONFIG}) + matter_add_gn_arg_string("chip_mdns" "platform") endif() if (CONFIG_CHIP_PW_RPC) set(PIGWEED_DIR "//third_party/pigweed/repo") - chip_gn_arg_string("pw_assert_BACKEND" ${PIGWEED_DIR}/pw_assert_log:check_backend) - chip_gn_arg_string("pw_log_BACKEND" ${PIGWEED_DIR}/pw_log_basic) - chip_gn_arg("pw_build_LINK_DEPS" [\"${PIGWEED_DIR}/pw_assert:impl\",\ \"${PIGWEED_DIR}/pw_log:impl\"]) -endif() - -if (CONFIG_CHIP_EXAMPLE_DEVICE_INFO_PROVIDER) - chip_gn_arg_bool("chip_build_example_providers" "true") - list(APPEND CHIP_LIBRARIES -lMatterDeviceInfoProviderExample) + matter_add_gn_arg_string("pw_assert_BACKEND" ${PIGWEED_DIR}/pw_assert_log:check_backend) + matter_add_gn_arg_string("pw_log_BACKEND" ${PIGWEED_DIR}/pw_log_basic) + matter_add_gn_arg("pw_build_LINK_DEPS" [\"${PIGWEED_DIR}/pw_assert:impl\",\ \"${PIGWEED_DIR}/pw_log:impl\"]) endif() -file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/args.tmp" CONTENT ${CHIP_GN_ARGS}) - -# ============================================================================== -# Define 'chip-gn' target that builds CHIP library(ies) with GN build system -# ============================================================================== -ExternalProject_Add( - chip-gn - PREFIX ${CMAKE_CURRENT_BINARY_DIR} - SOURCE_DIR ${CHIP_ROOT} - BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} - CONFIGURE_COMMAND "" - BUILD_COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/make_gn_args.py - @args.tmp > args.gn && - ${GN_EXECUTABLE} - --root=${CHIP_ROOT} - --root-target=${GN_ROOT_TARGET} - --dotfile=${GN_ROOT_TARGET}/.gn - --script-executable=${Python3_EXECUTABLE} - --export-compile-commands - gen --check --fail-on-unused-args . && - ninja - INSTALL_COMMAND "" - BUILD_BYPRODUCTS ${CHIP_LIBRARIES} - BUILD_ALWAYS TRUE - USES_TERMINAL_CONFIGURE TRUE - USES_TERMINAL_BUILD TRUE -) -add_dependencies(chip-gn kernel) +matter_generate_args_tmp_file() # ============================================================================== -# Define 'chip' target that exposes CHIP headers & libraries to the application +# Build chip library # ============================================================================== - -zephyr_interface_library_named(chip) -target_compile_definitions(chip INTERFACE CHIP_HAVE_CONFIG_H) -target_include_directories(chip INTERFACE - ${CHIP_ROOT}/src - ${CHIP_ROOT}/src/include - ${CHIP_ROOT}/src/lib - ${CHIP_ROOT}/third_party/nlassert/repo/include - ${CHIP_ROOT}/third_party/nlio/repo/include - ${CHIP_ROOT}/zzz_generated/app-common - ${CMAKE_CURRENT_BINARY_DIR}/gen/include +matter_build(chip + LIB_SHELL ${CONFIG_CHIP_LIB_SHELL} + DEVICE_INFO_EXAMPLE_PROVIDER ${CONFIG_CHIP_EXAMPLE_DEVICE_INFO_PROVIDER} + GN_DEPENDENCIES kernel ) -target_link_directories(chip INTERFACE ${CMAKE_CURRENT_BINARY_DIR}/lib) -if (CONFIG_CHIP_LIB_SHELL) - target_link_options(chip INTERFACE -Wl,--whole-archive -lCHIPShell -Wl,--no-whole-archive) -endif() - -if (CONFIG_CHIP_EXAMPLE_DEVICE_INFO_PROVIDER) - target_include_directories(chip INTERFACE ${CHIP_ROOT}/examples/providers) -endif() - -target_link_libraries(chip INTERFACE -Wl,--start-group ${CHIP_LIBRARIES} -Wl,--end-group) - -add_dependencies(chip chip-gn) +set_property(GLOBAL APPEND PROPERTY ZEPHYR_INTERFACE_LIBS chip) # ============================================================================== # Define 'chip-ota-image' target for building CHIP OTA image diff --git a/config/telink/chip-module/make_gn_args.py b/config/telink/chip-module/make_gn_args.py deleted file mode 100755 index f30cd459a6e7d4..00000000000000 --- a/config/telink/chip-module/make_gn_args.py +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env python3 - -# -# Copyright (c) 2021 Project CHIP Authors -# All rights reserved. -# -# Licensed 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. -# - -import argparse -import re -import sys - -GN_SPECIAL_CHARACTERS = r'(["$\\])' -GN_CFLAG_EXCLUDES = [ - '-fno-asynchronous-unwind-tables', - '-fno-common', - '-fno-defer-pop', - '-fno-reorder-functions', - '-ffunction-sections', - '-fdata-sections', - '-g*', - '-O*', - '-W*', -] - - -def escape_strings(gn_args): - return [[key, re.sub(GN_SPECIAL_CHARACTERS, r'\\\1', value)] for key, value in gn_args] - - -def write_gn_args(args): - if args.module: - sys.stdout.write('import("{}")\n'.format(args.module)) - - for key, value in args.arg: - sys.stdout.write('{} = {}\n'.format(key, value)) - - for key, value in args.arg_string: - sys.stdout.write('{} = "{}"\n'.format(key, value)) - - cflag_excludes = ', '.join(['"{}"'.format(exclude) - for exclude in GN_CFLAG_EXCLUDES]) - - for key, value in args.arg_cflags: - sys.stdout.write('{} = filter_exclude(string_split("{}"), [{}])\n'.format( - key, value, cflag_excludes)) - - -def main(): - parser = argparse.ArgumentParser(fromfile_prefix_chars='@') - parser.add_argument('--module', action='store') - parser.add_argument('--arg', action='append', nargs=2, default=[]) - parser.add_argument('--arg-string', action='append', nargs=2, default=[]) - parser.add_argument('--arg-cflags', action='append', nargs=2, default=[]) - args = parser.parse_args() - args.arg_string = escape_strings(args.arg_string) - args.arg_cflags = escape_strings(args.arg_cflags) - write_gn_args(args) - - -if __name__ == "__main__": - main()