[PATCH 4/6] build: Add support to make bootloader images
Frank Kühndel
frank.kuehndel at embedded-brains.de
Tue Feb 27 17:42:04 UTC 2024
Hello Sebastian,
On 2/27/24 16:15, 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".
Do I see this right? This will create automatically an
${PREFIX}/bin/rtems-mkimage-arm-xilinx-zynq.py
if RTEMS is build for ARM/xilinx-zynq and a mkimage shell command is
found on the host?
Where ${PREFIX} is the RTEMS install path and not necessarily the tools
path (i.e. it may not be in $PATH)?
Is it worth documenting that one can add this feature for further BSP by
creating an appropriate spec/build/bsps/<Arch>/<BSP>/mkimage.yml file?
> 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)
In Python2 and Python3: 0o755
Greetings,
fk
> + 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,
> -- 2.35.3 _______________________________________________ devel mailing
> list devel at rtems.org http://lists.rtems.org/mailman/listinfo/devel
>
--
embedded brains GmbH & Co. KG
Herr Frank KÜHNDEL
Dornierstr. 4
82178 Puchheim
Germany
email: frank.kuehndel at embedded-brains.de
phone: +49-89-18 94 741 - 23
mobile: +49-176-15 22 06 - 11
Registergericht: Amtsgericht München
Registernummer: HRA 117265
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