From 515769010998f597ba7d217759e52f15a05bb653 Mon Sep 17 00:00:00 2001 From: Frantisek Hrbata Date: Tue, 9 Sep 2025 10:15:20 +0200 Subject: [PATCH] feat(cmakev2/project): add idf_build_generate_flasher_args function Generate the flasher_args.json file for the global flash target for tools that require it. Signed-off-by: Frantisek Hrbata --- tools/cmakev2/project.cmake | 51 +++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/tools/cmakev2/project.cmake b/tools/cmakev2/project.cmake index 92111edc1ce..cb0f2369ccb 100644 --- a/tools/cmakev2/project.cmake +++ b/tools/cmakev2/project.cmake @@ -622,6 +622,55 @@ macro(idf_project_init) unset(project_initialized) endmacro() +#[[api +.. cmakev2:macro:: idf_build_generate_flasher_args + + .. code-block:: cmake + + idf_build_generate_flasher_args() + + Generate the flasher_args.json file for the global flash target for tools + that require it. +#]] +function(idf_build_generate_flasher_args) + # The variables listed below are used to configure the template + # flasher_args.json.in. Some of these variables, such as flash mode, size, + # and frequency, are set as properties of the esptool_py component. + + idf_build_get_property(target IDF_TARGET) + set(ESPTOOLPY_CHIP "${target}") + set(ESPTOOLPY_BEFORE "${CONFIG_ESPTOOLPY_BEFORE}") + set(ESPTOOLPY_AFTER "${CONFIG_ESPTOOLPY_AFTER}") + if(CONFIG_ESPTOOLPY_NO_STUB) + set(ESPTOOLPY_WITH_STUB false) + else() + set(ESPTOOLPY_WITH_STUB true) + endif() + + if(CONFIG_SECURE_BOOT OR CONFIG_SECURE_FLASH_ENC_ENABLED) + # If security enabled then override post flash option + set(ESPTOOLPY_AFTER "no_reset") + endif() + + idf_component_get_property(ESPFLASHMODE esptool_py ESPFLASHMODE) + idf_component_get_property(ESPFLASHFREQ esptool_py ESPFLASHFREQ) + idf_component_get_property(ESPFLASHSIZE esptool_py ESPFLASHSIZE) + idf_component_get_property(esptool_py_dir esptool_py COMPONENT_DIR) + + # Generate flasher args files + idf_build_get_property(build_dir BUILD_DIR) + file(READ "${esptool_py_dir}/flasher_args.json.in" flasher_args_content) + string(CONFIGURE "${flasher_args_content}" flasher_args_content) + + # We need to create a flasher_args.json.in to create the final flasher_args.json + # because CMake only resolves generator expressions in the file_generate command + # with the INPUT keyword during the generation phase. + file_generate("${build_dir}/flasher_args.json.in" + CONTENT "${flasher_args_content}") + file_generate("${build_dir}/flasher_args.json" + INPUT "${build_dir}/flasher_args.json.in") +endfunction() + #[[api .. cmakev2:macro:: idf_project_default @@ -686,6 +735,8 @@ macro(idf_project_default) if(CONFIG_APP_BUILD_BOOTLOADER) add_dependencies(flash "bootloader") endif() + + idf_build_generate_flasher_args() endif() idf_build_generate_metadata("${executable}")