[Buildroot] [PATCH] Makefile: target-purgelocales: add dependencies

Arnout Vandecappelle arnout at mind.be
Mon Apr 28 05:49:32 UTC 2014


On 25/04/14 23:50, Fabio Porcedda wrote:
> On Thu, Apr 24, 2014 at 6:41 PM, Thomas Petazzoni
> <thomas.petazzoni at free-electrons.com> wrote:
>> Dear Fabio Porcedda,
>>
>> On Thu, 24 Apr 2014 18:24:39 +0200, Fabio Porcedda wrote:
>>
>>> -target-purgelocales:
>>> +target-purgelocales: $(filter-out target-purgelocales,$(TARGETS))
>>>       rm -f $(LOCALE_WHITELIST)
>>>       for i in $(LOCALE_NOPURGE); do echo $$i >> $(LOCALE_WHITELIST); done
>>
>> Don't we have several other targets that need to be executed only after
>> all packages have been built and installed? Wouldn't it make sense to
>> have a common solution for these? Like maybe a dedicated target?
> 
> Can you please give some examples? I know only tatget-purgelocales and
> target-finalize.
> 
> About the common solution, i see two possible solutions of the problem:
> 
> 1) all those targets must be listed in a variable like
> TARGETS_PRE_ROOTFS, but those targets must be able to be executed in
> parallel without a specific order.
> 
> 2) all those targets must be converted in hooks and added to a
> variable like PRE_ROOTFS_HOOKS, so those steps are going to be
> executed in serial observing a specific order.
> 
> What is the more appropriate solution? The easiest and fastest one is
> the first, but i'm not sure if those targets can be executed in
> parallel.

 My personal preference is to have a single rule (e.g. target-finalize)
that performs everything that is post-targets and pre-rootfs. There isn't
much that needs to be done so parallelisation doesn't make sense. And I
think it's much easier to understand which steps are executed and in
which order if they are all put together in a single rule rather than
spread out over several.

 To make things more readable, we can put the commands into separate
variables. For instance:

define TARGET_PURGE_LOCALES
	rm -f $(LOCALE_WHITELIST)
	...
endef

define TARGET_PURGE_DEVFILES
	rm -rf $(TARGET_DIR)/usr/include ...
...
endef

ifneq ($(BR2_PACKAGE_GDB),y)
define TARGET_PURGE_GDB
        rm -rf $(TARGET_DIR)/usr/share/gdb
endef
endif

target-finalize: $(TARGETS)
	$(TARGET_PURGE_LOCALES)
	$(TARGET_PURGE_DEVFILES)
	$(TARGET_PURGE_GDB)
	$(TARGET_PURGE_DOC)
...


 I'm giving the content of target-finalize as an example here, but it's
not immediately needed to convert those into variables. The different
target-* steps that are currently added to TARGETS are rather more important.


 Regards,
 Arnout

-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F


More information about the buildroot mailing list