Skip to content

Commit 68fb1e3

Browse files
[nrf toup] Migrate to non-PM builds
- There should not be dependency to the Partition Manager if it is not enabled. - Fix wrongly referring to partitions as alises - To properly resolve `@{ZEPHYR_NRF_MODULE_DIR}` we need to use string(CONFIGURE ...) on it. - Add Kconfig to set the proper CHIP_APP_ZAP_DIR if the custom location of the zap-generated files is used. - Fix Factory Data to put files in the correct place and run with the correct configuration Signed-off-by: Arkadiusz Balys <arkadiusz.balys@nordicsemi.no> Co-authored-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
1 parent 06f463d commit 68fb1e3

5 files changed

Lines changed: 87 additions & 283 deletions

File tree

config/nrfconnect/chip-module/CMakeLists.txt

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
if (CONFIG_CHIP)
2929

3030
include(ExternalProject)
31-
include(../../zephyr/ota-image.cmake)
3231
include(../../zephyr/zephyr-util.cmake)
3332
include(generate_factory_data.cmake)
3433

@@ -42,7 +41,10 @@ if (NOT CHIP_ROOT)
4241
get_filename_component(CHIP_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../../.. REALPATH)
4342
endif()
4443

45-
if (NOT CHIP_APP_ZAP_DIR)
44+
if (CONFIG_CHIP_APP_ZAP_DIR)
45+
string(CONFIGURE "${CONFIG_CHIP_APP_ZAP_DIR}" app_zap_dir)
46+
get_filename_component(CHIP_APP_ZAP_DIR ${app_zap_dir} REALPATH)
47+
elseif (NOT CHIP_APP_ZAP_DIR)
4648
get_filename_component(CHIP_APP_ZAP_DIR ${CHIP_ROOT}/zzz_generated/app-common REALPATH)
4749
endif()
4850

@@ -280,12 +282,4 @@ if (CONFIG_CHIP_LIB_SHELL)
280282
)
281283
endif()
282284
283-
# ==============================================================================
284-
# Define 'factory_data' target for generating a factory data partition
285-
# ==============================================================================
286-
287-
if(CONFIG_CHIP_FACTORY_DATA_BUILD AND (NOT SYSBUILD OR NOT CONFIG_PARTITION_MANAGER_ENABLED))
288-
nrfconnect_generate_factory_data()
289-
endif()
290-
291285
endif() # CONFIG_CHIP

config/nrfconnect/chip-module/Kconfig

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ config CHIP
2626

2727
if CHIP
2828

29+
config CHIP_APP_ZAP_DIR
30+
string "Path to the zap-generated directory"
31+
help
32+
It shall contain all the files generated by the zap-generate command.
33+
2934
config CHIP_NRF_PLATFORM
3035
bool
3136
default y

config/nrfconnect/chip-module/generate_factory_data.cmake

Lines changed: 67 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,42 @@
3636
# script_path - a path to script that makes a JSON factory data file from given arguments.
3737
# schema_path - a path to JSON schema file which can be used to verify generated factory data JSON file.
3838
# This argument is optional, if you don't want to verify the JSON file put it empty "".
39+
3940
# output_path - a path to output directory, where created hex and JSON files will be stored.
4041
function(nrfconnect_create_factory_data factory_data_target script_path schema_path output_path)
4142

43+
# Transforming kConfigs to sysbuild format
44+
if(SB_CONFIG_PARTITION_MANAGER)
45+
sysbuild_get(CONFIG_CHIP_DEVICE_SERIAL_NUMBER IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_SERIAL_NUMBER KCONFIG)
46+
sysbuild_get(CONFIG_CHIP_DEVICE_MANUFACTURING_DATE IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_MANUFACTURING_DATE KCONFIG)
47+
sysbuild_get(CONFIG_CHIP_DEVICE_VENDOR_ID IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_VENDOR_ID KCONFIG)
48+
sysbuild_get(CONFIG_CHIP_DEVICE_PRODUCT_ID IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_PRODUCT_ID KCONFIG)
49+
sysbuild_get(CONFIG_CHIP_DEVICE_VENDOR_NAME IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_VENDOR_NAME KCONFIG)
50+
sysbuild_get(CONFIG_CHIP_DEVICE_PRODUCT_NAME IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_PRODUCT_NAME KCONFIG)
51+
sysbuild_get(CONFIG_CHIP_DEVICE_HARDWARE_VERSION IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_HARDWARE_VERSION KCONFIG)
52+
sysbuild_get(CONFIG_CHIP_DEVICE_HARDWARE_VERSION_STRING IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_HARDWARE_VERSION_STRING KCONFIG)
53+
sysbuild_get(CONFIG_CHIP_ROTATING_DEVICE_ID IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_ROTATING_DEVICE_ID KCONFIG)
54+
sysbuild_get(CONFIG_CHIP_DEVICE_GENERATE_ROTATING_DEVICE_UID IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_GENERATE_ROTATING_DEVICE_UID KCONFIG)
55+
sysbuild_get(CONFIG_CHIP_DEVICE_ROTATING_DEVICE_UID IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_ROTATING_DEVICE_UID KCONFIG)
56+
sysbuild_get(CONFIG_CHIP_FACTORY_DATA_CERT_SOURCE_GENERATED IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_FACTORY_DATA_CERT_SOURCE_GENERATED KCONFIG)
57+
sysbuild_get(CONFIG_CHIP_FACTORY_DATA_GENERATE_CD IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_FACTORY_DATA_GENERATE_CD KCONFIG)
58+
sysbuild_get(CONFIG_CHIP_FACTORY_DATA_USE_DEFAULT_CERTS IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_FACTORY_DATA_USE_DEFAULT_CERTS KCONFIG)
59+
sysbuild_get(CONFIG_CHIP_FACTORY_DATA_CERT_SOURCE_USER IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_FACTORY_DATA_CERT_SOURCE_USER KCONFIG)
60+
sysbuild_get(CONFIG_CHIP_FACTORY_DATA_USER_CERTS_DAC_CERT IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_FACTORY_DATA_USER_CERTS_DAC_CERT KCONFIG)
61+
sysbuild_get(CONFIG_CHIP_FACTORY_DATA_USER_CERTS_DAC_KEY IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_FACTORY_DATA_USER_CERTS_DAC_KEY KCONFIG)
62+
sysbuild_get(CONFIG_CHIP_FACTORY_DATA_USER_CERTS_PAI_CERT IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_FACTORY_DATA_USER_CERTS_PAI_CERT KCONFIG)
63+
sysbuild_get(CONFIG_CHIP_DEVICE_SPAKE2_IT IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_SPAKE2_IT KCONFIG)
64+
sysbuild_get(CONFIG_CHIP_DEVICE_SPAKE2_SALT IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_SPAKE2_SALT KCONFIG)
65+
sysbuild_get(CONFIG_CHIP_DEVICE_DISCRIMINATOR IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_DISCRIMINATOR KCONFIG)
66+
sysbuild_get(CONFIG_CHIP_DEVICE_SPAKE2_PASSCODE IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_SPAKE2_PASSCODE KCONFIG)
67+
sysbuild_get(CONFIG_CHIP_DEVICE_SPAKE2_TEST_VERIFIER IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_SPAKE2_TEST_VERIFIER KCONFIG)
68+
sysbuild_get(CONFIG_CHIP_FACTORY_DATA_GENERATE_SPAKE2_VERIFIER IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_FACTORY_DATA_GENERATE_SPAKE2_VERIFIER KCONFIG)
69+
sysbuild_get(CONFIG_CHIP_DEVICE_PRODUCT_FINISH IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_PRODUCT_FINISH KCONFIG)
70+
sysbuild_get(CONFIG_CHIP_DEVICE_PRODUCT_COLOR IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_PRODUCT_COLOR KCONFIG)
71+
sysbuild_get(CONFIG_CHIP_FACTORY_DATA_GENERATE_ONBOARDING_CODES IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_FACTORY_DATA_GENERATE_ONBOARDING_CODES KCONFIG)
72+
sysbuild_get(CONFIG_CHIP_DEVICE_ENABLE_KEY IMAGE ${DEFAULT_IMAGE} VAR CONFIG_CHIP_DEVICE_ENABLE_KEY KCONFIG)
73+
endif()
74+
4275
# set script args for future purpose
4376
set(script_args)
4477
## generate all script arguments
@@ -89,9 +122,15 @@ if(CONFIG_CHIP_FACTORY_DATA_USE_DEFAULT_CERTS)
89122
string(APPEND script_args "--dac_key \"${CHIP_ROOT}/credentials/development/attestation/Matter-Development-DAC-${raw_vid_upper}-${raw_pid_upper}-Key.der\"\n")
90123
string(APPEND script_args "--pai_cert \"${CHIP_ROOT}/credentials/development/attestation/Matter-Development-PAI-${raw_vid_upper}-noPID-Cert.der\"\n")
91124
elseif(CONFIG_CHIP_FACTORY_DATA_CERT_SOURCE_USER)
92-
string(APPEND script_args "--dac_cert \"${CONFIG_CHIP_FACTORY_DATA_USER_CERTS_DAC_CERT}\"\n")
93-
string(APPEND script_args "--dac_key \"${CONFIG_CHIP_FACTORY_DATA_USER_CERTS_DAC_KEY}\"\n")
94-
string(APPEND script_args "--pai_cert \"${CONFIG_CHIP_FACTORY_DATA_USER_CERTS_PAI_CERT}\"\n")
125+
set(dac_cert "${CONFIG_CHIP_FACTORY_DATA_USER_CERTS_DAC_CERT}")
126+
set(dac_key "${CONFIG_CHIP_FACTORY_DATA_USER_CERTS_DAC_KEY}")
127+
set(pai_cert "${CONFIG_CHIP_FACTORY_DATA_USER_CERTS_PAI_CERT}")
128+
string(CONFIGURE "${dac_cert}" dac_cert)
129+
string(CONFIGURE "${dac_key}" dac_key)
130+
string(CONFIGURE "${pai_cert}" pai_cert)
131+
string(APPEND script_args "--dac_cert \"${dac_cert}\"\n")
132+
string(APPEND script_args "--dac_key \"${dac_key}\"\n")
133+
string(APPEND script_args "--pai_cert \"${pai_cert}\"\n")
95134
elseif(CONFIG_CHIP_FACTORY_DATA_CERT_SOURCE_GENERATED)
96135
string(APPEND script_args "--gen_certs\n")
97136
endif()
@@ -130,19 +169,15 @@ string(APPEND script_args "-o \"${factory_data_output_path}\"\n")
130169
string(APPEND script_args "-s \"${schema_path}\"\n")
131170

132171
# Add optional offset and size arguments to generate .hex file as well as .json.
133-
if(CONFIG_PARTITION_MANAGER_ENABLED)
172+
if(SB_CONFIG_PARTITION_MANAGER OR CONFIG_PARTITION_MANAGER_ENABLED)
134173
string(APPEND script_args "--offset $<TARGET_PROPERTY:partition_manager,PM_FACTORY_DATA_ADDRESS>\n")
135174
string(APPEND script_args "--size $<TARGET_PROPERTY:partition_manager,PM_FACTORY_DATA_OFFSET>\n")
136175
else()
137-
dt_alias(factory_data_alias PROPERTY "factory-data")
138-
dt_node_exists(factory_data_exists PATH "${factory_data_alias}")
139-
if(NOT ${factory_data_exists})
140-
message(FATAL_ERROR "factory-data alias does not exist in DTS")
141-
endif()
142-
dt_reg_addr(factory_data_addr PATH ${factory_data_alias})
143-
dt_reg_size(factory_data_size PATH ${factory_data_alias})
176+
dt_nodelabel(factory_data_partition_path TARGET ${DEFAULT_IMAGE} NODELABEL "factory_data_partition" REQUIRED)
177+
dt_reg_addr(factory_data_addr TARGET ${DEFAULT_IMAGE} PATH ${factory_data_partition_path})
178+
dt_reg_size(factory_data_size TARGET ${DEFAULT_IMAGE} PATH ${factory_data_partition_path})
144179
string(APPEND script_args "--offset ${factory_data_addr}\n")
145-
string(APPEND script_args "--size ${factory_data_size}\n")
180+
string(APPEND script_args "--size ${factory_data_size}\n")
146181
endif()
147182

148183
# execute first script to create a JSON file
@@ -171,6 +206,10 @@ function(nrfconnect_generate_factory_data)
171206
find_package(Python3 REQUIRED)
172207

173208
# CHIP_ROOT must be provided as a reference set all localization of scripts
209+
if(NOT CHIP_ROOT AND ZEPHYR_CONNECTEDHOMEIP_MODULE_DIR)
210+
set(CHIP_ROOT ${ZEPHYR_CONNECTEDHOMEIP_MODULE_DIR})
211+
endif()
212+
174213
if(NOT CHIP_ROOT)
175214
message(FATAL_ERROR "CHIP_ROOT variable is not set, please add it to CMakeLists.txt file")
176215
endif()
@@ -179,23 +218,27 @@ endif()
179218
set(FACTORY_DATA_SCRIPT_PATH ${CHIP_ROOT}/scripts/tools/nrfconnect/generate_nrfconnect_chip_factory_data.py)
180219
set(GENERATE_CBOR_SCRIPT_PATH ${CHIP_ROOT}/scripts/tools/nrfconnect/nrfconnect_generate_partition.py)
181220
set(FACTORY_DATA_SCHEMA_PATH ${CHIP_ROOT}/scripts/tools/nrfconnect/nrfconnect_factory_data.schema)
182-
set(OUTPUT_FILE_PATH ${APPLICATION_BINARY_DIR}/zephyr)
221+
222+
if(SB_CONFIG_PARTITION_MANAGER OR CONFIG_PARTITION_MANAGER_ENABLED)
223+
set(OUTPUT_FILE_PATH ${APPLICATION_BINARY_DIR}/zephyr)
224+
else()
225+
# Factory data is now a separate image, so we need to store output files in its build directory
226+
# to be compatible with the whole system.
227+
set(OUTPUT_FILE_PATH ${APPLICATION_BINARY_DIR}/matter_factory_data/zephyr)
228+
229+
import_kconfig("CONFIG" ${CMAKE_BINARY_DIR}/${DEFAULT_IMAGE}/zephyr/.config)
230+
endif()
183231

184232
# create a .hex file with factory data in CBOR format based on the JSON file created previously
185233
nrfconnect_create_factory_data(factory_data
186-
${FACTORY_DATA_SCRIPT_PATH}
187-
${FACTORY_DATA_SCHEMA_PATH}
234+
${FACTORY_DATA_SCRIPT_PATH}
235+
${FACTORY_DATA_SCHEMA_PATH}
188236
${OUTPUT_FILE_PATH})
189237

190-
if(CONFIG_CHIP_FACTORY_DATA_MERGE_WITH_FIRMWARE)
191-
if(CONFIG_PARTITION_MANAGER_ENABLED)
192-
# set custom target for merging factory_data hex file
193-
set_property(GLOBAL PROPERTY factory_data_PM_HEX_FILE ${OUTPUT_FILE_PATH}/factory_data.hex)
194-
set_property(GLOBAL PROPERTY factory_data_PM_TARGET factory_data)
195-
else()
196-
set_property(GLOBAL APPEND PROPERTY HEX_FILES_TO_MERGE ${OUTPUT_FILE_PATH}/factory_data.hex ${OUTPUT_FILE_PATH}/zephyr.hex)
197-
set_property(TARGET runners_yaml_props_target PROPERTY hex_file ${OUTPUT_FILE_PATH}/merged.hex)
198-
endif()
238+
if(SB_CONFIG_PARTITION_MANAGER AND SB_CONFIG_MATTER_FACTORY_DATA_MERGE_WITH_FIRMWARE)
239+
# set custom target for merging factory_data hex file
240+
set_property(GLOBAL PROPERTY factory_data_PM_HEX_FILE ${OUTPUT_FILE_PATH}/factory_data.hex)
241+
set_property(GLOBAL PROPERTY factory_data_PM_TARGET factory_data)
199242
endif()
200243

201244

0 commit comments

Comments
 (0)