[coreboot] [LinuxBIOS] [PATCH] buildrom: add extract andbusybox-config, uclibc-config targets

Ward Vandewege ward at gnu.org
Wed Feb 6 22:34:59 CET 2008


On Wed, Feb 06, 2008 at 01:52:23PM -0700, Myles Watson wrote:
> It's missing the ARCH=$(KERNEL_BUILD_ARCH) on the configure line for kernel
> and TARGET_ARCH=$(UCLIBC_BUILD_ARCH) for uclibc.  On my x86_64 box it makes
> a 64-bit configuration even for 32-bit targets.  

Good catch - that should now be fixed, see attached.

> I'd like it if the verbose messages about using the custom config were
> printed after the configuration was done.  I never saw the messages because
> make menuconfig is so verbose.

Fixed.

> At first I was worried about the dependencies that you added like:
> 
> +$(FILO_STAMP_DIR)/.unpacked: $(SOURCE_DIR)/$(FILO_TARBALL)
> $(FILO_STAMP_DIR) $(FILO_DIR)
> 
> I thought it would have the same problem we had before with the stamp
> directory being "modified" when the stamps were, and forcing a complete
> rebuild, but it didn't seem to happen.  I guess I don't understand that well
> enough.

I've corrected those instances by making them into order-only prerequisites
just in case. I'm not entirely sure why we were not seeing the problem for
those packages, but better safe than sorry.

Thanks,
Ward.

-- 
Ward Vandewege <ward at fsf.org>
Free Software Foundation - Senior System Administrator
-------------- next part --------------
This patch adds extract targets, as well as some config targets:
busybox-config, uclibc-config, kernel-config and filo-config.

The extract targets will just extract the component(s) under the work
subdirectory.

The config targets will run a configure command for the component, and then
copy the resulting custom config file to the conf directory for the package
using a naming convention that indicates the payload, vendor, board and (for
the kernel and uclibc) architecture.

That config file will then be used to build the image when 'make' is issued,
overriding the default buildrom config for that package/payload - but only if
there is a match for payload, vendor and board (and for uclibc and the kernel,
architecture).

The config targets are somewhat smart: they will copy an existing custom config
file back to the source directory so that doing a make something-config when a
custom config file exists will have the effect of editing the custom config,
rather than overwriting it.

If a custom config file is used, buildrom will say so on stdout.

Signed-off-by: Ward Vandewege <ward at gnu.org>

Index: config/payloads/lab.conf
===================================================================
--- config/payloads/lab.conf	(revision 104)
+++ config/payloads/lab.conf	(working copy)
@@ -30,4 +30,6 @@
 PAYLOAD-$(CONFIG_BOOTMENU) += bootmenu
 PAYLOAD-$(CONFIG_OLPCFLASH) += olpcflash
 
+PAYLOAD=lab
+
 HOSTTOOLS-y = mkelfimage unifdef
Index: config/payloads/kernel.conf
===================================================================
--- config/payloads/kernel.conf	(revision 104)
+++ config/payloads/kernel.conf	(working copy)
@@ -16,4 +16,6 @@
 PAYLOAD_COMPRESSED=$(OUTPUT_DIR)/kernel-payload.elf.lzma
 
 PAYLOAD-y= kernel
+PAYLOAD=kernel
+
 HOSTTOOLS-y = mkelfimage
Index: config/payloads/filo.conf
===================================================================
--- config/payloads/filo.conf	(revision 104)
+++ config/payloads/filo.conf	(working copy)
@@ -8,3 +8,6 @@
 PAYLOAD_COMPRESSED=$(OUTPUT_DIR)/filo-payload.elf.lzma
 
 PAYLOAD-y=filo
+
+PAYLOAD=filo
+
Index: Makefile
===================================================================
--- Makefile	(revision 104)
+++ Makefile	(working copy)
@@ -21,7 +21,7 @@
 config-targets := 1
 endif
 
-ifneq ($(filter config %config,$(MAKECMDGOALS)),)
+ifneq ($(filter textconfig oldconfig defconfig menuconfig,$(MAKECMDGOALS)),)
 config-targets := 1
 dot-config := 0
 endif
@@ -60,6 +60,7 @@
 
 PKG_clean=$(patsubst %, %-clean, $(PKGLIST))
 PKG_distclean=$(patsubst %, %-distclean, $(PKGLIST))
+PKG_extract=$(patsubst %, %-extract, $(PKGLIST))
 
 # This is the top level target - for v2, the final deliverable is built
 # by coreboot, for v3 it is built by us, so we have ifdef magic here
@@ -78,6 +79,8 @@
 
 payload: $(PAYLOAD_TARGET)
 
+extract: $(PKG_extract)
+
 clean: $(PKG_clean)
 	@ rm -rf $(INITRD_DIR) $(OUTPUT_DIR)
 
Index: packages/unifdef/unifdef.mk
===================================================================
--- packages/unifdef/unifdef.mk	(revision 104)
+++ packages/unifdef/unifdef.mk	(working copy)
@@ -17,7 +17,7 @@
 	@ mkdir -p $(SOURCE_DIR)
 	@ wget -P $(SOURCE_DIR) $(UNIFDEF_URL)/$(UNIFDEF_SOURCE)
 
-$(UNIFDEF_STAMP_DIR)/.unpacked: $(SOURCE_DIR)/$(UNIFDEF_SOURCE)
+$(UNIFDEF_STAMP_DIR)/.unpacked: $(SOURCE_DIR)/$(UNIFDEF_SOURCE) | $(UNIFDEF_STAMP_DIR)
 	@ tar -C $(UNIFDEF_DIR) -zxf $(SOURCE_DIR)/$(UNIFDEF_SOURCE)
 	@ rm -f $(UNIFDEF_SRC_DIR)/unifdef 
 	@ rm -f $(UNIFDEF_SRC_DIR)/unifdef.o
@@ -49,3 +49,5 @@
 	echo ""
 
 .PHONY: unifdef
+
+unifdef-extract: $(UNIFDEF_STAMP_DIR)/.unpacked
Index: packages/kernel/kernel.inc
===================================================================
--- packages/kernel/kernel.inc	(revision 104)
+++ packages/kernel/kernel.inc	(working copy)
@@ -15,6 +15,12 @@
 KERNEL_BUILD_ARCH=i386
 endif
 
+ifeq ($(findstring defconfig,$(KERNEL_CONFIG)),defconfig)
+ifeq ($(shell if [ -f $(PACKAGE_DIR)/kernel/conf/customconfig--$(PAYLOAD)--$(KERNEL_BUILD_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD) ]; then echo 1; fi),1)
+	KERNEL_CONFIG = $(PACKAGE_DIR)/kernel/conf/customconfig--$(PAYLOAD)--$(KERNEL_BUILD_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD)
+endif
+endif
+
 ifeq ($(CONFIG_VERBOSE),y)
 KERNEL_FETCH_LOG=/dev/stdout
 KERNEL_BUILD_LOG=/dev/stdout
@@ -25,7 +31,7 @@
 KERNEL_INSTALL_LOG=$(KERNEL_LOG_DIR)/install.log
 endif
 
-$(KERNEL_STAMP_DIR)/.unpacked: $(SOURCE_DIR)/$(KERNEL_SOURCE)
+$(KERNEL_STAMP_DIR)/.unpacked: $(SOURCE_DIR)/$(KERNEL_SOURCE) | $(KERNEL_STAMP_DIR)
 	@ mkdir -p $(KERNEL_DIR)
 	@ echo "Unpacking kernel..."
 	@ tar -C $(KERNEL_DIR) -jxf $(SOURCE_DIR)/$(KERNEL_SOURCE)
@@ -50,8 +56,11 @@
 $(KERNEL_SRC_DIR)/.config: $(KERNEL_STAMP_DIR)/.patched
 	@ cat $(KERNEL_CONFIG) | sed -e s:^CONFIG_LOCALVERSION=.*:CONFIG_LOCALVERSION=\"$(ROM_VERSION)\": > $(KERNEL_SRC_DIR)/.config
 
-$(KERNEL_BZIMAGE): $(KERNEL_SRC_DIR)/.config
+$(KERNEL_BZIMAGE): $(KERNEL_SRC_DIR)/.config | $(KERNEL_LOG_DIR)
 	@ echo "Building kernel..."
+ifneq ($(findstring defconfig,$(KERNEL_CONFIG)),defconfig)
+	@ echo "Using custom kernel config $(KERNEL_CONFIG)"
+endif
 	@ $(MAKE) $(PARALLEL_MAKE) -C $(KERNEL_SRC_DIR) ARCH=$(KERNEL_BUILD_ARCH) \
 	KERNEL_CC="$(CC)" KERNEL_LD="$(LD)" > $(KERNEL_BUILD_LOG) 2>&1
 
@@ -63,7 +72,7 @@
 	@ install -d $(OUTPUT_DIR)
 	@ install -m 0644 $(KERNEL_SRC_DIR)/vmlinux $@
 	
-$(KERNEL_STAMP_DIR)/.headers: $(KERNEL_SRC_DIR)/.config $(STAGING_DIR)/host/bin/unifdef
+$(KERNEL_STAMP_DIR)/.headers: $(KERNEL_SRC_DIR)/.config $(STAGING_DIR)/host/bin/unifdef | $(KERNEL_LOG_DIR)
 	@ echo "Installing kernel headers..."
 	@( export PATH=$(PATH):$(STAGING_DIR)/host/bin; \
 	$(MAKE) -C $(KERNEL_SRC_DIR) ARCH=$(KERNEL_BUILD_ARCH) \
@@ -73,7 +82,7 @@
 $(KERNEL_STAMP_DIR) $(KERNEL_LOG_DIR):
 	@ mkdir -p $@
 
-generic-kernel: $(KERNEL_STAMP_DIR) $(KERNEL_LOG_DIR) $(OUTPUT_DIR)/bzImage $(OUTPUT_DIR)/vmlinux $(KERNEL_STAMP_DIR)/.headers
+generic-kernel: $(OUTPUT_DIR)/bzImage $(OUTPUT_DIR)/vmlinux $(KERNEL_STAMP_DIR)/.headers
 
 generic-kernel-clean:
 	@ echo "Cleaning kernel..."
@@ -83,3 +92,27 @@
 
 generic-kernel-distclean:
 	@ rm -rf $(KERNEL_DIR)
+
+kernel-extract: $(KERNEL_STAMP_DIR)/.patched
+
+kernel-config: $(KERNEL_STAMP_DIR)/.patched
+ifeq ($(shell if [ -f $(PACKAGE_DIR)/kernel/conf/customconfig--$(PAYLOAD)--$(KERNEL_BUILD_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD) ]; then echo 1; fi),1)
+	@ cp -f $(PACKAGE_DIR)/kernel/conf/customconfig--$(PAYLOAD)--$(KERNEL_BUILD_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD) $(KERNEL_SRC_DIR)/.config
+endif
+ifeq (kernel,$(filter kernel,$(PAYLOAD-y)))
+	@ echo "Configure kernel..."
+	@ $(MAKE) -C $(KERNEL_SRC_DIR) ARCH=$(KERNEL_BUILD_ARCH) menuconfig
+	@ echo
+ifeq ($(shell if [ -f $(PACKAGE_DIR)/kernel/conf/customconfig--$(PAYLOAD)--$(KERNEL_BUILD_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD) ]; then echo 1; fi),1)
+	@ echo "Found an existing custom configuration file:"
+	@ echo "  $(PACKAGE_DIR)/kernel/conf/customconfig--$(PAYLOAD)--$(KERNEL_BUILD_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD)"
+	@ echo "I've copied it back to the source directory for modification."
+	@ echo "Remove the above file and re-run this command if you want to create a new custom configuration from scratch for this payload/board."
+	@ echo
+endif
+	@ cp -f $(KERNEL_SRC_DIR)/.config $(PACKAGE_DIR)/kernel/conf/customconfig--$(PAYLOAD)--$(KERNEL_BUILD_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD)
+	@ echo "Your custom kernel config file has been saved as $(PACKAGE_DIR)/kernel/conf/customconfig--$(PAYLOAD)--$(KERNEL_BUILD_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD)."
+	@ echo
+else
+	@ echo "Your payload does not require a kernel."
+endif
Index: packages/filo/filo.mk
===================================================================
--- packages/filo/filo.mk	(revision 104)
+++ packages/filo/filo.mk	(working copy)
@@ -25,13 +25,17 @@
 
 FILO_TARBALL=filo-svn-$(FILO_TAG).tar.gz
 
+ifeq ($(shell if [ -f $(PACKAGE_DIR)/filo/conf/customconfig--$(PAYLOAD)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD) ]; then echo 1; fi),1)
+	FILO_CONFIG = customconfig--$(PAYLOAD)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD)
+endif
+
 $(SOURCE_DIR)/$(FILO_TARBALL): 
 	@ mkdir -p $(SOURCE_DIR)/filo
 	@ $(BIN_DIR)/fetchsvn.sh $(FILO_URL) $(SOURCE_DIR)/filo \
 	$(FILO_TAG) $(SOURCE_DIR)/$(FILO_TARBALL) \
 	> $(FILO_FETCH_LOG) 2>&1
 
-$(FILO_STAMP_DIR)/.unpacked: $(SOURCE_DIR)/$(FILO_TARBALL)
+$(FILO_STAMP_DIR)/.unpacked: $(SOURCE_DIR)/$(FILO_TARBALL) | $(FILO_STAMP_DIR) $(FILO_DIR)
 	@ echo "Unpacking filo..."
 	@ tar -C $(FILO_DIR) -zxf $(SOURCE_DIR)/$(FILO_TARBALL)
 	@ touch $@      
@@ -48,6 +52,9 @@
 
 $(FILO_SRC_DIR)/filo.elf: $(FILO_STAMP_DIR)/.configured
 	@ echo "Building filo..."
+ifeq ($(findstring customconfig,$(FILO_CONFIG)),customconfig)
+	@ echo "Using custom config $(PACKAGE_DIR)/filo/conf/$(FILO_CONFIG)"
+endif
 	@ make -C $(FILO_SRC_DIR) filo.elf > $(FILO_BUILD_LOG) 2>&1
 
 $(FILO_STAMP_DIR) $(FILO_LOG_DIR):
@@ -64,3 +71,24 @@
 filo-distclean:
 	@ rm -rf $(FILO_DIR)/*
 
+filo-extract: $(FILO_STAMP_DIR)/.patched
+
+filo-config: $(FILO_STAMP_DIR)/.unpacked
+ifeq ($(shell if [ -f $(PACKAGE_DIR)/filo/conf/customconfig--$(PAYLOAD)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD) ]; then echo 1; fi),1)
+	@ echo
+	@ echo "Found an existing custom configuration file:"
+	@ echo "  $(PACKAGE_DIR)/filo/conf/customconfig--$(PAYLOAD)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD)"
+	@ echo "Please modify this file by hand."
+	@ echo "Remove the above file and re-run this command if you want to create a new custom configuration from scratch for this payload/board."
+	@ echo
+else
+	@ echo "Configure filo..."
+	@ $(MAKE) -C $(FILO_SRC_DIR) config
+	@ cp -f $(FILO_SRC_DIR)/Config $(PACKAGE_DIR)/filo/conf/customconfig--$(PAYLOAD)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD)
+	@ echo
+	@ echo "Your custom FILO config has been saved as "
+	@ echo "  $(PACKAGE_DIR)/filo/conf/customconfig--$(PAYLOAD)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD)"
+	@ echo "Please edit it to your liking."
+	@ echo
+endif
+
Index: packages/busybox/busybox.mk
===================================================================
--- packages/busybox/busybox.mk	(revision 104)
+++ packages/busybox/busybox.mk	(working copy)
@@ -17,11 +17,18 @@
 
 BUSYBOX_CONFIG ?= defconfig
 
+ifeq ($(findstring defconfig,$(BUSYBOX_CONFIG)),defconfig)
+ifeq ($(shell if [ -f $(PACKAGE_DIR)/busybox/conf/customconfig--$(PAYLOAD)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD) ]; then echo 1; fi),1)
+	BUSYBOX_CONFIG = customconfig--$(PAYLOAD)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD)
+endif
+endif
+
 $(SOURCE_DIR)/$(BUSYBOX_SOURCE):
+	@ echo "Downloading busybox..."
 	@ mkdir -p $(SOURCE_DIR)
 	@ wget -P $(SOURCE_DIR) $(BUSYBOX_URL)/$(BUSYBOX_SOURCE)
 
-$(BUSYBOX_STAMP_DIR)/.unpacked: $(SOURCE_DIR)/$(BUSYBOX_SOURCE)
+$(BUSYBOX_STAMP_DIR)/.unpacked: $(SOURCE_DIR)/$(BUSYBOX_SOURCE) | $(BUSYBOX_STAMP_DIR) $(BUSYBOX_DIR)
 	@ echo "Unpacking busybox..."
 	@ tar -C $(BUSYBOX_DIR) -jxf $(SOURCE_DIR)/$(BUSYBOX_SOURCE)
 	@ touch $@	
@@ -32,24 +39,27 @@
 	@ touch $@
 
 $(BUSYBOX_SRC_DIR)/.config: $(BUSYBOX_STAMP_DIR)/.patched
-	@ cp $(PACKAGE_DIR)/busybox/conf/$(BUSYBOX_CONFIG) $@
+	@ cp -f $(PACKAGE_DIR)/busybox/conf/$(BUSYBOX_CONFIG) $@
 
-$(BUSYBOX_SRC_DIR)/busybox: $(BUSYBOX_SRC_DIR)/.config
+$(BUSYBOX_SRC_DIR)/busybox: $(BUSYBOX_SRC_DIR)/.config | $(BUSYBOX_LOG_DIR)
 	@ echo "Building busybox..."
+ifneq ($(findstring defconfig,$(BUSYBOX_CONFIG)),defconfig)
+	@ echo "Using custom config $(PACKAGE_DIR)/busybox/conf/$(BUSYBOX_CONFIG)"
+endif
 	@ ( unset CFLAGS; unset LDFLAGS; \
 	export EXTRA_CFLAGS="$(CFLAGS)";\
 	export LDFLAGS="$(LDFLAGS_orig)";\
 	$(MAKE) -C $(BUSYBOX_SRC_DIR) VERBOSE=y \
 	LIBRARIES="$(LIBS)" all > $(BUSYBOX_BUILD_LOG) 2>&1)
 
-$(INITRD_DIR)/bin/busybox: $(BUSYBOX_SRC_DIR)/busybox
+$(INITRD_DIR)/bin/busybox: $(BUSYBOX_SRC_DIR)/busybox | $(BUSYBOX_LOG_DIR)
 	@ $(MAKE) -C $(BUSYBOX_SRC_DIR) \
 	PREFIX=$(INITRD_DIR) install > $(BUSYBOX_INSTALL_LOG) 2>&1
 
-$(BUSYBOX_STAMP_DIR) $(BUSYBOX_LOG_DIR):
+$(BUSYBOX_STAMP_DIR) $(BUSYBOX_LOG_DIR) $(BUSYBOX_DIR):
 	@ mkdir -p $@
 
-busybox: $(BUSYBOX_STAMP_DIR) $(BUSYBOX_LOG_DIR) $(INITRD_DIR)/bin/busybox
+busybox: $(INITRD_DIR)/bin/busybox
 
 busybox-clean:
 	@ echo "Cleaning busybox..."
@@ -62,3 +72,27 @@
 	@ echo "Package: busybox"
 	@ echo "Source: $(BUSYBOX_URL)/$(BUSYBOX_SOURCE)"
 	@ echo ""
+
+busybox-extract: $(BUSYBOX_STAMP_DIR)/.patched
+
+busybox-config: $(BUSYBOX_STAMP_DIR)/.patched
+ifeq ($(shell if [ -f $(PACKAGE_DIR)/busybox/conf/customconfig--$(PAYLOAD)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD) ]; then echo 1; fi),1)
+	@ cp -f $(PACKAGE_DIR)/busybox/conf/customconfig--$(PAYLOAD)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD) $(BUSYBOX_SRC_DIR)/.config
+endif
+ifeq (busybox,$(filter busybox,$(PAYLOAD-y)))
+	@ echo "Configure busybox..."
+	@ $(MAKE) -C $(BUSYBOX_SRC_DIR) menuconfig
+	@ echo
+ifeq ($(shell if [ -f $(PACKAGE_DIR)/busybox/conf/customconfig--$(PAYLOAD)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD) ]; then echo 1; fi),1)
+	@ echo "Found an existing custom configuration file:"
+	@ echo "  $(PACKAGE_DIR)/busybox/conf/customconfig--$(PAYLOAD)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD)"
+	@ echo "I've copied it back to the source directory for modification."
+	@ echo "Remove the above file and re-run this command if you want to create a new custom configuration from scratch for this payload/board."
+	@ echo
+endif
+	@ cp -f $(BUSYBOX_SRC_DIR)/.config $(PACKAGE_DIR)/busybox/conf/customconfig--$(PAYLOAD)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD)
+	@ echo "Your custom busybox config file has been saved as $(PACKAGE_DIR)/busybox/conf/customconfig--$(PAYLOAD)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD)."
+	@ echo
+else
+	@ echo "Your payload does not require busybox."
+endif
Index: packages/mkelfimage/mkelfimage.mk
===================================================================
--- packages/mkelfimage/mkelfimage.mk	(revision 104)
+++ packages/mkelfimage/mkelfimage.mk	(working copy)
@@ -15,11 +15,14 @@
 MKELFIMAGE_CONFIG_LOG=$(MKELFIMAGE_LOG_DIR)/config.log
 endif
 
+$(MKELFIMAGE_STAMP_DIR) $(MKELFIMAGE_LOG_DIR):
+	@ mkdir -p $@
+
 $(SOURCE_DIR)/$(MKELFIMAGE_SOURCE):
 	@ mkdir -p $(SOURCE_DIR)
 	@ wget -P $(SOURCE_DIR) $(MKELFIMAGE_URL)/$(MKELFIMAGE_SOURCE)
 
-$(MKELFIMAGE_STAMP_DIR)/.unpacked: $(SOURCE_DIR)/$(MKELFIMAGE_SOURCE)
+$(MKELFIMAGE_STAMP_DIR)/.unpacked: $(SOURCE_DIR)/$(MKELFIMAGE_SOURCE) | $(MKELFIMAGE_STAMP_DIR) $(MKELFIMAGE_LOG_DIR) 
 	@ echo "Unpacking mkelfimage..."
 	@ tar -C $(MKELFIMAGE_DIR) -zxf $(SOURCE_DIR)/$(MKELFIMAGE_SOURCE)
 	@ touch $@	
@@ -45,11 +48,8 @@
 	@ install -d $(STAGING_DIR)/sbin
 	@ install -m 0755 $< $@
 
-$(MKELFIMAGE_STAMP_DIR) $(MKELFIMAGE_LOG_DIR):
-	@ mkdir -p $@
+mkelfimage: $(STAGING_DIR)/sbin/mkelfImage
 
-mkelfimage: $(MKELFIMAGE_STAMP_DIR) $(MKELFIMAGE_LOG_DIR) $(STAGING_DIR)/sbin/mkelfImage
-
 mkelfimage-clean:
 	$(MAKE) -C $(MKELFIMAGE_SRC_DIR) clean 
 
@@ -60,3 +60,6 @@
 	echo "Package: mkelfimage"
 	echo "Source: $(MKELFIMAGE_URL)/$(MKELFIMAGE_SOURCE)"
 	echo ""
+
+mkelfimage-extract: $(MKELFIMAGE_STAMP_DIR)/.patched
+
Index: packages/coreboot-v2/coreboot.inc
===================================================================
--- packages/coreboot-v2/coreboot.inc	(revision 104)
+++ packages/coreboot-v2/coreboot.inc	(working copy)
@@ -58,8 +58,8 @@
 $(CBV2_PAYLOAD_TARGET): $(PAYLOAD_TARGET)
 	@ cp $< $@
 
-$(CBV2_STAMP_DIR)/.unpacked: $(SOURCE_DIR)/$(CBV2_TARBALL)
-	@ echo "Unpacking coreboot..."
+$(CBV2_STAMP_DIR)/.unpacked: $(SOURCE_DIR)/$(CBV2_TARBALL) | $(CBV2_STAMP_DIR) $(CBV2_LOG_DIR)
+	@ echo "Unpacking coreboot ($(CBV2_TARBALL))..."
 	@ tar -C $(CBV2_DIR) -zxf $(SOURCE_DIR)/$(CBV2_TARBALL)
 	@ touch $@	
 
@@ -98,3 +98,6 @@
 	fi	
 
 	@ rm -rf $(CBV2_DIR)/*
+
+coreboot-extract: $(CBV2_STAMP_DIR)/.patched
+
Index: packages/uclibc/uclibc.mk
===================================================================
--- packages/uclibc/uclibc.mk	(revision 104)
+++ packages/uclibc/uclibc.mk	(working copy)
@@ -9,6 +9,12 @@
 UCLIBC_CONFIG ?= defconfig
 endif
 
+ifeq ($(findstring defconfig,$(UCLIBC_CONFIG)),defconfig)
+ifeq ($(shell if [ -f $(PACKAGE_DIR)/uclibc/conf/customconfig--$(PAYLOAD)--$(UCLIBC_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD) ]; then echo 1; fi),1)
+	UCLIBC_CONFIG = customconfig--$(PAYLOAD)--$(UCLIBC_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD)
+endif
+endif
+
 UCLIBC_URL=http://www.uclibc.org/downloads
 UCLIBC_SOURCE=uClibc-$(UCLIBC_VER).tar.bz2
 UCLIBC_DIR=$(BUILD_DIR)/uclibc
@@ -25,10 +31,11 @@
 endif
 
 $(SOURCE_DIR)/$(UCLIBC_SOURCE):
+	@ echo "Downloading uclibc..." 
 	@ mkdir -p $(SOURCE_DIR)
 	@ wget -P $(SOURCE_DIR) $(UCLIBC_URL)/$(UCLIBC_SOURCE)
 
-$(UCLIBC_STAMP_DIR)/.unpacked: $(SOURCE_DIR)/$(UCLIBC_SOURCE)
+$(UCLIBC_STAMP_DIR)/.unpacked: $(SOURCE_DIR)/$(UCLIBC_SOURCE) | $(UCLIBC_STAMP_DIR) $(UCLIBC_DIR)
 	@ echo "Unpacking uclibc..." 
 	@ tar -C $(UCLIBC_DIR) -jxf $(SOURCE_DIR)/$(UCLIBC_SOURCE)
 	@ touch $@	
@@ -38,6 +45,9 @@
 
 $(UCLIBC_SRC_DIR)/lib/libc.a: $(UCLIBC_SRC_DIR)/.config
 	@ echo "Building uclibc..." 
+ifneq ($(findstring defconfig,$(UCLIBC_CONFIG)),defconfig)
+	@ echo "Using custom config $(PACKAGE_DIR)/uclibc/conf/$(UCLIBC_CONFIG)"
+endif
 	@ ( unset CFLAGS; unset LDFLAGS; \
 	$(MAKE) $(PARALLEL_MAKE) -C $(UCLIBC_SRC_DIR) TARGET_ARCH="$(UCLIBC_ARCH)" \
 	CC="$(CC) $(CROSS_CFLAGS)" LD="$(LD) $(CROSS_LDFLAGS)" \
@@ -61,7 +71,7 @@
 	@ install -m 755 -d $(STAGING_DIR)/bin
 	@ install -m 755 $< $@
 
-$(UCLIBC_STAMP_DIR) $(UCLIBC_LOG_DIR):
+$(UCLIBC_STAMP_DIR) $(UCLIBC_LOG_DIR) $(UCLIBC_DIR):
 	@ mkdir -p $@
 
 uclibc: $(UCLIBC_STAMP_DIR) $(UCLIBC_LOG_DIR) $(STAGING_DIR)/lib/libc.a
@@ -77,3 +87,27 @@
 	@ echo "Package: uclibc"
 	@ echo "Source: $(UCLIBC_URL)/$(UCLIBC_SOURCE)"
 	@ echo ""
+
+uclibc-extract: $(UCLIBC_STAMP_DIR)/.unpacked
+
+uclibc-config: $(UCLIBC_STAMP_DIR)/.unpacked
+ifeq ($(shell if [ -f $(PACKAGE_DIR)/uclibc/conf/customconfig--$(PAYLOAD)--$(UCLIBC_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD) ]; then echo 1; fi),1)
+	@ cp -f $(PACKAGE_DIR)/uclibc/conf/customconfig--$(PAYLOAD)--$(UCLIBC_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD) $(UCLIBC_SRC_DIR)/.config
+endif
+ifeq (uclibc,$(filter uclibc,$(PAYLOAD-y)))
+	@ echo "Configure uclibc..."
+	@ $(MAKE) -C $(UCLIBC_SRC_DIR) TARGET_ARCH="$(UCLIBC_ARCH)" menuconfig
+	@ echo
+ifeq ($(shell if [ -f $(PACKAGE_DIR)/uclibc/conf/customconfig--$(PAYLOAD)--$(UCLIBC_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD) ]; then echo 1; fi),1)
+	@ echo "Found an existing custom configuration file:"
+	@ echo "  $(PACKAGE_DIR)/uclibc/conf/customconfig--$(PAYLOAD)--$(UCLIBC_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD)"
+	@ echo "I've copied it back to the source directory for modification."
+	@ echo "Remove the above file and re-run this command if you want to create a new custom configuration from scratch for this payload/board."
+	@ echo
+endif
+	@ cp -f $(UCLIBC_SRC_DIR)/.config $(PACKAGE_DIR)/uclibc/conf/customconfig--$(PAYLOAD)--$(UCLIBC_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD)
+	@ echo "Your custom uclibc config file has been saved as $(PACKAGE_DIR)/uclibc/conf/customconfig--$(PAYLOAD)--$(UCLIBC_ARCH)--$(COREBOOT_VENDOR)-$(COREBOOT_BOARD)."
+	@ echo
+else
+	@ echo "Your payload does not require uclibc."
+endif
Index: packages/lzma/lzma.mk
===================================================================
--- packages/lzma/lzma.mk	(revision 104)
+++ packages/lzma/lzma.mk	(working copy)
@@ -17,7 +17,7 @@
 	@ mkdir -p $(SOURCE_DIR)
 	@ wget -P $(SOURCE_DIR) $(LZMA_URL)/$(LZMA_SOURCE)
 
-$(LZMA_STAMP_DIR)/.unpacked: $(SOURCE_DIR)/$(LZMA_SOURCE)
+$(LZMA_STAMP_DIR)/.unpacked: $(SOURCE_DIR)/$(LZMA_SOURCE) | $(LZMA_STAMP_DIR)
 	@ mkdir -p $(LZMA_SRC_DIR)
 	@ tar -C $(LZMA_SRC_DIR) -jxf $(SOURCE_DIR)/$(LZMA_SOURCE)
 	@ touch $@
@@ -44,3 +44,6 @@
 
 lzma-distclean:
 	@ rm -rf $(LZMA_DIR)/*
+
+lzma-extract: $(LZMA_STAMP_DIR)/.unpacked
+


More information about the coreboot mailing list