Jelajahi Sumber

build system: fix quoting of fragments list passed to ldgen

Ivan Grokhotkov 5 tahun lalu
induk
melakukan
29489a3303
2 mengubah file dengan 27 tambahan dan 12 penghapusan
  1. 10 9
      tools/cmake/ldgen.cmake
  2. 17 3
      tools/ldgen/ldgen.py

+ 10 - 9
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 "$<JOIN:${ldgen_fragment_files},\t>"
-        --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)

+ 17 - 3
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]