]> xenbits.xensource.com Git - people/julieng/xen-unstable.git/commitdiff
build: build Kconfig and config rules
authorDoug Goldstein <cardoe@cardoe.com>
Tue, 15 Dec 2015 13:14:00 +0000 (14:14 +0100)
committerJan Beulich <jbeulich@suse.com>
Wed, 16 Dec 2015 16:27:06 +0000 (17:27 +0100)
Wire in the Kconfig build and makefile rules to be able to generate
valid configuration files to be used by the build process but don't
actually use the output for affecting the Xen build. To avoid dragging
in most of Kbuild from the Linux kernel this adds Makefile.kconfig which
is our real entry point into building kconfig. This attempts to reuse as
much of the Xen build bits as possible and wire them to the bits that
kconfig expects to be provided by Kbuild.

Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
.gitignore
xen/Kconfig [new file with mode: 0644]
xen/Makefile
xen/arch/arm/Kconfig [new file with mode: 0644]
xen/arch/arm/configs/arm32_defconfig [new file with mode: 0644]
xen/arch/arm/configs/arm64_defconfig [new file with mode: 0644]
xen/arch/x86/Kconfig [new file with mode: 0644]
xen/arch/x86/configs/x86_64_defconfig [new file with mode: 0644]
xen/common/Kconfig [new file with mode: 0644]
xen/drivers/Kconfig [new file with mode: 0644]
xen/tools/kconfig/Makefile.kconfig [new file with mode: 0644]

index 91e1430d37cb95262ba0d02b98ea495671c248ea..0a0f3ad4e1e5eadb44915c15fbb9df1af81b8477 100644 (file)
@@ -217,6 +217,8 @@ tools/xentrace/tbctl
 tools/xentrace/xenctx
 tools/xentrace/xentrace
 xen/.banner
+xen/.config
+xen/.config.old
 xen/System.map
 xen/arch/arm/asm-offsets.s
 xen/arch/arm/xen.lds
@@ -239,10 +241,14 @@ xen/include/headers++.chk
 xen/include/asm
 xen/include/asm-*/asm-offsets.h
 xen/include/compat/*
+xen/include/config/
+xen/include/generated/
 xen/include/public/public
 xen/include/xen/*.new
 xen/include/xen/acm_policy.h
 xen/include/xen/compile.h
+xen/tools/kconfig/.tmp_gtkcheck
+xen/tools/kconfig/.tmp_qtcheck
 xen/tools/symbols
 xen/xsm/flask/include/av_perm_to_string.h
 xen/xsm/flask/include/av_permissions.h
diff --git a/xen/Kconfig b/xen/Kconfig
new file mode 100644 (file)
index 0000000..ffe3f45
--- /dev/null
@@ -0,0 +1,24 @@
+#
+# For a description of the syntax of this configuration file,
+# see docs/misc/kconfig-language.txt
+#
+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"
index 62c3a6e69b81461d5cb85d2437931692eda2d9de..fd1665024f1b144ad767fe22ab08682b5a86cd36 100644 (file)
@@ -20,6 +20,13 @@ MAKEFLAGS += -rR
 
 EFI_MOUNTPOINT ?= $(BOOT_DIR)/efi
 
+# Don't break if the build process wasn't called from the top level
+# we need XEN_TARGET_ARCH to generate the proper config
+include $(XEN_ROOT)/Config.mk
+
+# Allow someone to change their config file
+export KCONFIG_CONFIG ?= .config
+
 .PHONY: default
 default: build
 
@@ -91,6 +98,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 $(BASEDIR)/tools/kconfig/Makefile.kconfig clean
        find . \( -name "*.o" -o -name ".*.d" \) -exec rm -f {} \;
        rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET)-syms *~ core
        rm -f include/asm-*/asm-offsets.h
@@ -220,3 +228,16 @@ 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)/tools/kconfig/Makefile.kconfig ARCH=$(XEN_TARGET_ARCH) $@
+
+include/config/%.conf: include/config/auto.conf.cmd
+       $(Q)$(MAKE) -f $(BASEDIR)/tools/kconfig/Makefile.kconfig ARCH=$(XEN_TARGET_ARCH) silentoldconfig
+
+# Allow people to just run `make` as before and not force them to configure
+$(KCONFIG_CONFIG):
+       $(Q)$(MAKE) -f $(BASEDIR)/tools/kconfig/Makefile.kconfig ARCH=$(XEN_TARGET_ARCH) defconfig
diff --git a/xen/arch/arm/Kconfig b/xen/arch/arm/Kconfig
new file mode 100644 (file)
index 0000000..91b96bc
--- /dev/null
@@ -0,0 +1,31 @@
+# Select 32 or 64 bit
+config 64BIT
+       bool
+       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/configs/arm32_defconfig" if ARM_32
+       default "arch/arm/configs/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 (file)
index 0000000..e69de29
diff --git a/xen/arch/arm/configs/arm64_defconfig b/xen/arch/arm/configs/arm64_defconfig
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/xen/arch/x86/Kconfig b/xen/arch/x86/Kconfig
new file mode 100644 (file)
index 0000000..9df34a4
--- /dev/null
@@ -0,0 +1,17 @@
+config X86_64
+       def_bool y
+
+config X86
+       def_bool y
+
+config ARCH_DEFCONFIG
+       string
+       default "arch/x86/configs/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 (file)
index 0000000..e69de29
diff --git a/xen/common/Kconfig b/xen/common/Kconfig
new file mode 100644 (file)
index 0000000..0251856
--- /dev/null
@@ -0,0 +1,4 @@
+
+menu "Common Features"
+
+endmenu
diff --git a/xen/drivers/Kconfig b/xen/drivers/Kconfig
new file mode 100644 (file)
index 0000000..7bc7b6e
--- /dev/null
@@ -0,0 +1,3 @@
+menu "Device Drivers"
+
+endmenu
diff --git a/xen/tools/kconfig/Makefile.kconfig b/xen/tools/kconfig/Makefile.kconfig
new file mode 100644 (file)
index 0000000..574ce1d
--- /dev/null
@@ -0,0 +1,66 @@
+# xen/tools/kconfig
+
+# default rule to do nothing
+all:
+
+# 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 := tools/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 = $(cmd_$(1))
+if_changed_dep = $(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 and Makefile.host from Linux
+include $(src)/Makefile
+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 $< $@