Separate target-building make targets from image-building make targets
RFC PATCH 1/1 Separate target-building make targets from image-building make targets
Currently, it's not possible to have dependencies from an image-building target to a rootfs-building target.
For example, the boot-wrapper-aarch64 package uses the kernel build as an input file. It supplies a dependency on 'linux', but this will break if we're using BR2_TARGET_ROOTFS_INITRAMFS - the wrapper will include the first kernel build, not the rebuild (which contains the embedded initramfs).
This means we'd need to express a dependency from the target build to the image build. However, if we do something like:
-BOOT_WRAPPER_AARCH64_DEPENDENCIES = linux
+BOOT_WRAPPER_AARCH64_DEPENDENCIES = linux26-rebuild-with-initramfs
- then we get a circular dependency, because boot-wrapper-aarch64 is in the TARGETS list, which linux26-rebuild-with-initramfs depends on.
This change splits the possible targets into two separate lists, TARGET_TARGETS (dependencies for building the target dir) and IMAGE_TARGETS (dependencies for building images). We keep TARGETS as a list of everything, and use TARGET_TARGETS for the rootfs-finalize target.
--- Makefile | 6 ++++-- package/pkg-generic.mk | 8 ++++++++ 2 files changed, 12 insertions(+), 2 deletions(-)
Makefile +4 -2
@@ -294,6 +294,8 @@ unexport TERMINFO GNU_HOST_NAME := $(shell support/gnuconfig/config.guess) TARGETS := +TARGET_TARGETS := +IMAGE_TARGETS := # silent mode requested? QUIET := $(if $(findstring s,$(MAKEFLAGS)),-q)
@@ -531,7 +533,7 @@ endif $(TARGETS_ROOTFS): target-finalize -target-finalize: $(TARGETS) +target-finalize: $(TARGET_TARGETS) @$(call MESSAGE,"Finalizing target directory") $(TARGET_PURGE_LOCALES) rm -rf $(TARGET_DIR)/usr/include $(TARGET_DIR)/usr/share/aclocal \
@@ -624,7 +626,7 @@ target-generatelocales: host-localedef toolchain done endif -target-post-image: $(TARGETS_ROOTFS) target-finalize +target-post-image: $(TARGETS_ROOTFS) $(IMAGE_TARGETS) target-finalize @$(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))
package/pkg-generic.mk +8 -0
@@ -681,6 +681,14 @@ endif TARGETS += $(1) +ifneq ($$($(2)_INSTALL_STAGING)$$($(2)_INSTALL_TARGET),NONO) +TARGET_TARGETS += $(1) +endif + +ifeq ($$($(2)_INSTALL_IMAGES),YES) +IMAGE_TARGETS += $(1) +endif + ifneq ($$($(2)_PERMISSIONS),) PACKAGES_PERMISSIONS_TABLE += $$($(2)_PERMISSIONS)$$(sep) endif
RFC PATCH 1/1 Separate target-building make targets from image-building make targets
Hi Jeremy,
We have a buildroot hackaton at the moment and finally took the time to discuss
this proposal. It was a long discussion, mainly because it doesn't really solve the problem (which BTW is mainly in the approach we take for linux-with-initramfs - that's just a huge hack).
That said, we basically agree with the approach. So if you're stilling willing
to do it, please post a full series including the change to boot-wrapper-aarch64, taking into account the comments below. We've marked this patch as Changes Requested in patchwork.
Quoted 36 lines · Jeremy Kerr
Currently, it's not possible to have dependencies from an image-building target to a rootfs-building target.
For example, the boot-wrapper-aarch64 package uses the kernel build as an input file. It supplies a dependency on 'linux', but this will break if we're using
BR2_TARGET_ROOTFS_INITRAMFS- the wrapper will include the first kernel build, not the rebuild (which contains the embedded initramfs).This means we'd need to express a dependency from the target build to the image build. However, if we do something like:
(quoted diff) +1
-2-BOOT_WRAPPER_AARCH64_DEPENDENCIES = linux +BOOT_WRAPPER_AARCH64_DEPENDENCIES = linux26-rebuild-with-initramfs - then we get a circular dependency, because boot-wrapper-aarch64 is inthe TARGETS list, which linux26-rebuild-with-initramfs depends on.
This change splits the possible targets into two separate lists,
TARGET_TARGETS(dependencies for building the target dir) andIMAGE_TARGETS(dependencies for building images). We keep TARGETS as a list of everything, and useTARGET_TARGETSfor the rootfs-finalize target.Signed-off-by Jeremy Kerr <[email protected]>--- Makefile | 6 ++++-- package/pkg-generic.mk | 8 ++++++++ 2 files changed, 12 insertions(+), 2 deletions(-)Makefile +0
-0
Makefile unexport TERMINFO · line 298
Quoted 5 lines
Makefile +2
-0@@ -294,6 +294,8 @@ unexport TERMINFO GNU_HOST_NAME := $(shell support/gnuconfig/config.guess) TARGETS := +TARGET_TARGETS := +IMAGE_TARGETS :=
In the meantime, this has changed into PACKAGES.
While you're doing this, we'd like to have three lists: PACKAGES_TARGET,PACKAGES_IMAGE and PACKAGES_HOST.
Also, PACKAGES could be defined as:
PACKAGES = $(PACKAGES_TARGET) $(PACKAGES_IMAGE) $(PACKAGES_HOST)
Makefile endif · line 536
Quoted 9 lines
Makefile +1
-1# silent mode requested? QUIET := $(if $(findstring s,$(MAKEFLAGS)),-q)@@ -531,7 +533,7 @@ endif $(TARGETS_ROOTFS): target-finalize -target-finalize: $(TARGETS) +target-finalize: $(TARGET_TARGETS)
In general target-finalize may also depend on PACKAGES_HOST (due to the
post-build scripts).
Quoted 17 lines
Makefile +1
-1@$(call MESSAGE,"Finalizing target directory") $(TARGET_PURGE_LOCALES) rm -rf $(TARGET_DIR)/usr/include $(TARGET_DIR)/usr/share/aclocal \@@ -624,7 +626,7 @@ target-generatelocales: host-localedef toolchain done endif -target-post-image: $(TARGETS_ROOTFS) target-finalize +target-post-image: $(TARGETS_ROOTFS) $(IMAGE_TARGETS) target-finalize @$(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))package/pkg-generic.mk +0
-0
package/pkg-generic.mk endif · line 682
Quoted 2 lines
package/pkg-generic.mk +0
-0@@ -681,6 +681,14 @@ endif TARGETS += $(1)
This can be removed, i.e. we only assign to the specific PACKAGES variables and
the global one is implied by concatenating the three.
Regards,
Arnout
Quoted 17 lines
package/pkg-generic.mk +8
-0+ifneq ($$($(2)_INSTALL_STAGING)$$($(2)_INSTALL_TARGET),NONO) +TARGET_TARGETS += $(1) +endif + +ifeq ($$($(2)_INSTALL_IMAGES),YES) +IMAGE_TARGETS += $(1) +endif + ifneq ($$($(2)_PERMISSIONS),) PACKAGES_PERMISSIONS_TABLE += $$($(2)_PERMISSIONS)$$(sep) endif_______________________________________________
buildroot mailing list
buildroot at busybox.net
http://lists.busybox.net/mailman/listinfo/buildroot
Signature · 6 lines
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: 7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF