From 7a35a3f0b5f668c9b7cdb289293977543735829d Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Fri, 25 May 2007 11:03:40 +0100 Subject: Factor out sparse tree makefile fragments and introduce hg-clone and tarball methods in preparation for migrating away from the sparse tree layout. This re-introduces 14883:6568c1882af5 and 14862:98efd2e410ae plus further fixes. Also add makefile fragments to support building the paravirt ops tree (make linux-2.6-paravirt-build). Signed-off-by: Ian Campbell --- buildconfigs/mk.linux-2.6-xen | 102 +++++++++++++++++++++++++++++------------- 1 file changed, 70 insertions(+), 32 deletions(-) (limited to 'buildconfigs/mk.linux-2.6-xen') diff --git a/buildconfigs/mk.linux-2.6-xen b/buildconfigs/mk.linux-2.6-xen index bdc5e738ad..afd56b1397 100644 --- a/buildconfigs/mk.linux-2.6-xen +++ b/buildconfigs/mk.linux-2.6-xen @@ -1,21 +1,28 @@ LINUX_SERIES = 2.6 -LINUX_VER = 2.6.18 +LINUX_VER ?= 2.6.18 -EXTRAVERSION ?= xen +EXTRAVERSION ?= -xen -LINUX_SRCDIR = linux-$(LINUX_VER)-xen -LINUX_DIR = build-linux-$(LINUX_VER)-$(EXTRAVERSION)_$(XEN_TARGET_ARCH) +XEN_LINUX_SOURCE ?= sparse -IMAGE_TARGET ?= vmlinuz -INSTALL_BOOT_PATH ?= $(DESTDIR) +# Let XEN_TARGET_ARCH override ARCH. +ifeq ($(XEN_TARGET_ARCH),x86_32) +LINUX_ARCH ?= i386 +else +LINUX_ARCH ?= $(XEN_TARGET_ARCH) +endif -ifeq ($(XEN_TARGET_ARCH),ia64) +LINUX_DIR = build-linux-$(LINUX_VER)$(EXTRAVERSION)_$(XEN_TARGET_ARCH) + +IMAGE_TARGET ?= vmlinuz INSTALL_BOOT_PATH := $(DESTDIR)/boot -endif LINUX_VER3 := $(LINUX_SERIES).$(word 3, $(subst ., ,$(LINUX_VER))) -include buildconfigs/Rules.mk +.PHONY: _build +_build: build + +include buildconfigs/src.$(XEN_LINUX_SOURCE) # The real action starts here! .PHONY: build @@ -28,31 +35,63 @@ build: $(LINUX_DIR)/include/linux/autoconf.h mkdir -p $(INSTALL_BOOT_PATH) $(MAKE) -C $(LINUX_DIR) ARCH=$(LINUX_ARCH) INSTALL_PATH=$(INSTALL_BOOT_PATH) install -$(LINUX_SRCDIR)/.valid-src: ref-linux-$(LINUX_VER)/.valid-ref - rm -rf $(LINUX_SRCDIR) - cp -al $(Mk.tmp ; \ - rm -f Makefile ; mv Mk.tmp Makefile ) - touch $@ - +$(LINUX_DIR)/include/linux/autoconf.h: CONFIG_FILE=$(PWD)/$(LINUX_DIR)/.config $(LINUX_DIR)/include/linux/autoconf.h: $(LINUX_SRCDIR)/.valid-src rm -rf $(LINUX_DIR) mkdir -p $(LINUX_DIR) - # Re-use config from install dir if one exits else use default config + # Re-use config from install dir if one exists. Next try to use + # buildconfigs/create_config.sh is one is provided by the source + # tree. Finally attempt to use make defconfig. + set -e ; \ CONFIG_VERSION=$$(sed -ne 's/$$(XENGUEST)//; s/^EXTRAVERSION = //p' $(LINUX_SRCDIR)/Makefile); \ - [ -r $(DESTDIR)/boot/config-$(LINUX_VER3)$$CONFIG_VERSION-$(EXTRAVERSION) ] && \ - cp $(DESTDIR)/boot/config-$(LINUX_VER3)$$CONFIG_VERSION-$(EXTRAVERSION) $(LINUX_DIR)/.config \ - || sh buildconfigs/create_config.sh $(LINUX_DIR)/.config $(EXTRAVERSION) $(XEN_TARGET_ARCH) $(XEN_SYSTYPE) - # See if we need to munge config to enable PAE - $(MAKE) CONFIG_FILE=$(LINUX_DIR)/.config -f buildconfigs/Rules.mk config-update-pae - echo "-$(EXTRAVERSION)" >$(LINUX_DIR)/.xenguest + if [ -r $(DESTDIR)/boot/config-$(LINUX_VER3)$$CONFIG_VERSION$(EXTRAVERSION) ] ; then \ + cp $(DESTDIR)/boot/config-$(LINUX_VER3)$$CONFIG_VERSION$(EXTRAVERSION) $(CONFIG_FILE) ; \ + elif [ -e $(LINUX_SRCDIR)/buildconfigs/create_config.sh ] ; then \ + cd $(LINUX_SRCDIR) && sh buildconfigs/create_config.sh \ + $(CONFIG_FILE) $(EXTRAVERSION) $(XEN_TARGET_ARCH) $(XEN_SYSTYPE) ; \ + echo "Configured $(LINUX_DIR) using create_config.sh" ; \ + elif $(MAKE) -C $(LINUX_SRCDIR) ARCH=$(LINUX_ARCH) defconfig O=$$(/bin/pwd)/$(LINUX_DIR) ; then \ + echo "Configured $(LINUX_DIR) using defconfig" ; \ + else \ + echo "No configuration method found for this kernel" ; \ + fi +ifeq ($(XEN_TARGET_ARCH),x86_32) +ifeq ($(pae),y) + sed -e 's!^CONFIG_HIGHMEM4G=y$$!\# CONFIG_HIGHMEM4G is not set!;s!^\# CONFIG_HIGHMEM64G is not set$$!CONFIG_HIGHMEM64G=y!' $(CONFIG_FILE) > $(CONFIG_FILE)- && mv $(CONFIG_FILE)- $(CONFIG_FILE) +else + grep '^CONFIG_HIGHMEM64G=y' $(CONFIG_FILE) >/dev/null && ( sed -e 's!^CONFIG_HIGHMEM64G=y$$!\# CONFIG_HIGHMEM64G is not set!;s!^\# CONFIG_HIGHMEM4G is not set$$!CONFIG_HIGHMEM4G=y!' $(CONFIG_FILE) > $(CONFIG_FILE)- && mv $(CONFIG_FILE)- $(CONFIG_FILE) ) || true +endif +endif +ifneq ($(EXTRAVERSION),) + echo "$(EXTRAVERSION)" >$(LINUX_DIR)/localversion-xen +endif $(MAKE) -C $(LINUX_SRCDIR) ARCH=$(LINUX_ARCH) oldconfig O=$$(/bin/pwd)/$(LINUX_DIR) + @if [ ! -f $(LINUX_DIR)/Makefile ] ; then \ + echo "***********************************"; \ + echo "oldconfig did not create a Makefile"; \ + echo "Generating $(LINUX_DIR)/Makefile "; \ + echo "***********************************"; \ + ( echo "# Automatically generated: don't edit"; \ + echo ""; \ + echo "VERSION = 2"; \ + echo "PATCHLEVEL = 6"; \ + echo ""; \ + echo "KERNELSRC := $(PWD)/$(LINUX_SRCDIR)"; \ + echo "KERNELOUTPUT := $(PWD)/$(LINUX_DIR)"; \ + echo ""; \ + echo "MAKEFLAGS += --no-print-directory"; \ + echo ""; \ + echo ".PHONY: all \$$(MAKECMDGOALS)"; \ + echo ""; \ + echo "all:"; \ + echo " \$$(MAKE) -C \$$(KERNELSRC) O=\$$(KERNELOUTPUT)"; \ + echo ""; \ + echo "Makefile:;"; \ + echo ""; \ + echo "\$$(filter-out all Makefile,\$$(MAKECMDGOALS)) %/:"; \ + echo " \$$(MAKE) -C \$$(KERNELSRC) O=\$$(KERNELOUTPUT) \$$@"; \ + ) > $(LINUX_DIR)/Makefile ; \ + fi .PHONY: prep prep: $(LINUX_DIR)/include/linux/autoconf.h @@ -67,12 +106,11 @@ clean:: [ ! -d $(LINUX_DIR) ] || \ $(MAKE) -C $(LINUX_DIR) ARCH=$(LINUX_ARCH) clean - .PHONY: delete delete: rm -rf tmp-linux-$(LINUX_VER) $(LINUX_DIR) -.PHONY: mrpropper -mrpropper: +.PHONY: mrproper +mrproper: rm -rf $(LINUX_SRCDIR) rm -f linux-$(LINUX_VER).tar.bz2 -- cgit v1.2.3