[PATCH 4/6] build: Add support to make bootloader images
Sebastian Huber
sebastian.huber at embedded-brains.de
Wed Feb 28 07:44:52 UTC 2024
On 28.02.24 06:48, Chris Johns wrote:
> Hi,
>
> Is this to allow BSP ready output to be created from the build system?
Yes, this is the goal.
>
> If it is will the details be exported in the pkgconfig file and made available
> for users building applications in a consistent and easy to use way?
Application build systems can query the tool using the RTEMS_MKIMAGE
package configuration varible, for example:
pkg-config --variable=RTEMS_MKIMAGE
${prefix}/lib/pkgconfig/${ARCH}-${BSP_NAME}.pc
If the BSP does not provide a tool, then the variable RTEMS_MKIMAGE is
set to "false".
It could help to export also EXEEXT and BOOT_IMAGE_EXTENSION in the
package configuration file. For RTEMS 6, we should have a look how our
package configuration support can be used to build applications on some
commonly used build systems. We are currently not able to produce build
images.
>
> Is this output created along side the ELF file?
Yes.
>
> Does this approach handle all BSPs that need this?
The BSP can use Python, so I would say yes.
>
> Will you be converting all BSPs that need this type of support?
I will add support for the BSPs using U-Boot.
>
> Thanks
> Chris
>
> On 28/2/2024 2:15 am, Sebastian Huber wrote:
>> Add a new build item type to provide optional BSP-specific tools to make
>> bootloader images. The tools are installed as Python scripts in:
>>
>> ${prefix}/bin/rtems-mkimage-${ARCH}-${BSP_NAME}.py
>>
>> Application build systems can query the tool using the RTEMS_MKIMAGE package
>> configuration varible, for example:
>>
>> pkg-config --variable=RTEMS_MKIMAGE ${prefix}/lib/pkgconfig/${ARCH}-${BSP_NAME}.pc
>>
>> If the BSP does not provide a tool, then the variable RTEMS_MKIMAGE is set to
>> "false".
>>
>> Update #4272.
>> ---
>> spec/build/bsps/bspopts.yml | 2 ++
>> spec/build/bsps/optpkgmkimage.yml | 19 ++++++++++
>> spec/build/bsps/pkgconfig.yml | 1 +
>> spec/build/cpukit/cpuopts.yml | 4 +++
>> spec/build/cpukit/optbootimageext.yml | 17 +++++++++
>> spec/build/cpukit/optbuildbootimages.yml | 16 +++++++++
>> wscript | 45 ++++++++++++++++++++++--
>> 7 files changed, 102 insertions(+), 2 deletions(-)
>> create mode 100644 spec/build/bsps/optpkgmkimage.yml
>> create mode 100644 spec/build/cpukit/optbootimageext.yml
>> create mode 100644 spec/build/cpukit/optbuildbootimages.yml
>>
>> diff --git a/spec/build/bsps/bspopts.yml b/spec/build/bsps/bspopts.yml
>> index 734292f421..74fe6d17f9 100644
>> --- a/spec/build/bsps/bspopts.yml
>> +++ b/spec/build/bsps/bspopts.yml
>> @@ -33,6 +33,8 @@ links:
>> uid: optldflagsbsp
>> - role: build-dependency
>> uid: optmakelegacy
>> +- role: build-dependency
>> + uid: optpkgmkimage
>> - role: build-dependency
>> uid: optprintexcpt
>> - role: build-dependency
>> diff --git a/spec/build/bsps/optpkgmkimage.yml b/spec/build/bsps/optpkgmkimage.yml
>> new file mode 100644
>> index 0000000000..00d9a0171f
>> --- /dev/null
>> +++ b/spec/build/bsps/optpkgmkimage.yml
>> @@ -0,0 +1,19 @@
>> +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
>> +actions:
>> +- get-string: null
>> +- substitute: null
>> +- env-assign: null
>> +build-type: option
>> +copyrights:
>> +- Copyright (C) 2024 embedded brains GmbH & Co. KG
>> +default:
>> +- enabled-by: HAVE_MKIMAGE
>> + value: $${prefix}/bin/rtems-mkimage-${ARCH}-${BSP_NAME}.py
>> +- enabled-by: true
>> + value: 'false'
>> +description: ''
>> +enabled-by: true
>> +format: '{}'
>> +links: []
>> +name: PKGCONFIG_MKIMAGE
>> +type: build
>> diff --git a/spec/build/bsps/pkgconfig.yml b/spec/build/bsps/pkgconfig.yml
>> index afaffbbf0f..e1cdc9a70e 100644
>> --- a/spec/build/bsps/pkgconfig.yml
>> +++ b/spec/build/bsps/pkgconfig.yml
>> @@ -20,6 +20,7 @@ content: |
>> RTEMS_MAJOR=${__RTEMS_MAJOR__}
>> RTEMS_MINOR=${__RTEMS_MINOR__}
>> RTEMS_REVISION=${__RTEMS_REVISION__}
>> + RTEMS_MKIMAGE=${PKGCONFIG_MKIMAGE}
>>
>> Name: ${ARCH}-rtems${__RTEMS_MAJOR__}-${BSP_NAME}
>> Version: ${RTEMS_VERSION}
>> diff --git a/spec/build/cpukit/cpuopts.yml b/spec/build/cpukit/cpuopts.yml
>> index 1d28ace552..bdf8fc2f66 100644
>> --- a/spec/build/cpukit/cpuopts.yml
>> +++ b/spec/build/cpukit/cpuopts.yml
>> @@ -75,6 +75,10 @@ links:
>> uid: optcoverageldflags
>> - role: build-dependency
>> uid: optnocoverageldflags
>> +- role: build-dependency
>> + uid: optbootimageext
>> +- role: build-dependency
>> + uid: optbuildbootimages
>> - role: build-dependency
>> uid: optversion
>> target: cpukit/include/rtems/score/cpuopts.h
>> diff --git a/spec/build/cpukit/optbootimageext.yml b/spec/build/cpukit/optbootimageext.yml
>> new file mode 100644
>> index 0000000000..c9347ffba8
>> --- /dev/null
>> +++ b/spec/build/cpukit/optbootimageext.yml
>> @@ -0,0 +1,17 @@
>> +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
>> +actions:
>> +- get-string: null
>> +- env-assign: null
>> +build-type: option
>> +copyrights:
>> +- Copyright (C) 2024 embedded brains GmbH & Co. KG
>> +default:
>> +- enabled-by: true
>> + value: .img
>> +description: |
>> + Defines the file extension of boot images.
>> +enabled-by: true
>> +format: '{}'
>> +links: []
>> +name: BOOT_IMAGE_EXTENSION
>> +type: build
>> diff --git a/spec/build/cpukit/optbuildbootimages.yml b/spec/build/cpukit/optbuildbootimages.yml
>> new file mode 100644
>> index 0000000000..12328b006d
>> --- /dev/null
>> +++ b/spec/build/cpukit/optbuildbootimages.yml
>> @@ -0,0 +1,16 @@
>> +SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
>> +actions:
>> +- get-boolean: null
>> +- env-enable: null
>> +build-type: option
>> +copyrights:
>> +- Copyright (C) 2024 embedded brains GmbH & Co. KG
>> +default:
>> +- enabled-by: true
>> + value: false
>> +description: |
>> + If this option is enabled, then boot images for the test programs are built.
>> +enabled-by: true
>> +links: []
>> +name: BUILD_BOOT_IMAGES
>> +type: build
>> diff --git a/wscript b/wscript
>> index e43ae8ba3e..c6cfad147a 100755
>> --- a/wscript
>> +++ b/wscript
>> @@ -197,6 +197,15 @@ def make_tar_info_reproducible(info):
>> return info
>>
>>
>> +def make_image(bld, target):
>> + if not target.endswith(".norun.exe"):
>> + if bld.env.BUILD_TOOL_MKIMAGE:
>> + image = os.path.splitext(target)[0] + bld.env.BOOT_IMAGE_EXTENSION
>> + bld(rule="${BUILD_TOOL_MKIMAGE} ${SRC} ${TGT}",
>> + source=target,
>> + target=image)
>> +
>> +
>> class Item(object):
>>
>> def __init__(self, uid, data):
>> @@ -590,6 +599,30 @@ class ConfigFileItem(Item):
>> self.install_target(bld)
>>
>>
>> +class MakeImageItem(Item):
>> +
>> + def __init__(self, uid, data):
>> + super(MakeImageItem, self).__init__(uid, data)
>> +
>> + def do_configure(self, conf, cic):
>> + content = self.substitute(conf, self.data["content"])
>> + f = conf.bldnode.make_node(conf.env.VARIANT + "/bin/mkimage.py")
>> + f.parent.mkdir()
>> + f.write(content)
>> + # 493 == 0755
>> + f.chmod(493)
>> + file_path = f.abspath()
>> + conf.env.BUILD_TOOL_MKIMAGE = file_path
>> + conf.env.append_value("cfg_files", file_path)
>> + conf.env.append_value("ENABLE", "HAVE_MKIMAGE")
>> +
>> + def do_build(self, bld, bic):
>> + bld.install_as("${PREFIX}/bin/rtems-mkimage-" + bld.env.ARCH + "-" +
>> + bld.env.BSP_NAME + ".py",
>> + "bin/mkimage.py",
>> + chmod=493)
>> +
>> +
>> class ConfigHeaderItem(Item):
>>
>> def __init__(self, uid, data):
>> @@ -745,6 +778,7 @@ class TestProgramItem(Item):
>> )
>>
>> def do_build(self, bld, bic):
>> + target = self.get(bld, "target")
>> bld(
>> cflags=bic.cflags,
>> cppflags=bic.cppflags,
>> @@ -756,9 +790,10 @@ class TestProgramItem(Item):
>> source=self.data["source"],
>> start_files=True,
>> stlib=self.data["stlib"],
>> - target=self.get(bld, "target"),
>> + target=target,
>> use=bic.objects + bic.use,
>> )
>> + make_image(bld, target)
>>
>>
>> class AdaTestProgramItem(TestProgramItem):
>> @@ -770,14 +805,16 @@ class AdaTestProgramItem(TestProgramItem):
>> objs = []
>> for s in self.data["source"]:
>> objs.append(self.cc(bld, bic, s))
>> + target = self.get(bld, "target")
>> self.gnatmake(
>> bld,
>> bic,
>> self.data["ada-object-directory"],
>> objs,
>> self.data["ada-main"],
>> - self.data["target"],
>> + target,
>> )
>> + make_image(bld, target)
>>
>>
>> class OptionItem(Item):
>> @@ -1161,6 +1198,9 @@ class ScriptItem(Item):
>> script = self.data["do-build"]
>> if script:
>> exec(script)
>> + target = self.data.get("target", None)
>> + if target is not None:
>> + make_image(bld, self.substitute(bld, target))
>>
>>
>> class ConfigItemContext(object):
>> @@ -1284,6 +1324,7 @@ def load_items(ctx, specs):
>> "test-program": TestProgramItem,
>> "group": GroupItem,
>> "library": LibraryItem,
>> + "mkimage": MakeImageItem,
>> "objects": ObjectsItem,
>> "option": OptionItem,
>> "script": ScriptItem,
--
embedded brains GmbH & Co. KG
Herr Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.huber at embedded-brains.de
phone: +49-89-18 94 741 - 16
fax: +49-89-18 94 741 - 08
Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/
More information about the devel
mailing list