From 29489a3303f2bb7621ecb3e6f25e680fa8e6dc74 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Fri, 9 Oct 2020 19:06:33 +0200 Subject: [PATCH] build system: fix quoting of fragments list passed to ldgen --- tools/cmake/ldgen.cmake | 19 ++++++++++--------- tools/ldgen/ldgen.py | 20 +++++++++++++++++--- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/tools/cmake/ldgen.cmake b/tools/cmake/ldgen.cmake index d8c5d0eb7d..54b10bc91f 100644 --- a/tools/cmake/ldgen.cmake +++ b/tools/cmake/ldgen.cmake @@ -53,23 +53,24 @@ function(__ldgen_process_template template output) if($ENV{LDGEN_CHECK_MAPPING}) set(ldgen_check "--check-mapping" - "--check-mapping-exceptions=${idf_path}/tools/ci/check_ldgen_mapping_exceptions.txt") + "--check-mapping-exceptions" "${idf_path}/tools/ci/check_ldgen_mapping_exceptions.txt") message(STATUS "Mapping check enabled in ldgen") endif() add_custom_command( OUTPUT ${output} - COMMAND ${python} ${idf_path}/tools/ldgen/ldgen.py - --config ${sdkconfig} - --fragments "$" - --input ${template} - --output ${output} - --kconfig ${root_kconfig} + COMMAND ${python} "${idf_path}/tools/ldgen/ldgen.py" + --config "${sdkconfig}" + --fragments-list "${ldgen_fragment_files}" + --input "${template}" + --output "${output}" + --kconfig "${root_kconfig}" --env-file "${config_env_path}" - --libraries-file ${build_dir}/ldgen_libraries - --objdump ${CMAKE_OBJDUMP} + --libraries-file "${build_dir}/ldgen_libraries" + --objdump "${CMAKE_OBJDUMP}" ${ldgen_check} DEPENDS ${template} ${ldgen_fragment_files} ${ldgen_depends} ${SDKCONFIG} + VERBATIM ) get_filename_component(_name ${output} NAME) diff --git a/tools/ldgen/ldgen.py b/tools/ldgen/ldgen.py index aba52f2c28..a621c12423 100755 --- a/tools/ldgen/ldgen.py +++ b/tools/ldgen/ldgen.py @@ -50,11 +50,20 @@ def main(): help='Linker template file', type=argparse.FileType('r')) - argparser.add_argument( + fragments_group = argparser.add_mutually_exclusive_group() + + fragments_group.add_argument( '--fragments', '-f', type=argparse.FileType('r'), help='Input fragment files', - nargs='+') + nargs='+' + ) + + fragments_group.add_argument( + '--fragments-list', + help='Input fragment files as a semicolon-separated list', + type=str + ) argparser.add_argument( '--libraries-file', @@ -102,13 +111,18 @@ def main(): args = argparser.parse_args() input_file = args.input - fragment_files = [] if not args.fragments else args.fragments libraries_file = args.libraries_file config_file = args.config output_path = args.output kconfig_file = args.kconfig objdump = args.objdump + fragment_files = [] + if args.fragments_list: + fragment_files = args.fragments_list.split(';') + elif args.fragments: + fragment_files = args.fragments + check_mapping = args.check_mapping if args.check_mapping_exceptions: check_mapping_exceptions = [line.strip() for line in args.check_mapping_exceptions]