Skip to contentSkip to conversation

Separate target-building make targets from image-building make targets

RFC PATCH New Jeremy Kerr 2 participants 2 messages Jul 3, 2014 – Jul 13, 2015 Kbuild

lore
Share & tools
lore
#0 lore raw

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
index 0bf709f..708ab19 100644
@@ -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
index 32a9457..ede1656 100644
@@ -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
#1 lore raw

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 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 +0 -0
index 0bf709f..708ab19 100644

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
index 32a9457..ede1656 100644

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