blob: b5d350f7ecfd174cd3cb248a40b31e5997f3ce79 [file] [log] [blame]
# 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.
# Common cmake code for creating flash scripts.
# Must include the IDF project.cmake file before this file.
# Usage:
#
# flashing_script([DEPENDS <dep1> <dep2>])
#
# where DEPENDS and its args are optional and list additional dependencies.
# (use full path).
function(get_additional_flashing_depends)
set(options)
set(oneValueArgs)
set(multiValueArgs DEPENDS)
cmake_parse_arguments(MYARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
set(additional_flashing_depends "${MYARGS_DEPENDS}" PARENT_SCOPE)
endfunction(get_additional_flashing_depends)
macro(flashing_script)
idf_build_get_property(build_dir BUILD_DIR)
idf_build_get_property(project_path PROJECT_DIR)
idf_build_get_property(sdkconfig SDKCONFIG)
idf_build_get_property(idf_path IDF_PATH)
if (${IDF_TARGET} MATCHES "esp32*")
set(board_type "esp32")
else()
message(FATAL_ERROR "Unknown board type ${IDF_TARGET}")
endif()
set(flashing_utils_dir "${project_path}/third_party/connectedhomeip/scripts/flashing/")
set(board_firmware_utils "${board_type}_firmware_utils.py")
set(common_firmware_utils "firmware_utils.py")
set(application "${CMAKE_PROJECT_NAME}.bin")
set(bootloader "bootloader/bootloader.bin")
set(partition_table "partition_table/partition-table.bin")
set(flashing_script "${CMAKE_PROJECT_NAME}.flash.py")
set(manifest "${CMAKE_PROJECT_NAME}.flashbundle.txt")
configure_file("${flashing_utils_dir}/${board_firmware_utils}" "${build_dir}/${board_firmware_utils}" COPYONLY)
configure_file("${flashing_utils_dir}/${common_firmware_utils}" "${build_dir}/${common_firmware_utils}" COPYONLY)
get_additional_flashing_depends(${ARGN})
foreach(dep IN LISTS additional_flashing_depends)
get_filename_component(filename ${dep} NAME)
configure_file("${dep}" "${build_dir}/${filename}" COPYONLY)
list(APPEND build_dir_depends "${build_dir}/${filename}")
endforeach(dep)
set(manifest_files ${application} ${bootloader} ${partition_table} ${flashing_script} ${board_firmware_utils} ${common_firmware_utils})
list(JOIN manifest_files "\n" manifest_content)
file(GENERATE
OUTPUT "${build_dir}/${manifest}"
CONTENT "${manifest_content}\n")
add_custom_target(flashing_script
ALL
COMMAND ${python}
"${project_path}/third_party/connectedhomeip/scripts/flashing/gen_flashing_script.py" ${board_type}
--output "${build_dir}/${flashing_script}"
--port "$ENV{ESPPORT}"
--baud 460800
--before ${CONFIG_ESPTOOLPY_BEFORE}
--after ${CONFIG_ESPTOOLPY_AFTER}
--application "${application}"
--bootloader "${bootloader}"
--partition "${partition_table}"
--use-partition-file "${build_dir}/${partition_table}"
--use-parttool ${idf_path}/components/partition_table/parttool.py
--use-sdkconfig ${project_path}/sdkconfig
WORKING_DIRECTORY ${build_dir}
DEPENDS "${build_dir}/${board_firmware_utils}"
"${build_dir}/${partition_table}"
"${build_dir}/firmware_utils.py"
"${build_dir_deps}"
COMMENT "To flash ${build_dir}/${CMAKE_PROJECT_NAME}.bin run ./build/${CMAKE_PROJECT_NAME}.flash.py"
VERBATIM)
endmacro(flashing_script)