kopia lustrzana https://github.com/espressif/esp-idf
Merge branch 'bugfix/cmake_issues' into 'master'
CMake bugfixes See merge request espressif/esp-idf!7605pull/4904/head
commit
2f1815f74e
|
@ -226,7 +226,12 @@ $<JOIN:$<TARGET_PROPERTY:encrypted-${target_name},IMAGES>,\n>")
|
||||||
CONTENT "${flash_args_content}")
|
CONTENT "${flash_args_content}")
|
||||||
file(GENERATE OUTPUT "${build_dir}/encrypted_${target_name}_args"
|
file(GENERATE OUTPUT "${build_dir}/encrypted_${target_name}_args"
|
||||||
INPUT "${CMAKE_CURRENT_BINARY_DIR}/encrypted_${target_name}_args.in")
|
INPUT "${CMAKE_CURRENT_BINARY_DIR}/encrypted_${target_name}_args.in")
|
||||||
|
else()
|
||||||
|
fail_target(encrypted-${target_name} "Error: The target encrypted-${target_name} requires"
|
||||||
|
"CONFIG_SECURE_FLASH_ENCRYPTION_MODE_DEVELOPMENT to be enabled.")
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# 'cmake -E' doesn't have a way to fail outright, so run this script
|
# 'cmake -E' doesn't have a way to fail outright, so run this script
|
||||||
# with 'cmake -P' to fail a build.
|
# with 'cmake -P' to fail a build.
|
||||||
message(FATAL_ERROR "Failing the build (see errors on lines above)")
|
message(FATAL_ERROR "$ENV{FAIL_MESSAGE}")
|
||||||
|
|
||||||
|
|
|
@ -214,13 +214,37 @@ function(fail_at_build_time target_name message_line0)
|
||||||
set(filename "${CMAKE_CURRENT_BINARY_DIR}/${filename}.cmake")
|
set(filename "${CMAKE_CURRENT_BINARY_DIR}/${filename}.cmake")
|
||||||
file(WRITE "${filename}" "")
|
file(WRITE "${filename}" "")
|
||||||
include("${filename}")
|
include("${filename}")
|
||||||
|
set(fail_message "Failing the build (see errors on lines above)")
|
||||||
add_custom_target(${target_name} ALL
|
add_custom_target(${target_name} ALL
|
||||||
${message_lines}
|
${message_lines}
|
||||||
COMMAND ${CMAKE_COMMAND} -E remove "${filename}"
|
COMMAND ${CMAKE_COMMAND} -E remove "${filename}"
|
||||||
COMMAND ${CMAKE_COMMAND} -P ${idf_path}/tools/cmake/scripts/fail.cmake
|
COMMAND ${CMAKE_COMMAND} -E env FAIL_MESSAGE=${fail_message}
|
||||||
|
${CMAKE_COMMAND} -P ${idf_path}/tools/cmake/scripts/fail.cmake
|
||||||
VERBATIM)
|
VERBATIM)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
# fail_target
|
||||||
|
#
|
||||||
|
# Creates a phony target which fails when invoked. This is used when the necessary conditions
|
||||||
|
# for a target are not met, such as configuration. Rather than ommitting the target altogether,
|
||||||
|
# we fail execution with a helpful message.
|
||||||
|
function(fail_target target_name message_line0)
|
||||||
|
idf_build_get_property(idf_path IDF_PATH)
|
||||||
|
set(message_lines COMMAND ${CMAKE_COMMAND} -E echo "${message_line0}")
|
||||||
|
foreach(message_line ${ARGN})
|
||||||
|
set(message_lines ${message_lines} COMMAND ${CMAKE_COMMAND} -E echo "${message_line}")
|
||||||
|
endforeach()
|
||||||
|
# Generate a timestamp file that gets included. When deleted on build, this forces CMake
|
||||||
|
# to rerun.
|
||||||
|
set(fail_message "Failed executing target (see errors on lines above)")
|
||||||
|
add_custom_target(${target_name}
|
||||||
|
${message_lines}
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E env FAIL_MESSAGE=${fail_message}
|
||||||
|
${CMAKE_COMMAND} -P ${idf_path}/tools/cmake/scripts/fail.cmake
|
||||||
|
VERBATIM)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
|
||||||
function(check_exclusive_args args prefix)
|
function(check_exclusive_args args prefix)
|
||||||
set(_args ${args})
|
set(_args ${args})
|
||||||
spaces2list(_args)
|
spaces2list(_args)
|
||||||
|
|
|
@ -111,6 +111,7 @@ def action_extensions(base_actions, project_path):
|
||||||
run_tool("idf_monitor", monitor_args, args.project_dir)
|
run_tool("idf_monitor", monitor_args, args.project_dir)
|
||||||
|
|
||||||
def flash(action, ctx, args):
|
def flash(action, ctx, args):
|
||||||
|
ensure_build_directory(args, ctx.info_name)
|
||||||
"""
|
"""
|
||||||
Run esptool to flash the entire project, from an argfile generated by the build system
|
Run esptool to flash the entire project, from an argfile generated by the build system
|
||||||
"""
|
"""
|
||||||
|
@ -147,8 +148,7 @@ def action_extensions(base_actions, project_path):
|
||||||
"callback": flash,
|
"callback": flash,
|
||||||
"help": "Flash the project.",
|
"help": "Flash the project.",
|
||||||
"options": global_options + [baud_rate, port],
|
"options": global_options + [baud_rate, port],
|
||||||
"dependencies": ["all"],
|
"order_dependencies": ["all", "erase_flash"],
|
||||||
"order_dependencies": ["erase_flash"],
|
|
||||||
},
|
},
|
||||||
"erase_flash": {
|
"erase_flash": {
|
||||||
"callback": erase_flash,
|
"callback": erase_flash,
|
||||||
|
@ -197,34 +197,29 @@ def action_extensions(base_actions, project_path):
|
||||||
"callback": flash,
|
"callback": flash,
|
||||||
"help": "Flash partition table only.",
|
"help": "Flash partition table only.",
|
||||||
"options": [baud_rate, port],
|
"options": [baud_rate, port],
|
||||||
"dependencies": ["partition_table"],
|
"order_dependencies": ["partition_table", "erase_flash"],
|
||||||
"order_dependencies": ["erase_flash"],
|
|
||||||
},
|
},
|
||||||
"bootloader-flash": {
|
"bootloader-flash": {
|
||||||
"callback": flash,
|
"callback": flash,
|
||||||
"help": "Flash bootloader only.",
|
"help": "Flash bootloader only.",
|
||||||
"options": [baud_rate, port],
|
"options": [baud_rate, port],
|
||||||
"dependencies": ["bootloader"],
|
"order_dependencies": ["bootloader", "erase_flash"],
|
||||||
"order_dependencies": ["erase_flash"],
|
|
||||||
},
|
},
|
||||||
"app-flash": {
|
"app-flash": {
|
||||||
"callback": flash,
|
"callback": flash,
|
||||||
"help": "Flash the app only.",
|
"help": "Flash the app only.",
|
||||||
"options": [baud_rate, port],
|
"options": [baud_rate, port],
|
||||||
"dependencies": ["app"],
|
"order_dependencies": ["app", "erase_flash"],
|
||||||
"order_dependencies": ["erase_flash"],
|
|
||||||
},
|
},
|
||||||
"encrypted-app-flash": {
|
"encrypted-app-flash": {
|
||||||
"callback": flash,
|
"callback": flash,
|
||||||
"help": "Flash the encrypted app only.",
|
"help": "Flash the encrypted app only.",
|
||||||
"dependencies": ["app"],
|
"order_dependencies": ["app", "erase_flash"],
|
||||||
"order_dependencies": ["erase_flash"],
|
|
||||||
},
|
},
|
||||||
"encrypted-flash": {
|
"encrypted-flash": {
|
||||||
"callback": flash,
|
"callback": flash,
|
||||||
"help": "Flash the encrypted project.",
|
"help": "Flash the encrypted project.",
|
||||||
"dependencies": ["all"],
|
"order_dependencies": ["all", "erase_flash"],
|
||||||
"order_dependencies": ["erase_flash"],
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,7 +84,7 @@ class TestDependencyManagement(unittest.TestCase):
|
||||||
args=['--dry-run', 'flash'],
|
args=['--dry-run', 'flash'],
|
||||||
standalone_mode=False,
|
standalone_mode=False,
|
||||||
)
|
)
|
||||||
self.assertEqual(['all', 'flash'], list(result.keys()))
|
self.assertEqual(['flash'], list(result.keys()))
|
||||||
|
|
||||||
def test_order_only_dependencies(self):
|
def test_order_only_dependencies(self):
|
||||||
result = idf.init_cli()(
|
result = idf.init_cli()(
|
||||||
|
@ -105,7 +105,7 @@ class TestDependencyManagement(unittest.TestCase):
|
||||||
args=['--dry-run', 'clean', 'monitor', 'clean', 'fullclean', 'flash'],
|
args=['--dry-run', 'clean', 'monitor', 'clean', 'fullclean', 'flash'],
|
||||||
standalone_mode=False,
|
standalone_mode=False,
|
||||||
)
|
)
|
||||||
self.assertEqual(['fullclean', 'clean', 'all', 'flash', 'monitor'], list(result.keys()))
|
self.assertEqual(['fullclean', 'clean', 'flash', 'monitor'], list(result.keys()))
|
||||||
|
|
||||||
def test_dupplicated_commands_warning(self):
|
def test_dupplicated_commands_warning(self):
|
||||||
capturedOutput = StringIO()
|
capturedOutput = StringIO()
|
||||||
|
|
Ładowanie…
Reference in New Issue