[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCHv3] 02/28] build: hookup Kconfig build and usage



Wire in the Kconfig build and makefile rules to be able to generate
valid configuration files to be used by the build process.

CC: Ian Campbell <ian.campbell@xxxxxxxxxx>
CC: Stefano Stabellini <stefano.stabellini@xxxxxxxxxx>
CC: Keir Fraser <keir@xxxxxxx>
CC: Jan Beulich <jbeulich@xxxxxxxx>
CC: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Signed-off-by: Doug Goldstein <cardoe@xxxxxxxxxx>
---
 .gitignore                            |  8 ++++
 xen/Kconfig                           | 26 ++++++++++++
 xen/Makefile                          | 22 ++++++++++
 xen/Rules.mk                          |  2 +
 xen/arch/arm/Kconfig                  | 31 ++++++++++++++
 xen/arch/arm/configs/arm32_defconfig  |  1 +
 xen/arch/arm/configs/arm64_defconfig  |  0
 xen/arch/x86/Kconfig                  | 18 ++++++++
 xen/arch/x86/configs/x86_64_defconfig |  0
 xen/common/Kconfig                    |  4 ++
 xen/drivers/Kconfig                   |  3 ++
 xen/include/xen/config.h              |  2 +
 xen/scripts/kconfig/.gitignore        |  3 ++
 xen/scripts/kconfig/Makefile          | 77 +++++++++++++++++++++++++++++++++++
 14 files changed, 197 insertions(+)
 create mode 100644 xen/Kconfig
 create mode 100644 xen/arch/arm/Kconfig
 create mode 100644 xen/arch/arm/configs/arm32_defconfig
 create mode 100644 xen/arch/arm/configs/arm64_defconfig
 create mode 100644 xen/arch/x86/Kconfig
 create mode 100644 xen/arch/x86/configs/x86_64_defconfig
 create mode 100644 xen/common/Kconfig
 create mode 100644 xen/drivers/Kconfig
 create mode 100644 xen/scripts/kconfig/Makefile

diff --git a/.gitignore b/.gitignore
index 91e1430..780df23 100644
--- a/.gitignore
+++ b/.gitignore
@@ -217,6 +217,11 @@ tools/xentrace/tbctl
 tools/xentrace/xenctx
 tools/xentrace/xentrace
 xen/.banner
+xen/.config
+xen/.config.old
+xen/defconfig
+xen/**/*.cmd
+xen/**/modules.order
 xen/System.map
 xen/arch/arm/asm-offsets.s
 xen/arch/arm/xen.lds
@@ -239,6 +244,9 @@ xen/include/headers++.chk
 xen/include/asm
 xen/include/asm-*/asm-offsets.h
 xen/include/compat/*
+xen/include/config.h
+xen/include/config/
+xen/include/generated/
 xen/include/public/public
 xen/include/xen/*.new
 xen/include/xen/acm_policy.h
diff --git a/xen/Kconfig b/xen/Kconfig
new file mode 100644
index 0000000..b2d0fe2
--- /dev/null
+++ b/xen/Kconfig
@@ -0,0 +1,26 @@
+#
+# For a description of the syntax of this configuration file,
+# see Documentation/kbuild/kconfig-language.txt from the Linux
+# kernel source tree.
+#
+mainmenu "Xen/$SRCARCH $XEN_FULLVERSION Configuration"
+
+config SRCARCH
+       string
+       option env="SRCARCH"
+
+config ARCH
+       string
+       option env="ARCH"
+
+source "arch/$SRCARCH/Kconfig"
+
+config XEN_FULLVERSION
+       string
+       option env="XEN_FULLVERSION"
+
+config DEFCONFIG_LIST
+       string
+       option defconfig_list
+       default "$ARCH_DEFCONFIG"
+       default "arch/$SRCARCH/defconfig"
diff --git a/xen/Makefile b/xen/Makefile
index c556198..706aa99 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -17,12 +17,18 @@ export XEN_ROOT := $(BASEDIR)/..
 
 EFI_MOUNTPOINT ?= $(BOOT_DIR)/efi
 
+# Don't break if the build process wasn't called from the top level
+XEN_TARGET_ARCH ?= $(shell uname -m)
+
 .PHONY: default
 default: build
 
 .PHONY: dist
 dist: install
 
+.PHONY: build
+build:: $(BASEDIR)/include/config/auto.conf
+
 .PHONY: build install uninstall clean distclean cscope TAGS tags MAP gtags
 build install uninstall debug clean distclean cscope TAGS tags MAP gtags::
 ifneq ($(XEN_TARGET_ARCH),x86_32)
@@ -88,6 +94,7 @@ _clean: delete-unfresh-files
        $(MAKE) -f $(BASEDIR)/Rules.mk -C xsm clean
        $(MAKE) -f $(BASEDIR)/Rules.mk -C crypto clean
        $(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) clean
+       $(MAKE) -f scripts/kconfig/Makefile clean
        rm -f include/asm *.o $(TARGET) $(TARGET).gz $(TARGET).efi 
$(TARGET)-syms *~ core
        rm -f include/asm-*/asm-offsets.h
        rm -f .banner
@@ -216,3 +223,18 @@ FORCE:
 
 %/: FORCE
        $(MAKE) -f $(BASEDIR)/Rules.mk -C $* built_in.o built_in_bin.o
+
+kconfig := silentoldconfig oldconfig config menuconfig defconfig \
+       nconfig xconfig gconfig savedefconfig listnewconfig olddefconfig
+.PHONY: $(kconfig)
+$(kconfig):
+       $(MAKE) -f $(BASEDIR)/scripts/kconfig/Makefile ARCH=$(XEN_TARGET_ARCH) 
$@
+
+$(BASEDIR)/include/config/%.conf: $(BASEDIR)/include/config/auto.conf.cmd
+       $(Q)$(MAKE) -f $(BASEDIR)/scripts/kconfig/Makefile 
ARCH=$(XEN_TARGET_ARCH) silentoldconfig
+
+# Allow people to just run `make` as before and not force them to configure
+$(BASEDIR)/.config $(BASEDIR)/include/config/auto.conf.cmd: ;
+       $(Q)$(MAKE) -f $(BASEDIR)/scripts/kconfig/Makefile 
ARCH=$(XEN_TARGET_ARCH) defconfig
+
+-include $(BASEDIR)/include/config/auto.conf.cmd
diff --git a/xen/Rules.mk b/xen/Rules.mk
index e9d03b9..011768a 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -12,6 +12,8 @@ frame_pointer ?= n
 lto           ?= n
 kexec         ?= y
 
+-include $(BASEDIR)/include/config/auto.conf
+
 include $(XEN_ROOT)/Config.mk
 
 # Hardcoded configuration implications and dependencies.
diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig
new file mode 100644
index 0000000..ef64b06
--- /dev/null
+++ b/xen/arch/arm/Kconfig
@@ -0,0 +1,31 @@
+# Select 32 or 64 bit
+config 64BIT
+       bool "64-bit Xen" if ARCH = "arm64"
+       default ARCH != "arm32"
+       help
+         Say yes to build a 64-bit Xen
+         Say no to build a 32-bit Xen
+
+config ARM_32
+       def_bool y
+       depends on !64BIT
+
+config ARM_64
+       def_bool y
+       depends on 64BIT
+
+config ARM
+       def_bool y
+
+config ARCH_DEFCONFIG
+       string
+       default "arch/arm/arm32_defconfig" if ARM_32
+       default "arch/arm/arm64_defconfig" if ARM_64
+
+menu "Architecture Features"
+
+endmenu
+
+source "common/Kconfig"
+
+source "drivers/Kconfig"
diff --git a/xen/arch/arm/configs/arm32_defconfig 
b/xen/arch/arm/configs/arm32_defconfig
new file mode 100644
index 0000000..5608ff9
--- /dev/null
+++ b/xen/arch/arm/configs/arm32_defconfig
@@ -0,0 +1 @@
+CONFIG_64BIT=n
diff --git a/xen/arch/arm/configs/arm64_defconfig 
b/xen/arch/arm/configs/arm64_defconfig
new file mode 100644
index 0000000..e69de29
diff --git a/xen/arch/x86/Kconfig b/xen/arch/x86/Kconfig
new file mode 100644
index 0000000..1e18aa1
--- /dev/null
+++ b/xen/arch/x86/Kconfig
@@ -0,0 +1,18 @@
+config X86_64
+       def_bool y
+
+config X86
+       def_bool y
+       select HAS_GDBSX
+
+config ARCH_DEFCONFIG
+       string
+       default "arch/x86/x86_64_defconfig"
+
+menu "Architecture Features"
+
+endmenu
+
+source "common/Kconfig"
+
+source "drivers/Kconfig"
diff --git a/xen/arch/x86/configs/x86_64_defconfig 
b/xen/arch/x86/configs/x86_64_defconfig
new file mode 100644
index 0000000..e69de29
diff --git a/xen/common/Kconfig b/xen/common/Kconfig
new file mode 100644
index 0000000..0251856
--- /dev/null
+++ b/xen/common/Kconfig
@@ -0,0 +1,4 @@
+
+menu "Common Features"
+
+endmenu
diff --git a/xen/drivers/Kconfig b/xen/drivers/Kconfig
new file mode 100644
index 0000000..7bc7b6e
--- /dev/null
+++ b/xen/drivers/Kconfig
@@ -0,0 +1,3 @@
+menu "Device Drivers"
+
+endmenu
diff --git a/xen/include/xen/config.h b/xen/include/xen/config.h
index f7258c7..12a4688 100644
--- a/xen/include/xen/config.h
+++ b/xen/include/xen/config.h
@@ -12,6 +12,8 @@
 #endif
 #include <asm/config.h>
 
+#include <generated/autoconf.h>
+
 #define EXPORT_SYMBOL(var)
 #define EXPORT_SYMBOL_GPL(var)
 
diff --git a/xen/scripts/kconfig/.gitignore b/xen/scripts/kconfig/.gitignore
index be603c4..97430c3 100644
--- a/xen/scripts/kconfig/.gitignore
+++ b/xen/scripts/kconfig/.gitignore
@@ -11,6 +11,9 @@ gconf.glade.h
 *.pot
 *.mo
 
+.tmp_gtkcheck
+.tmp_qtcheck
+
 #
 # configuration programs
 #
diff --git a/xen/scripts/kconfig/Makefile b/xen/scripts/kconfig/Makefile
new file mode 100644
index 0000000..5674b00
--- /dev/null
+++ b/xen/scripts/kconfig/Makefile
@@ -0,0 +1,77 @@
+# xen/scripts/kconfig
+
+MAKEFLAGS += -rR
+
+# default rule to do nothing
+all:
+
+XEN_ROOT = $(CURDIR)/..
+
+# Xen doesn't have a silent build flag
+quiet := silent_
+Q := @
+kecho := :
+
+# eventually you'll want to do out of tree builds
+srctree = $(XEN_ROOT)/xen
+objtree = $(srctree)
+src := scripts/kconfig
+obj := $(src)
+KBUILD_SRC :=
+
+# handle functions (most of these lifted from different Linux makefiles
+dot-target = $(dir $@).$(notdir $@)
+depfile = $(subst $(comma),,$(dot-target).d)
+basetarget = $(basename $(notdir $@))
+cmd = $(cmd_$(1))
+if_changed = $(if y, \
+       @set -e; \
+       $(cmd_$(1)); \
+       )
+
+if_changed_dep = $(if y, \
+       @set -e;        \
+       $(cmd_$(1)); \
+       )
+
+define multi_depend
+$(foreach m, $(notdir $1), \
+       $(eval $(obj)/$m: \
+       $(addprefix $(obj)/, $(foreach s, $3, $($(m:%$(strip $2)=%$(s)))))))
+endef
+
+# Set our default defconfig file
+KBUILD_DEFCONFIG := $(ARCH)_defconfig
+
+# provide our shell
+CONFIG_SHELL := $(SHELL)
+
+# provide the host compiler
+HOSTCC := gcc
+HOSTCXX := g++
+
+# force target
+PHONY += FORCE
+
+FORCE:
+
+SRCARCH = $(shell echo $(ARCH) | \
+       sed -e 's/x86.*/x86/' -e s'/arm\(32\|64\)/arm/g')
+export SRCARCH
+
+# include the original Makefile from Linux
+include $(src)/Makefile.linux
+include $(src)/../Makefile.host
+
+# clean up rule
+clean-deps = $(foreach f,$(host-cobjs) $(host-cxxobjs),$(dir $f).$(notdir 
$f).d)
+clean-shipped = $(patsubst %_shipped,%,$(wildcard $(obj)/*_shipped))
+
+clean:
+       rm -rf $(clean-files)
+       rm -rf $(clean-deps)
+       rm -rf $(host-csingle) $(host-cmulti) $(host-cxxmulti) $(host-cobjs) 
$(host-cxxobjs)
+       rm -rf $(clean-shipped)
+
+$(obj)/zconf%: $(src)/zconf%_shipped
+       @cp -f $< $@
-- 
2.4.10


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.