-$(LINUX_DIR)/vmlinux: $(LINUX_DIR)/.linux-compile pkg-install ramdisk-config
- $(MAKE) -C $(LINUX_DIR) CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(KERNEL_CC)" ARCH=$(LINUX_KARCH) $(KERNELNAME)
-
-$(LINUX_KERNEL): $(LINUX_DIR)/vmlinux
- $(KERNEL_CROSS)objcopy -O binary -R .reginfo -R .note -R .comment -R .mdebug -S $< $@
- touch -c $(LINUX_KERNEL)
-
-$(LINUX_DIR)/.modules_done:
- rm -rf $(KERNEL_BUILD_DIR)/modules
- $(MAKE) -C "$(LINUX_DIR)" CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(KERNEL_CC)" ARCH=$(LINUX_KARCH) modules
- $(MAKE) -C "$(LINUX_DIR)" CROSS_COMPILE="$(KERNEL_CROSS)" CC="$(KERNEL_CC)" ARCH=$(LINUX_KARCH) DEPMOD=true INSTALL_MOD_PATH=$(KERNEL_BUILD_DIR)/modules modules_install
- touch $(LINUX_DIR)/.modules_done
-
-modules: $(LINUX_DIR)/.modules_done
-packages: $(TARGETS)
-
-$(LINUX_DIR)/.linux-compile:
- @rm -f $(BUILD_DIR)/linux
- ln -sf $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION) $(BUILD_DIR)/linux
- @$(MAKE) modules
- touch $@
-
-$(KERNEL_IPKG):
- rm -rf $(KERNEL_IDIR)
- mkdir -p $(KERNEL_IDIR)/etc
- $(SCRIPT_DIR)/make-ipkg-dir.sh $(KERNEL_IDIR) ../control/kernel.control $(LINUX_VERSION)-$(BOARD)-$(LINUX_RELEASE) $(ARCH)
- if [ -f ./config/$(BOARD).modules ]; then \
- cp ./config/$(BOARD).modules $(KERNEL_IDIR)/etc/modules; \
- fi
- $(IPKG_BUILD) $(KERNEL_IDIR) $(KERNEL_BUILD_DIR)
-
-$(TOPDIR)/.kernel.mk: $(TOPDIR)/target/linux/$(BOARD)-$(KERNEL)/Makefile
- echo "CONFIG_BOARD:=$(BOARD)" > $@
- echo "CONFIG_KERNEL:=$(KERNEL)" >> $@
- echo "CONFIG_LINUX_VERSION:=$(LINUX_VERSION)" >> $@
- echo "CONFIG_LINUX_RELEASE:=$(LINUX_RELEASE)" >> $@
- echo "CONFIG_LINUX_KARCH:=$(LINUX_KARCH)" >> $@
-
-pkg-install: FORCE
- @for pkg in $(INSTALL_TARGETS); do \
- $(IPKG) install $$pkg || echo; \
- done
-
-download: $(DL_DIR)/$(LINUX_SOURCE)
-prepare: $(LINUX_DIR)/.configured
- @mkdir -p $(LINUX_DIR) $(PACKAGE_DIR)
-
-compile: prepare $(LINUX_DIR)/.linux-compile
- @$(MAKE) packages
-
-install: compile $(LINUX_KERNEL)
-
-mostlyclean: FORCE
- rm -f $(LINUX_DIR)/.linux-compile
- rm -f $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)/.modules_done
- rm -f $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)/.drivers-unpacked
- $(MAKE) -C $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION) clean
- rm -f $(LINUX_KERNEL)
-
-rebuild: FORCE
- -$(MAKE) mostlyclean
- if [ -f $(LINUX_KERNEL) ]; then \
+define BuildKernel
+ $(if $(QUILT),$(Build/Quilt))
+ $(if $(LINUX_SITE),$(call Download,kernel))
+
+ $(STAMP_PREPARED): $(DL_DIR)/$(LINUX_SOURCE)
+ -rm -rf $(KERNEL_BUILD_DIR)
+ -mkdir -p $(KERNEL_BUILD_DIR)
+ $(Kernel/Prepare)
+ touch $$@
+
+ $(STAMP_CONFIGURED): $(STAMP_PREPARED) $(LINUX_CONFIG) $(GENERIC_LINUX_CONFIG) $(TOPDIR)/.config
+ $(Kernel/Configure)
+ touch $$@
+
+ $(LINUX_DIR)/.modules: $(STAMP_CONFIGURED) $(LINUX_DIR)/.config FORCE
+ $(Kernel/CompileModules)
+ touch $$@
+
+ $(LINUX_DIR)/.image: $(STAMP_CONFIGURED) FORCE
+ $(Kernel/CompileImage)
+ touch $$@
+
+ mostlyclean: FORCE
+ $(Kernel/Clean)
+
+ define BuildKernel
+ endef
+
+ download: $(DL_DIR)/$(LINUX_SOURCE)
+ prepare: $(STAMP_CONFIGURED)
+ compile: $(LINUX_DIR)/.modules
+ $(MAKE) -C image compile TARGET_BUILD=
+
+ oldconfig menuconfig: $(STAMP_PREPARED) FORCE
+ $(LINUX_CONFCMD) > $(LINUX_DIR)/.config
+ $(MAKE) -C $(LINUX_DIR) $(KERNEL_MAKEOPTS) $$@
+ $(SCRIPT_DIR)/kconfig.pl '>' $(GENERIC_LINUX_CONFIG) $(LINUX_DIR)/.config > $(LINUX_CONFIG)
+ $(Kernel/Configure)
+
+ install: $(LINUX_DIR)/.image
+ TARGET_BUILD="" $(MAKE) -C image compile install
+
+ clean: FORCE
+ rm -rf $(KERNEL_BUILD_DIR)
+
+ rebuild: FORCE
+ @$(MAKE) mostlyclean
+ @if [ -f $(LINUX_KERNEL) ]; then \