We have the BINMAN_INDIRS for any external binaries, so they don't have
to be copied into the source/build directory of u-boot. This is
especially important for image builders like buildroot.

Use the get_input_filename() helper which will also look up the paths in
BINMAN_INDIRS. The append case only handle external files, thus we can
use that helper unconditionally.

While at it, update and extend the test case for this image format.
That is, first create the image in the input directory and then check if
there is actually an append comand with that image name in the resulting
.cfgout file.

Signed-off-by: Michael Walle <[email protected]>
---
v4:
 - reword commit message
 - update test case
 - (RESEND) to the new uboot mailing list address.

v3:
 - emit the command strings

v2:
 - forgot to add second lookup. add the same fix

 tools/binman/etype/nxp_imx9image.py | 22 ++++++++++++----------
 tools/binman/ftest.py               |  9 ++++++---
 2 files changed, 18 insertions(+), 13 deletions(-)

diff --git a/tools/binman/etype/nxp_imx9image.py 
b/tools/binman/etype/nxp_imx9image.py
index e0e806f2b7f..1a1465d7e7b 100644
--- a/tools/binman/etype/nxp_imx9image.py
+++ b/tools/binman/etype/nxp_imx9image.py
@@ -50,21 +50,23 @@ class Entry_nxp_imx9image(Entry_mkimage):
 
                 if key.startswith('image') and isinstance(value, list) and 
len(value) == 3:
                     file = value[1]
-                    image_path = os.path.join(tools.get_output_dir(), value[1])
-                    value[1] = image_path
-                    combined = ' '.join(map(str, value))
-
-                    if file in external_files and not os.path.exists(value[1]):
-                        print(f"file '{image_path}' does not exist. flash.bin 
may be not-functional.")
+                    if file in external_files:
+                        value[1] = tools.get_input_filename(file, 
allow_missing=True)
+                        if not value[1]:
+                            print(f"file '{file}' does not exist. flash.bin 
may be not-functional.")
+                            continue
                     else:
-                        f.write(f'image {combined}\n')
+                        value[1] = os.path.join(tools.get_output_dir(), file)
+
+                    combined = ' '.join(map(str, value))
+                    f.write(f'image {combined}\n')
                 elif isinstance(value, str):
                     if key.startswith('append'):
-                        file_path = os.path.join(tools.get_output_dir(), value)
-                        if os.path.exists(file_path):
+                        file_path = tools.get_input_filename(value, 
allow_missing=True)
+                        if file_path:
                             f.write(f'append {file_path}\n')
                         else:
-                            print(f"file '{file_path}' does not exist. 
flash.bin may be not-functional.")
+                            print(f"file '{value}' does not exist. flash.bin 
may be not-functional.")
                     else:
                         f.write(f'{formatted_key} {value}\n')
                 elif isinstance(value, bool):
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index bf98b268ac1..48c5a08b4eb 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -8126,12 +8126,15 @@ fdt         fdtmap                Extract the 
devicetree blob from the fdtmap
         image_path = os.path.join(testdir, 'image.bin')
         with open(image_path, 'w') as f:
             pass
-        container_path = os.path.join(testdir, 'mx95b0-ahab-container.img')
-        with open(container_path, 'w') as f:
-            f.write(bytes([0x87]).decode('latin1') * 32768)
+        self._MakeInputFile('mx95b0-ahab-container.img', bytes([0x87] * 32768))
         with terminal.capture():
             self._DoTestFile('vendor/nxp_imx95.dts', output_dir=testdir)
 
+        fname = tools.get_output_filename('u-boot-container.cfgout')
+        with open(fname, 'r') as fd:
+            data = fd.read()
+            self.assertRegex(data, "append .*/mx95b0-ahab-container.img\n")
+
     def testFitSignSimple(self):
         """Test that image with FIT and signature nodes can be signed"""
         if not elf.ELF_TOOLS:
-- 
2.47.3

Reply via email to