changeset 1056:4a6f0088450c

Only rebuild kernel when we need to.
author Rob Landley <rob@landley.net>
date Tue, 04 May 2010 00:49:14 -0500
parents 5cce9954d37f
children 949617f5287f
files system-image.sh
diffstat 1 files changed, 23 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/system-image.sh	Tue May 04 00:48:08 2010 -0500
+++ b/system-image.sh	Tue May 04 00:49:14 2010 -0500
@@ -27,7 +27,7 @@
 
 echo "=== Packaging system image from root-filesystem"
 
-blank_tempdir "$STAGE_DIR"
+mkdir -p "$STAGE_DIR"
 blank_tempdir "$WORK"
 
 [ -z "$SYSIMAGE_TYPE" ] && SYSIMAGE_TYPE=squashfs
@@ -52,17 +52,26 @@
 make ARCH=$BOOT_KARCH KCONFIG_ALLCONFIG=mini.conf $LINUX_FLAGS \
   allnoconfig >/dev/null || dienow
 
+# This is a layering violation: we're adding stuff to the native root
+# filesystem.  But we want the kernel .config to be saved in the system
+# image's filesystem.  (TODO: Find a better way to do this.)
+
+[ -d "$STAGE_DIR/usr/src" ] && cp .config "$NATIVE_ROOT/usr/src/config-linux"
+
 # Build kernel in parallel with initramfs
 
-[ ! -e "$STAGE_DIR/zImage-$ARCH" ] &&
+if [ "$SYSIMAGE_TYPE" == initramfs ] || [ ! -e "$STAGE_DIR/zImage-$ARCH" ]
+then
   echo "make -j $CPUS ARCH=$BOOT_KARCH $DO_CROSS $LINUX_FLAGS $VERBOSITY" &&
-  ( make -j $CPUS ARCH=$BOOT_KARCH $DO_CROSS $LINUX_FLAGS $VERBOSITY ||
-    dienow ) &
+  maybe_fork "make -j $CPUS ARCH=$BOOT_KARCH $DO_CROSS $LINUX_FLAGS $VERBOSITY || dienow"
+fi
 
 # Embed an initramfs image in the kernel?
 
 echo "Generating root filesystem of type: $SYSIMAGE_TYPE"
 
+rm "$STAGE_DIR/image-$ARCH"* 2>/dev/null
+
 if [ "$SYSIMAGE_TYPE" == "initramfs" ]
 then
   $CC usr/gen_init_cpio.c -o my_gen_init_cpio || dienow
@@ -122,10 +131,15 @@
   # a larger -b size to genext2fs is insanely slow, and not particularly
   # sparse.)
 
-  if [ $[1024*$SYSIMAGE_HDA_MEGS] -gt 65536 ]
+  echo "$(stat -c %s "$STAGE_DIR/$IMAGE") -lt $SYSIMAGE_HDA_MEGS"
+
+  if [ ! -z "$SYSIMAGE_HDA_MEGS" ] &&
+     [ $((`stat -c %s "$STAGE_DIR/$IMAGE"` / (1024*1024) )) -lt "$SYSIMAGE_HDA_MEGS" ]
   then
+    echo resizing image to $SYSIMAGE_HDA_MEGS
     dd if=/dev/zero of="$STAGE_DIR/$IMAGE" bs=1k count=1 seek=$[1024*1024-1] &&
     resize2fs "$STAGE_DIR/$IMAGE" ${SYSIMAGE_HDA_MEGS}M || dienow
+    echo resize complete
   fi
 
 elif [ "$SYSIMAGE_TYPE" == "squashfs" ]
@@ -145,9 +159,10 @@
 trap "" EXIT
 
 # Install kernel
-
-[ -d "$TOOLS/src" ] && cp .config "$TOOLS/src/config-linux"
-cp "$KERNEL_PATH" "$STAGE_DIR/zImage-$ARCH"
+if [ ! -e "$STAGE_DIR/zImage-$ARCH" ]
+then
+  cp "$KERNEL_PATH" "$STAGE_DIR/zImage-$ARCH"
+fi
 
 cleanup