diff --git a/.gitignore b/.gitignore index 91e1430d37..0a0f3ad4e1 100644 --- a/.gitignore +++ b/.gitignore @@ -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 index 0000000000..ffe3f459e5 --- /dev/null +++ b/xen/Kconfig @@ -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" diff --git a/xen/Makefile b/xen/Makefile index 62c3a6e69b..fd1665024f 100644 --- a/xen/Makefile +++ b/xen/Makefile @@ -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 index 0000000000..91b96bcad2 --- /dev/null +++ b/xen/arch/arm/Kconfig @@ -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 index 0000000000..e69de29bb2 diff --git a/xen/arch/arm/configs/arm64_defconfig b/xen/arch/arm/configs/arm64_defconfig new file mode 100644 index 0000000000..e69de29bb2 diff --git a/xen/arch/x86/Kconfig b/xen/arch/x86/Kconfig new file mode 100644 index 0000000000..9df34a4d7d --- /dev/null +++ b/xen/arch/x86/Kconfig @@ -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 index 0000000000..e69de29bb2 diff --git a/xen/common/Kconfig b/xen/common/Kconfig new file mode 100644 index 0000000000..0251856777 --- /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 0000000000..7bc7b6e807 --- /dev/null +++ b/xen/drivers/Kconfig @@ -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 index 0000000000..574ce1dc04 --- /dev/null +++ b/xen/tools/kconfig/Makefile.kconfig @@ -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 $< $@