From 7f065438178036844f03e6fe121d4dd8810b0e01 Mon Sep 17 00:00:00 2001 From: Angus Gratton Date: Mon, 20 Aug 2018 18:24:18 +1000 Subject: [PATCH] cmake/partitions: Apply offset to partition table metadata correctly Also warn if the parttool.py has an error --- components/esptool_py/flasher_args.json.in | 2 +- components/partition_table/CMakeLists.txt | 2 +- components/partition_table/parttool.py | 4 ++++ components/partition_table/project_include.cmake | 13 +++++++++++-- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/components/esptool_py/flasher_args.json.in b/components/esptool_py/flasher_args.json.in index ca591617ad..4ec3a8c243 100644 --- a/components/esptool_py/flasher_args.json.in +++ b/components/esptool_py/flasher_args.json.in @@ -5,7 +5,7 @@ "flash_files" : { "0x1000" : "bootloader/bootloader.bin", "${PARTITION_TABLE_OFFSET}" : "partition_table/partition-table.bin", - "${CONFIG_APP_OFFSET}" : "${PROJECT_NAME}.bin", + "${APP_PARTITION_OFFSET}" : "${PROJECT_NAME}.bin", "${PHY_PARTITION_OFFSET}" : "${PHY_PARTITION_BIN_FILE}" }, "bootloader" : { "offset" : "0x1000", diff --git a/components/partition_table/CMakeLists.txt b/components/partition_table/CMakeLists.txt index aa835c704b..a97080c4cd 100644 --- a/components/partition_table/CMakeLists.txt +++ b/components/partition_table/CMakeLists.txt @@ -23,7 +23,7 @@ if(CONFIG_ESPTOOLPY_FLASHSIZE) endif() add_custom_command(OUTPUT "${unsigned_partition_bin}" - COMMAND "${PYTHON}" "${CMAKE_CURRENT_SOURCE_DIR}/gen_esp32part.py" -q ${md5_opt} ${flashsize_opt} + COMMAND "${PYTHON}" "${CMAKE_CURRENT_SOURCE_DIR}/gen_esp32part.py" -q --offset ${PARTITION_TABLE_OFFSET} ${md5_opt} ${flashsize_opt} ${partition_csv} ${unsigned_partition_bin} DEPENDS ${partition_csv} "${CMAKE_CURRENT_SOURCE_DIR}/gen_esp32part.py" VERBATIM) diff --git a/components/partition_table/parttool.py b/components/partition_table/parttool.py index 8188dfe3dd..145fb8d3c5 100755 --- a/components/partition_table/parttool.py +++ b/components/partition_table/parttool.py @@ -49,6 +49,8 @@ def main(): parser.add_argument('--quiet', '-q', help="Don't print status messages to stderr", action='store_true') + parser.add_argument('--partition-table-offset', help='The offset of the partition table in flash. Only consulted if partition table is in CSV format.', type=str, default='0x8000') + search_type = parser.add_mutually_exclusive_group() search_type.add_argument('--partition-name', '-p', help='The name of the required partition', type=str, default=None) search_type.add_argument('--type', '-t', help='The type of the required partition', type=str, default=None) @@ -74,6 +76,8 @@ def main(): quiet = args.quiet + gen.offset_part_table = int(args.partition_table_offset, 0) + input = args.input.read() input_is_binary = input[0:2] == gen.PartitionDefinition.MAGIC_BYTES if input_is_binary: diff --git a/components/partition_table/project_include.cmake b/components/partition_table/project_include.cmake index b09ffd358e..8af1e0ee92 100644 --- a/components/partition_table/project_include.cmake +++ b/components/partition_table/project_include.cmake @@ -9,7 +9,8 @@ if(CONFIG_PARTITION_TABLE_CUSTOM) get_filename_component(PARTITION_CSV_PATH "${CONFIG_PARTITION_TABLE_FILENAME}" ABSOLUTE BASE_DIR "${PROJECT_PATH}") if(NOT EXISTS "${PARTITION_CSV_PATH}") - message(FATAL_ERROR "Partition table CSV file ${PARTITION_CSV_PATH} not found. Change custom partition CSV path in menuconfig.") + message(WARNING "Partition table CSV file ${PARTITION_CSV_PATH} not found. " + "Change custom partition CSV path in menuconfig.") endif() else() # Other .csv files are always in the component directory @@ -27,9 +28,17 @@ set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${PARTITION_CSV_P function(get_partition_info variable get_part_info_args) separate_arguments(get_part_info_args) execute_process(COMMAND - ${COMPONENT_PATH}/parttool.py -q ${get_part_info_args} ${PARTITION_CSV_PATH} + ${COMPONENT_PATH}/parttool.py -q + --partition-table-offset ${PARTITION_TABLE_OFFSET} + ${get_part_info_args} + ${PARTITION_CSV_PATH} OUTPUT_VARIABLE result + RESULT_VARIABLE exit_code OUTPUT_STRIP_TRAILING_WHITESPACE) + if(NOT ${exit_code} EQUAL 0 AND NOT ${exit_code} EQUAL 1) + # can't fail here as it would prevent the user from running 'menuconfig' again + message(WARNING "parttool.py execution failed (${result}), problem with partition CSV file (see above)") + endif() set(${variable} ${result} PARENT_SCOPE) endfunction() -- 2.40.0