Skip to content

Commit bba766b

Browse files
andy31415andreilitvintehampson
authored
Add ability to control data-model-interface usage for cmake-based platforms (#35559)
* Add data-mode-enabled/disabled variants to all CMAKE builds. Platforms changed: - esp32 - mbed - nrfconnect - telink - nxp I tested all these except NXP which I could not compile in TOT due to missing vscode configuration. * add options for data model to qpg builds as this can be used to check for size deltas * Fix unit test * Restyle * Fix nxp typo and strip * Update quoting logic * Update config/telink/chip-module/CMakeLists.txt Co-authored-by: Terence Hampson <thampson@google.com> * more update on the 'I' text * Fix nxp build placement of data model interface * Switch to zephyr KConfig for data model interface setting * Use bool for DM enabling in places * Apply review comment * Fix nxp typo --------- Co-authored-by: Andrei Litvin <andreilitvin@google.com> Co-authored-by: Terence Hampson <thampson@google.com>
1 parent 7467abc commit bba766b

File tree

19 files changed

+164
-41
lines changed

19 files changed

+164
-41
lines changed

build/chip/esp32/esp32_codegen.cmake

+10
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
macro(chip_app_component_codegen IDL_NAME)
1919
include("${CHIP_ROOT}/build/chip/chip_codegen.cmake")
20+
include("${CHIP_ROOT}/src/app/codegen-data-model-provider/model.cmake")
2021

2122
# The IDF build system performs a two-pass expansion to determine
2223
# component expansion. The first pass runs in script-mode
@@ -71,5 +72,14 @@ macro(chip_app_component_zapgen ZAP_NAME)
7172
add_dependencies(${COMPONENT_LIB} app-zapgen)
7273
target_include_directories(${COMPONENT_LIB} PUBLIC "${APP_TEMPLATE_GEN_DIR}")
7374
target_sources(${COMPONENT_LIB} PRIVATE ${APP_TEMPLATE_GEN_FILES})
75+
76+
# When data model interface is used, provide a default code-generation data model as
77+
# part of zapgen. See `chip_data_model.cmake` for similar logic
78+
set(CHIP_DATA_MODEL_INTERFACE "disabled" CACHE STRING "Data model interface option to use: enabled or disabled")
79+
80+
if ("${CHIP_DATA_MODEL_INTERFACE}" STREQUAL "enabled")
81+
target_sources(${COMPONENT_LIB} PRIVATE ${CODEGEN_DATA_MODEL_SOURCES})
82+
endif()
83+
7484
endif()
7585
endmacro()

config/common/cmake/chip_gn_args.cmake

+7-2
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ macro(matter_common_gn_args)
171171
LIB_PW_RPC
172172
DEVICE_INFO_EXAMPLE_PROVIDER
173173
PROJECT_CONFIG
174-
174+
DATA_MODEL_INTERFACE
175175
)
176176
set(multiValueArgs
177177
PROJECT_CONFIG_INC_DIR
@@ -203,6 +203,11 @@ macro(matter_common_gn_args)
203203
if (ARG_DEVICE_INFO_EXAMPLE_PROVIDER)
204204
matter_add_gn_arg_bool ("chip_build_example_providers" ${ARG_DEVICE_INFO_EXAMPLE_PROVIDER})
205205
endif() # ARG_DEVICE_INFO_EXAMPLE_PROVIDER
206+
207+
if (ARG_DATA_MODEL_INTERFACE)
208+
matter_add_gn_arg_string("chip_use_data_model_interface" "${ARG_DATA_MODEL_INTERFACE}")
209+
endif()
210+
206211
if (ARG_PROJECT_CONFIG)
207212
get_filename_component(PROJECT_CONFIG
208213
${ARG_PROJECT_CONFIG}
@@ -220,4 +225,4 @@ endmacro()
220225
# Generate the temporary GN arguments file from the settings
221226
macro(matter_generate_args_tmp_file)
222227
file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/args.tmp" CONTENT ${MATTER_GN_ARGS})
223-
endmacro()
228+
endmacro()

config/esp32/components/chip/CMakeLists.txt

+8
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ include(${CMAKE_CURRENT_LIST_DIR}/ota-image.cmake)
3333

3434
set(CHIP_REQUIRE_COMPONENTS esp_eth freertos lwip bt mbedtls fatfs app_update console openthread nvs_flash spi_flash)
3535

36+
set(CHIP_DATA_MODEL_INTERFACE "disabled" CACHE STRING "Data model interface option to use: enabled or disabled")
37+
3638
if(NOT "${IDF_TARGET}" STREQUAL "esp32h2")
3739
list(APPEND CHIP_REQUIRE_COMPONENTS mdns)
3840
endif()
@@ -64,6 +66,12 @@ macro(chip_gn_arg_bool arg boolean)
6466
endif()
6567
endmacro()
6668

69+
if ("${CHIP_DATA_MODEL_INTERFACE}" STREQUAL "enabled")
70+
chip_gn_arg_append("chip_use_data_model_interface" "\"enabled\"")
71+
else()
72+
chip_gn_arg_append("chip_use_data_model_interface" "\"disabled\"")
73+
endif()
74+
6775
# ESP-IDF lets user set software version string by two ways:
6876
# 1. Project's CMakeLists.txt file and 2. Config option
6977
# It depends on CONFIG_APP_PROJECT_VER_FROM_CONFIG option

config/mbed/CMakeLists.txt

+4
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,9 @@ if (CONFIG_MBED_BSD_SOCKET_TRACE)
112112
matter_add_flags(-DMBED_BSD_SOCKET_TRACE=1)
113113
endif()
114114

115+
# Option can be set with `-DCHIP_DATA_MODEL_INTERFACE=enabled` or similar on the command line
116+
set(CHIP_DATA_MODEL_INTERFACE "disabled" CACHE STRING "Data model interface option to use: enabled or disabled")
117+
115118
# ==============================================================================
116119
# Generate configuration for CHIP GN build system
117120
# ==============================================================================
@@ -121,6 +124,7 @@ matter_common_gn_args(
121124
LIB_TESTS CONFIG_CHIP_BUILD_TESTS
122125
LIB_PW_RPC CONFIG_CHIP_PW_RPC
123126
PROJECT_CONFIG ${CONFIG_CHIP_PROJECT_CONFIG}
127+
DATA_MODEL_INTERFACE ${CHIP_DATA_MODEL_INTERFACE}
124128
)
125129
if (CONFIG_CHIP_PW_RPC)
126130
matter_add_gn_arg_import("${GN_ROOT_TARGET}/lib/pw_rpc/pw_rpc.gni")

config/nrfconnect/chip-module/CMakeLists.txt

+8
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,13 @@ endif()
106106

107107
get_property(CHIP_COMPILER_LAUNCHER GLOBAL PROPERTY RULE_LAUNCH_COMPILE)
108108

109+
110+
if (CONFIG_USE_CHIP_DATA_MODEL_INTERFACE)
111+
set(DATA_MODEL_INTERFACE "enabled")
112+
else()
113+
set(DATA_MODEL_INTERFACE "disabled")
114+
endif()
115+
109116
# ==============================================================================
110117
# Generate configuration for CHIP GN build system
111118
# ==============================================================================
@@ -116,6 +123,7 @@ matter_common_gn_args(
116123
LIB_TESTS CONFIG_CHIP_BUILD_TESTS
117124
PROJECT_CONFIG ${CONFIG_CHIP_PROJECT_CONFIG}
118125
DEVICE_INFO_EXAMPLE_PROVIDER CONFIG_CHIP_EXAMPLE_DEVICE_INFO_PROVIDER
126+
DATA_MODEL_INTERFACE ${DATA_MODEL_INTERFACE}
119127
)
120128
matter_add_gn_arg_string("zephyr_ar" ${CMAKE_AR})
121129
matter_add_gn_arg_string("zephyr_cc" ${CMAKE_C_COMPILER})

config/nxp/chip-cmake-freertos/CMakeLists.txt

+7
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,20 @@ matter_add_gn_arg("chip_with_factory_data" ${CONFIG_CHIP_FACTORY_DATA})
4040
matter_add_gn_arg("chip_enable_secure_dac_private_key_storage" ${CONFIG_CHIP_SECURE_DAC_PRIVATE_KEY_STORAGE})
4141
matter_add_gn_arg("chip_enable_secure_whole_factory_data" ${CONFIG_CHIP_ENABLE_SECURE_WHOLE_FACTORY_DATA})
4242

43+
if (CONFIG_USE_CHIP_DATA_MODEL_INTERFACE)
44+
set(DATA_MODEL_INTERFACE "enabled")
45+
else()
46+
set(DATA_MODEL_INTERFACE "disabled")
47+
endif()
48+
4349
matter_common_gn_args(
4450
DEBUG CONFIG_DEBUG
4551
LIB_SHELL CONFIG_CHIP_LIB_SHELL
4652
LIB_TESTS CONFIG_CHIP_BUILD_TESTS
4753
PROJECT_CONFIG ${CONFIG_CHIP_PROJECT_CONFIG}
4854
PROJECT_CONFIG_INC_DIR ${CONFIG_CHIP_PROJECT_CONFIG_INCLUDE_DIRS}
4955
DEVICE_INFO_EXAMPLE_PROVIDER CONFIG_CHIP_EXAMPLE_DEVICE_INFO_PROVIDER
56+
DATA_MODEL_INTERFACE ${DATA_MODEL_INTERFACE}
5057
)
5158

5259
matter_generate_args_tmp_file()

config/nxp/chip-module/CMakeLists.txt

+8
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,13 @@ endif()
9191

9292
get_property(CHIP_COMPILER_LAUNCHER GLOBAL PROPERTY RULE_LAUNCH_COMPILE)
9393

94+
if (CONFIG_USE_CHIP_DATA_MODEL_INTERFACE)
95+
set(DATA_MODEL_INTERFACE "enabled")
96+
else()
97+
set(DATA_MODEL_INTERFACE "disabled")
98+
endif()
99+
100+
94101
# ==============================================================================
95102
# Generate configuration for CHIP GN build system
96103
# ==============================================================================
@@ -101,6 +108,7 @@ matter_common_gn_args(
101108
LIB_TESTS CONFIG_CHIP_BUILD_TESTS
102109
PROJECT_CONFIG ${CONFIG_CHIP_PROJECT_CONFIG}
103110
DEVICE_INFO_EXAMPLE_PROVIDER CONFIG_CHIP_EXAMPLE_DEVICE_INFO_PROVIDER
111+
DATA_MODEL_INTERFACE ${DATA_MODEL_INTERFACE}
104112
)
105113
matter_add_gn_arg_string("zephyr_ar" ${CMAKE_AR})
106114
matter_add_gn_arg_string("zephyr_cc" ${CMAKE_C_COMPILER})

config/telink/chip-module/CMakeLists.txt

+7
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ if (CONFIG_CHIP_OPENTHREAD_CONFIG)
7777
zephyr_set_openthread_config(${CHIP_OPENTHREAD_CONFIG})
7878
endif()
7979

80+
if (CONFIG_USE_CHIP_DATA_MODEL_INTERFACE)
81+
set(DATA_MODEL_INTERFACE "enabled")
82+
else()
83+
set(DATA_MODEL_INTERFACE "disabled")
84+
endif()
85+
8086
# ==============================================================================
8187
# Generate configuration for CHIP GN build system
8288
# ==============================================================================
@@ -87,6 +93,7 @@ matter_common_gn_args(
8793
LIB_TESTS CONFIG_CHIP_BUILD_TESTS
8894
PROJECT_CONFIG ${CONFIG_CHIP_PROJECT_CONFIG}
8995
DEVICE_INFO_EXAMPLE_PROVIDER CONFIG_CHIP_EXAMPLE_DEVICE_INFO_PROVIDER
96+
DATA_MODEL_INTERFACE ${DATA_MODEL_INTERFACE}
9097
)
9198
matter_add_gn_arg_string("zephyr_ar" ${CMAKE_AR})
9299
matter_add_gn_arg_string("zephyr_cc" ${CMAKE_C_COMPILER})

config/zephyr/Kconfig

+7
Original file line numberDiff line numberDiff line change
@@ -574,4 +574,11 @@ config CHIP_BLE_ADVERTISING_DURATION
574574
If CHIP_BLE_EXT_ADVERTISING is set to false, the maximum duration time is 15 minutes,
575575
else the maximum duration time can be extended to 2880 minutes (48h).
576576

577+
config USE_CHIP_DATA_MODEL_INTERFACE
578+
bool "Use a DataModel::Provider interface for data access"
579+
help
580+
This enables a level of indiraction in the CHIP interaction model engine in
581+
accessing underlying data and executing operations such as
582+
wildcard-expansion, read, write and invoke.
583+
577584
endif

config/zephyr/chip-module/CMakeLists.txt

+8-1
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ if(CONFIG_CHIP)
7070
zephyr_set_openthread_config(${CHIP_OPENTHREAD_CONFIG})
7171
endif()
7272

73+
if (CONFIG_USE_CHIP_DATA_MODEL_INTERFACE)
74+
set(DATA_MODEL_INTERFACE "enabled")
75+
else()
76+
set(DATA_MODEL_INTERFACE "disabled")
77+
endif()
78+
7379
# ==============================================================================
7480
# Generate configuration for CHIP GN build system
7581
# ==============================================================================
@@ -78,6 +84,7 @@ if(CONFIG_CHIP)
7884
LIB_SHELL CONFIG_CHIP_LIB_SHELL
7985
LIB_TESTS CONFIG_CHIP_BUILD_TESTS
8086
PROJECT_CONFIG ${CONFIG_CHIP_PROJECT_CONFIG}
87+
DATA_MODEL_INTERFACE ${DATA_MODEL_INTERFACE}
8188
)
8289

8390
matter_add_gn_arg_string("zephyr_ar" ${CMAKE_AR})
@@ -139,4 +146,4 @@ if(CONFIG_CHIP)
139146
GN_DEPENDENCIES kernel
140147
)
141148
set_property(GLOBAL APPEND PROPERTY ZEPHYR_INTERFACE_LIBS chip)
142-
endif() # CONFIG_CHIP
149+
endif() # CONFIG_CHIP

scripts/build/build/targets.py

+12
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,8 @@ def BuildEsp32Target():
232232
target.AppendModifier('rpc', enable_rpcs=True)
233233
target.AppendModifier('ipv6only', enable_ipv4=False)
234234
target.AppendModifier('tracing', enable_insights_trace=True).OnlyIfRe("light")
235+
target.AppendModifier('data-model-disabled', data_model_interface="disabled").ExceptIfRe('-data-model-enabled')
236+
target.AppendModifier('data-model-enabled', data_model_interface="enabled").ExceptIfRe('-data-model-disabled')
235237

236238
return target
237239

@@ -331,6 +333,8 @@ def BuildNrfTarget():
331333
])
332334

333335
target.AppendModifier('rpc', enable_rpcs=True)
336+
target.AppendModifier('data-model-disabled', use_data_model_interface=False).ExceptIfRe('-data-model-enabled')
337+
target.AppendModifier('data-model-enabled', use_data_model_interface=True).ExceptIfRe('-data-model-disabled')
334338

335339
return target
336340

@@ -416,6 +420,8 @@ def BuildMbedTarget():
416420
'-(release|debug)')
417421
target.AppendModifier('debug', profile=MbedProfile.DEBUG).ExceptIfRe(
418422
'-(release|develop)')
423+
target.AppendModifier('data-model-disabled', data_model_interface="disabled").ExceptIfRe('-data-model-enabled')
424+
target.AppendModifier('data-model-enabled', data_model_interface="enabled").ExceptIfRe('-data-model-disabled')
419425

420426
return target
421427

@@ -540,6 +546,8 @@ def BuildNxpTarget():
540546
target.AppendModifier(name="wifi", enable_wifi=True).OnlyIfRe('rw61x')
541547
target.AppendModifier(name="thread", enable_thread=True).ExceptIfRe('zephyr')
542548
target.AppendModifier(name="matter-shell", enable_shell=True).ExceptIfRe('k32w0|k32w1')
549+
target.AppendModifier('data-model-disabled', data_model_interface="disabled").ExceptIfRe('-data-model-enabled')
550+
target.AppendModifier('data-model-enabled', data_model_interface="enabled").ExceptIfRe('-data-model-disabled')
543551

544552
return target
545553

@@ -620,6 +628,8 @@ def BuildQorvoTarget():
620628
])
621629

622630
target.AppendModifier('updateimage', update_image=True)
631+
target.AppendModifier('data-model-disabled', data_model_interface="disabled").ExceptIfRe('-data-model-enabled')
632+
target.AppendModifier('data-model-enabled', data_model_interface="enabled").ExceptIfRe('-data-model-disabled')
623633

624634
return target
625635

@@ -781,6 +791,8 @@ def BuildTelinkTarget():
781791
target.AppendModifier('4mb', enable_4mb_flash=True)
782792
target.AppendModifier('mars', mars_board_config=True)
783793
target.AppendModifier('usb', usb_board_config=True)
794+
target.AppendModifier('data-model-disabled', use_data_model_interface=False).ExceptIfRe('-data-model-enabled')
795+
target.AppendModifier('data-model-enabled', use_data_model_interface=True).ExceptIfRe('-data-model-disabled')
784796

785797
return target
786798

scripts/build/builders/esp32.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import os
1717
import shlex
1818
from enum import Enum, auto
19+
from typing import Optional
1920

2021
from .builder import Builder, BuilderOutput
2122

@@ -153,14 +154,16 @@ def __init__(self,
153154
app: Esp32App = Esp32App.ALL_CLUSTERS,
154155
enable_rpcs: bool = False,
155156
enable_ipv4: bool = True,
156-
enable_insights_trace: bool = False
157+
enable_insights_trace: bool = False,
158+
data_model_interface: Optional[str] = None,
157159
):
158160
super(Esp32Builder, self).__init__(root, runner)
159161
self.board = board
160162
self.app = app
161163
self.enable_rpcs = enable_rpcs
162164
self.enable_ipv4 = enable_ipv4
163165
self.enable_insights_trace = enable_insights_trace
166+
self.data_model_interface = data_model_interface
164167

165168
if not app.IsCompatible(board):
166169
raise Exception(
@@ -215,6 +218,9 @@ def generate(self):
215218
cmake_flags.append(
216219
f"-DCHIP_CODEGEN_PREGEN_DIR={shlex.quote(self.options.pregen_dir)}")
217220

221+
if self.data_model_interface:
222+
cmake_flags.append(f'-DCHIP_DATA_MODEL_INTERFACE={self.data_model_interface}')
223+
218224
cmake_args = ['-C', self.ExamplePath, '-B',
219225
shlex.quote(self.output_dir)] + cmake_flags
220226

scripts/build/builders/host.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ def __init__(self, root, runner, app: HostApp, board=HostBoard.NATIVE,
322322
enable_test_event_triggers=None,
323323
enable_dnssd_tests: Optional[bool] = None,
324324
chip_casting_simplified: Optional[bool] = None,
325-
data_model_interface: Optional[bool] = None,
325+
data_model_interface: Optional[str] = None,
326326
chip_data_model_check_die_on_failure: Optional[bool] = None,
327327
):
328328
super(HostBuilder, self).__init__(

scripts/build/builders/mbed.py

+8-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import os
1616
import shlex
1717
from enum import Enum, auto
18+
from typing import Optional
1819

1920
from .builder import Builder, BuilderOutput
2021

@@ -101,7 +102,9 @@ def __init__(self,
101102
runner,
102103
app: MbedApp = MbedApp.LOCK,
103104
board: MbedBoard = MbedBoard.CY8CPROTO_062_4343W,
104-
profile: MbedProfile = MbedProfile.RELEASE):
105+
profile: MbedProfile = MbedProfile.RELEASE,
106+
data_model_interface: Optional[str] = None,
107+
):
105108
super(MbedBuilder, self).__init__(root, runner)
106109
self.app = app
107110
self.board = board
@@ -111,6 +114,7 @@ def __init__(self,
111114
self.root, 'third_party', 'mbed-os', 'repo')
112115
self.mbed_os_posix_socket_path = os.path.join(
113116
self.root, 'third_party', 'mbed-os-posix-socket', 'repo')
117+
self.data_model_interface = data_model_interface
114118

115119
@property
116120
def ExamplePath(self):
@@ -131,6 +135,9 @@ def generate(self):
131135
flags.append(f"-DMBED_OS_PATH={shlex.quote(self.mbed_os_path)}")
132136
flags.append(f"-DMBED_OS_POSIX_SOCKET_PATH={shlex.quote(self.mbed_os_posix_socket_path)}")
133137

138+
if self.data_model_interface is not None:
139+
flags.append(f"-DCHIP_DATA_MODEL_INTERFACE={self.data_model_interface}")
140+
134141
if self.options.pregen_dir:
135142
flags.append(f"-DCHIP_CODEGEN_PREGEN_DIR={shlex.quote(self.options.pregen_dir)}")
136143

0 commit comments

Comments
 (0)