Merge branch 'bugfix/cmake_issues' into 'master'

CMake bugfixes

See merge request espressif/esp-idf!7605
This commit is contained in:
Angus Gratton 2020-03-06 14:36:59 +08:00
commit 2f1815f74e
5 changed files with 40 additions and 16 deletions

View file

@ -226,7 +226,12 @@ $<JOIN:$<TARGET_PROPERTY:encrypted-${target_name},IMAGES>,\n>")
CONTENT "${flash_args_content}")
file(GENERATE OUTPUT "${build_dir}/encrypted_${target_name}_args"
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()
endfunction()

View file

@ -1,4 +1,4 @@
# 'cmake -E' doesn't have a way to fail outright, so run this script
# with 'cmake -P' to fail a build.
message(FATAL_ERROR "Failing the build (see errors on lines above)")
message(FATAL_ERROR "$ENV{FAIL_MESSAGE}")

View file

@ -214,13 +214,37 @@ function(fail_at_build_time target_name message_line0)
set(filename "${CMAKE_CURRENT_BINARY_DIR}/${filename}.cmake")
file(WRITE "${filename}" "")
include("${filename}")
set(fail_message "Failing the build (see errors on lines above)")
add_custom_target(${target_name} ALL
${message_lines}
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)
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)
set(_args ${args})
spaces2list(_args)

View file

@ -111,6 +111,7 @@ def action_extensions(base_actions, project_path):
run_tool("idf_monitor", monitor_args, args.project_dir)
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
"""
@ -147,8 +148,7 @@ def action_extensions(base_actions, project_path):
"callback": flash,
"help": "Flash the project.",
"options": global_options + [baud_rate, port],
"dependencies": ["all"],
"order_dependencies": ["erase_flash"],
"order_dependencies": ["all", "erase_flash"],
},
"erase_flash": {
"callback": erase_flash,
@ -197,34 +197,29 @@ def action_extensions(base_actions, project_path):
"callback": flash,
"help": "Flash partition table only.",
"options": [baud_rate, port],
"dependencies": ["partition_table"],
"order_dependencies": ["erase_flash"],
"order_dependencies": ["partition_table", "erase_flash"],
},
"bootloader-flash": {
"callback": flash,
"help": "Flash bootloader only.",
"options": [baud_rate, port],
"dependencies": ["bootloader"],
"order_dependencies": ["erase_flash"],
"order_dependencies": ["bootloader", "erase_flash"],
},
"app-flash": {
"callback": flash,
"help": "Flash the app only.",
"options": [baud_rate, port],
"dependencies": ["app"],
"order_dependencies": ["erase_flash"],
"order_dependencies": ["app", "erase_flash"],
},
"encrypted-app-flash": {
"callback": flash,
"help": "Flash the encrypted app only.",
"dependencies": ["app"],
"order_dependencies": ["erase_flash"],
"order_dependencies": ["app", "erase_flash"],
},
"encrypted-flash": {
"callback": flash,
"help": "Flash the encrypted project.",
"dependencies": ["all"],
"order_dependencies": ["erase_flash"],
"order_dependencies": ["all", "erase_flash"],
},
},
}

View file

@ -84,7 +84,7 @@ class TestDependencyManagement(unittest.TestCase):
args=['--dry-run', 'flash'],
standalone_mode=False,
)
self.assertEqual(['all', 'flash'], list(result.keys()))
self.assertEqual(['flash'], list(result.keys()))
def test_order_only_dependencies(self):
result = idf.init_cli()(
@ -105,7 +105,7 @@ class TestDependencyManagement(unittest.TestCase):
args=['--dry-run', 'clean', 'monitor', 'clean', 'fullclean', 'flash'],
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):
capturedOutput = StringIO()