diff mbox

[RFC,1/2] Makefile: add target-genimage

Message ID 1423780427-7493-2-git-send-email-vivien.didelot@savoirfairelinux.com
State Superseded
Headers show

Commit Message

Vivien Didelot Feb. 12, 2015, 10:33 p.m. UTC
genimage is a convenient host tool which eases the generation of images
and partition layout by providing simple configuration files.

This patch adds a new BR2_ROOTFS_GENIMAGE_CFG menuconfig entry, which is
a space-separated list of config files. Indeed, you may want to split
images in different files, or put them all together in the same file.

BR2_ROOTFS_GENIMAGE_HOST_DEPENDENCIES is meant to auto-select the
packages that genimage may use, such as mkdosfs or mcopy (which copies
files from/to unmounted vfat images).

The rational behind adding this to Buildroot is that genimage requires
an overhead configuration to use it, like temporary directories, host
dependencies, and images path, that Buildroot is all aware of. This
minimal addition is optional and allows the user not to write the same
post-image script to wrap the genimage call.

Finally, the new "target-genimage" make target is called before
target-post-image so that the post-image script can still clean
intermediate generated images and do whatever with the very final image.

Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
---
 Makefile         | 17 +++++++++++++++--
 system/Config.in | 22 ++++++++++++++++++++++
 2 files changed, 37 insertions(+), 2 deletions(-)

Comments

Danomi Manchego Feb. 14, 2015, 5:24 p.m. UTC | #1
Vivean,

A couple nitpicks ...

On Thu, Feb 12, 2015 at 5:33 PM, Vivien Didelot
<vivien.didelot@savoirfairelinux.com> wrote:
> genimage is a convenient host tool which eases the generation of images
> and partition layout by providing simple configuration files.
>
> This patch adds a new BR2_ROOTFS_GENIMAGE_CFG menuconfig entry, which is
> a space-separated list of config files. Indeed, you may want to split
> images in different files, or put them all together in the same file.
>
> BR2_ROOTFS_GENIMAGE_HOST_DEPENDENCIES is meant to auto-select the
> packages that genimage may use, such as mkdosfs or mcopy (which copies
> files from/to unmounted vfat images).
>
> The rational behind adding this to Buildroot is that genimage requires

spelling: "rationale".

> an overhead configuration to use it, like temporary directories, host
> dependencies, and images path, that Buildroot is all aware of. This
> minimal addition is optional and allows the user not to write the same
> post-image script to wrap the genimage call.
>
> Finally, the new "target-genimage" make target is called before
> target-post-image so that the post-image script can still clean
> intermediate generated images and do whatever with the very final image.
>
> Signed-off-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
> ---
>  Makefile         | 17 +++++++++++++++--
>  system/Config.in | 22 ++++++++++++++++++++++
>  2 files changed, 37 insertions(+), 2 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 338c992..1eb1619 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -434,7 +434,7 @@ world: target-post-image
>
>  .PHONY: all world toolchain dirs clean distclean source outputmakefile \
>         legal-info legal-info-prepare legal-info-clean printvars \
> -       target-finalize target-post-image \
> +       target-finalize target-genimage target-post-image \
>         $(TARGETS) $(TARGETS_ROOTFS) \
>         $(TARGETS_DIRCLEAN) $(TARGETS_SOURCE) $(TARGETS_LEGAL_INFO) \
>         $(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) \
> @@ -621,7 +621,20 @@ endif
>                 $(call MESSAGE,"Executing post-build script $(s)"); \
>                 $(EXTRA_ENV) $(s) $(TARGET_DIR) $(call qstrip,$(BR2_ROOTFS_POST_SCRIPT_ARGS))$(sep))
>
> -target-post-image: $(TARGETS_ROOTFS) target-finalize
> +target-genimage: $(TARGETS_ROOTFS) target-finalize
> +       @$(foreach cfg, $(call qstrip,$(BR2_ROOTFS_GENIMAGE_CFG)), \
> +       $(call MESSAGE,"Executing genimage with config $(cfg)"); \
> +         T=$$(mktemp -d $(BUILD_DIR)/.genimage.XXXXXXXXXX); \
> +         mkdir -p $$T/{root,tmp}; \
> +         $(EXTRA_ENV) output/host/usr/bin/genimage \
> +         --rootpath $$T/root \
> +         --tmppath $$T/tmp \
> +         --inputpath output/images/ \
> +         --outputpath output/images/ \
> +         --config $(cfg); \
> +         rm -rf $$T$(sep))

I don't think the final $(sep) is needed, since this the last line of
a makefile target, as opposed to, say. a template.

Danomi -


> +
> +target-post-image: target-genimage
>         @$(foreach s, $(call qstrip,$(BR2_ROOTFS_POST_IMAGE_SCRIPT)), \
>                 $(call MESSAGE,"Executing post-image script $(s)"); \
>                 $(EXTRA_ENV) $(s) $(BINARIES_DIR) $(call qstrip,$(BR2_ROOTFS_POST_SCRIPT_ARGS))$(sep))
> diff --git a/system/Config.in b/system/Config.in
> index 95e10ab..2596da8 100644
> --- a/system/Config.in
> +++ b/system/Config.in
> @@ -421,6 +421,28 @@ config BR2_ROOTFS_POST_BUILD_SCRIPT
>           argument. Make sure the exit code of those scripts are 0, otherwise
>           make will stop after calling them.
>
> +config BR2_ROOTFS_GENIMAGE_CFG
> +       string "genimage config files to prepare custom images"
> +       default ""
> +       help
> +         Specify a space-separated list of configuration files for genimage to be
> +         run after the build has finished and after Buildroot has packed the files
> +         into selected filesystem images.
> +
> +         This can for example be used to generate a card image with an vfat
> +         partition containing some boot files, and an ext4 rootfs.
> +
> +         genimage is executed from the main Buildroot source directory, with input
> +         and output paths configured to output/images.
> +
> +config BR2_ROOTFS_GENIMAGE_HOST_DEPENDENCIES
> +       bool "genimage host dependencies"
> +       default y
> +       depends on BR2_ROOTFS_GENIMAGE_CFG != ""
> +       select BR2_PACKAGE_HOST_GENIMAGE
> +       select BR2_PACKAGE_HOST_DOSFSTOOLS
> +       select BR2_PACKAGE_HOST_MTOOLS
> +
>  config BR2_ROOTFS_POST_IMAGE_SCRIPT
>         string "Custom scripts to run after creating filesystem images"
>         default ""
> --
> 2.3.0
>
> _______________________________________________
> buildroot mailing list
> buildroot@busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
Vivien Didelot Feb. 16, 2015, 4:41 p.m. UTC | #2
Hi Danomi,

> A couple nitpicks ...

[...]

> > The rational behind adding this to Buildroot is that genimage
> > requires
> 
> spelling: "rationale".

Thanks.

[...]

> > --- a/Makefile
> > +++ b/Makefile
> > @@ -434,7 +434,7 @@ world: target-post-image
> >
> >  .PHONY: all world toolchain dirs clean distclean source
> >  outputmakefile \
> >         legal-info legal-info-prepare legal-info-clean printvars \
> > -       target-finalize target-post-image \
> > +       target-finalize target-genimage target-post-image \
> >         $(TARGETS) $(TARGETS_ROOTFS) \
> >         $(TARGETS_DIRCLEAN) $(TARGETS_SOURCE) $(TARGETS_LEGAL_INFO)
> >         \
> >         $(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) \
> > @@ -621,7 +621,20 @@ endif
> >                 $(call MESSAGE,"Executing post-build script $(s)");
> >                 \
> >                 $(EXTRA_ENV) $(s) $(TARGET_DIR) $(call
> >                 qstrip,$(BR2_ROOTFS_POST_SCRIPT_ARGS))$(sep))
> >
> > -target-post-image: $(TARGETS_ROOTFS) target-finalize
> > +target-genimage: $(TARGETS_ROOTFS) target-finalize
> > +       @$(foreach cfg, $(call qstrip,$(BR2_ROOTFS_GENIMAGE_CFG)),
> > \
> > +       $(call MESSAGE,"Executing genimage with config $(cfg)"); \
> > +         T=$$(mktemp -d $(BUILD_DIR)/.genimage.XXXXXXXXXX); \
> > +         mkdir -p $$T/{root,tmp}; \
> > +         $(EXTRA_ENV) output/host/usr/bin/genimage \
> > +         --rootpath $$T/root \
> > +         --tmppath $$T/tmp \
> > +         --inputpath output/images/ \
> > +         --outputpath output/images/ \
> > +         --config $(cfg); \
> > +         rm -rf $$T$(sep))
> 
> I don't think the final $(sep) is needed, since this the last line of
> a makefile target, as opposed to, say. a template.

Are you sure? I'm not sure either but I tried to follow the other foreach 
statements.

Thanks for the nitpicks. Other than that, an feedback on the overall RFC?

Regards,
Vivien
Danomi Manchego Feb. 17, 2015, 2:37 a.m. UTC | #3
Vivien,

On Mon, Feb 16, 2015 at 11:41 AM, Vivien Didelot
<vivien.didelot@savoirfairelinux.com> wrote:
> Hi Danomi,
>
>> A couple nitpicks ...
>
> [...]
>
>> > The rational behind adding this to Buildroot is that genimage
>> > requires
>>
>> spelling: "rationale".
>
> Thanks.
>
> [...]
>
>> > --- a/Makefile
>> > +++ b/Makefile
>> > @@ -434,7 +434,7 @@ world: target-post-image
>> >
>> >  .PHONY: all world toolchain dirs clean distclean source
>> >  outputmakefile \
>> >         legal-info legal-info-prepare legal-info-clean printvars \
>> > -       target-finalize target-post-image \
>> > +       target-finalize target-genimage target-post-image \
>> >         $(TARGETS) $(TARGETS_ROOTFS) \
>> >         $(TARGETS_DIRCLEAN) $(TARGETS_SOURCE) $(TARGETS_LEGAL_INFO)
>> >         \
>> >         $(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) \
>> > @@ -621,7 +621,20 @@ endif
>> >                 $(call MESSAGE,"Executing post-build script $(s)");
>> >                 \
>> >                 $(EXTRA_ENV) $(s) $(TARGET_DIR) $(call
>> >                 qstrip,$(BR2_ROOTFS_POST_SCRIPT_ARGS))$(sep))
>> >
>> > -target-post-image: $(TARGETS_ROOTFS) target-finalize
>> > +target-genimage: $(TARGETS_ROOTFS) target-finalize
>> > +       @$(foreach cfg, $(call qstrip,$(BR2_ROOTFS_GENIMAGE_CFG)),
>> > \
>> > +       $(call MESSAGE,"Executing genimage with config $(cfg)"); \
>> > +         T=$$(mktemp -d $(BUILD_DIR)/.genimage.XXXXXXXXXX); \
>> > +         mkdir -p $$T/{root,tmp}; \
>> > +         $(EXTRA_ENV) output/host/usr/bin/genimage \
>> > +         --rootpath $$T/root \
>> > +         --tmppath $$T/tmp \
>> > +         --inputpath output/images/ \
>> > +         --outputpath output/images/ \
>> > +         --config $(cfg); \
>> > +         rm -rf $$T$(sep))
>>
>> I don't think the final $(sep) is needed, since this the last line of
>> a makefile target, as opposed to, say. a template.
>
> Are you sure? I'm not sure either but I tried to follow the other foreach
> statements.

Ah, so sorry, I missed the fact that it was a foreach.  Comment retracted!


> Thanks for the nitpicks. Other than that, an feedback on the overall RFC?

Sorry, I haven't actually tried it.

Danomi -


> Regards,
> Vivien
Zoltan Gyarmati Feb. 25, 2015, 10:48 a.m. UTC | #4
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Dear Vivien,


looks good so far, and it fits well into my workflow, thanks for your
contribution.
Unfortunately the out-of tree build is broken with this version,
please see inline in your patch my comment.
I would propose to resend this patch with the fixed typos and the fix
for the out-of-tree build.


On 17.02.2015 03:37, Danomi Manchego wrote:
> Vivien,
> 
> On Mon, Feb 16, 2015 at 11:41 AM, Vivien Didelot 
> <vivien.didelot@savoirfairelinux.com> wrote:
>> Hi Danomi,
>> 
>>> A couple nitpicks ...
>> 
>> [...]
>> 
>>>> The rational behind adding this to Buildroot is that
>>>> genimage requires
>>> 
>>> spelling: "rationale".
>> 
>> Thanks.
>> 
>> [...]
>> 
>>>> --- a/Makefile +++ b/Makefile @@ -434,7 +434,7 @@ world:
>>>> target-post-image
>>>> 
>>>> .PHONY: all world toolchain dirs clean distclean source 
>>>> outputmakefile \ legal-info legal-info-prepare
>>>> legal-info-clean printvars \ -       target-finalize
>>>> target-post-image \ +       target-finalize target-genimage
>>>> target-post-image \ $(TARGETS) $(TARGETS_ROOTFS) \ 
>>>> $(TARGETS_DIRCLEAN) $(TARGETS_SOURCE) $(TARGETS_LEGAL_INFO) 
>>>> \ $(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) \ @@ -621,7
>>>> +621,20 @@ endif $(call MESSAGE,"Executing post-build script
>>>> $(s)"); \ $(EXTRA_ENV) $(s) $(TARGET_DIR) $(call 
>>>> qstrip,$(BR2_ROOTFS_POST_SCRIPT_ARGS))$(sep))
>>>> 
>>>> -target-post-image: $(TARGETS_ROOTFS) target-finalize 
>>>> +target-genimage: $(TARGETS_ROOTFS) target-finalize +
>>>> @$(foreach cfg, $(call qstrip,$(BR2_ROOTFS_GENIMAGE_CFG)), \ 
>>>> +       $(call MESSAGE,"Executing genimage with config
>>>> $(cfg)"); \ +         T=$$(mktemp -d
>>>> $(BUILD_DIR)/.genimage.XXXXXXXXXX); \ +         mkdir -p
>>>> $$T/{root,tmp}; \ +         $(EXTRA_ENV)
>>>> output/host/usr/bin/genimage \
should be $(HOST_DIR)/output/host/



>>>> +         --rootpath $$T/root \ +         --tmppath $$T/tmp
>>>> \ +         --inputpath output/images/ \ +
>>>> --outputpath output/images/ \
both of the paths should be $(BINARIES_DIR)


>>>> +         --config $(cfg); \ +         rm -rf $$T$(sep))
>>> 
>>> I don't think the final $(sep) is needed, since this the last
>>> line of a makefile target, as opposed to, say. a template.
>> 
>> Are you sure? I'm not sure either but I tried to follow the other
>> foreach statements.
> 
> Ah, so sorry, I missed the fact that it was a foreach.  Comment
> retracted!
> 
> 
>> Thanks for the nitpicks. Other than that, an feedback on the
>> overall RFC?
> 
> Sorry, I haven't actually tried it.
> 
> Danomi -
> 
> 
>> Regards, Vivien
> _______________________________________________ buildroot mailing
> list buildroot@busybox.net 
> http://lists.busybox.net/mailman/listinfo/buildroot
> 



- -- 
Bests,
Zoltan Gyarmati
IRC freenode: zgyarmati
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQEcBAEBAgAGBQJU7ah2AAoJEAGmEeeR8iVhZ38H/0ZX29k/tKM3zjy05jwAGEcE
OM0ySLjhIH+8843/CaNBszDXhG7kIxvfpFfX6ugGnmPJ2NAWu3ajnqk9oYHYkDyN
gJJ7cN7aKo1RzVz64idZNY4ZyOxWyJVAK8vuLroQMOZO2h3Ztepf577UsfayfE82
ThIY4tmAgwbIrdoWeC6R6YGtlMgIMpyzEtQe4FGqNYhMT29XMhyvAJfGt0Ep+EMR
o7FKZrBWMr+G+mX2M6QuFTPcAcY5hffqRUccOOp1pS5ciVSeOVkr2yUnlMpS5CNQ
8gCBAXjd2k/bWBpkdnn09xltVZQlOg1NysC4f7S1vqqFRrF9dfGv22Viz/I7yqA=
=kvfn
-----END PGP SIGNATURE-----
diff mbox

Patch

diff --git a/Makefile b/Makefile
index 338c992..1eb1619 100644
--- a/Makefile
+++ b/Makefile
@@ -434,7 +434,7 @@  world: target-post-image
 
 .PHONY: all world toolchain dirs clean distclean source outputmakefile \
 	legal-info legal-info-prepare legal-info-clean printvars \
-	target-finalize target-post-image \
+	target-finalize target-genimage target-post-image \
 	$(TARGETS) $(TARGETS_ROOTFS) \
 	$(TARGETS_DIRCLEAN) $(TARGETS_SOURCE) $(TARGETS_LEGAL_INFO) \
 	$(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) \
@@ -621,7 +621,20 @@  endif
 		$(call MESSAGE,"Executing post-build script $(s)"); \
 		$(EXTRA_ENV) $(s) $(TARGET_DIR) $(call qstrip,$(BR2_ROOTFS_POST_SCRIPT_ARGS))$(sep))
 
-target-post-image: $(TARGETS_ROOTFS) target-finalize
+target-genimage: $(TARGETS_ROOTFS) target-finalize
+	@$(foreach cfg, $(call qstrip,$(BR2_ROOTFS_GENIMAGE_CFG)), \
+	$(call MESSAGE,"Executing genimage with config $(cfg)"); \
+	  T=$$(mktemp -d $(BUILD_DIR)/.genimage.XXXXXXXXXX); \
+	  mkdir -p $$T/{root,tmp}; \
+	  $(EXTRA_ENV) output/host/usr/bin/genimage \
+	  --rootpath $$T/root \
+	  --tmppath $$T/tmp \
+	  --inputpath output/images/ \
+	  --outputpath output/images/ \
+	  --config $(cfg); \
+	  rm -rf $$T$(sep))
+
+target-post-image: target-genimage
 	@$(foreach s, $(call qstrip,$(BR2_ROOTFS_POST_IMAGE_SCRIPT)), \
 		$(call MESSAGE,"Executing post-image script $(s)"); \
 		$(EXTRA_ENV) $(s) $(BINARIES_DIR) $(call qstrip,$(BR2_ROOTFS_POST_SCRIPT_ARGS))$(sep))
diff --git a/system/Config.in b/system/Config.in
index 95e10ab..2596da8 100644
--- a/system/Config.in
+++ b/system/Config.in
@@ -421,6 +421,28 @@  config BR2_ROOTFS_POST_BUILD_SCRIPT
 	  argument. Make sure the exit code of those scripts are 0, otherwise
 	  make will stop after calling them.
 
+config BR2_ROOTFS_GENIMAGE_CFG
+	string "genimage config files to prepare custom images"
+	default ""
+	help
+	  Specify a space-separated list of configuration files for genimage to be
+	  run after the build has finished and after Buildroot has packed the files
+	  into selected filesystem images.
+
+	  This can for example be used to generate a card image with an vfat
+	  partition containing some boot files, and an ext4 rootfs.
+
+	  genimage is executed from the main Buildroot source directory, with input
+	  and output paths configured to output/images.
+
+config BR2_ROOTFS_GENIMAGE_HOST_DEPENDENCIES
+	bool "genimage host dependencies"
+	default y
+	depends on BR2_ROOTFS_GENIMAGE_CFG != ""
+	select BR2_PACKAGE_HOST_GENIMAGE
+	select BR2_PACKAGE_HOST_DOSFSTOOLS
+	select BR2_PACKAGE_HOST_MTOOLS
+
 config BR2_ROOTFS_POST_IMAGE_SCRIPT
 	string "Custom scripts to run after creating filesystem images"
 	default ""