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

Re: [Xen-devel] [PATCHv6] 02/28] build: build Kconfig and config rules



>>> On 30.11.15 at 18:53, <cardoe@xxxxxxxxxx> wrote:
> On 11/30/15 8:36 AM, Jan Beulich wrote:
>>>>> On 24.11.15 at 18:51, <cardoe@xxxxxxxxxx> wrote:
>>> +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"
>> 
>> Linux'es variant has just SRCARCH and the source directive. Why
>> do we need so much more here? In any even I again think you
>> should at least briefly explain any extensions you do in the commit
>> message.
> 
> I'm not understanding the question here. Linux has 5 items in their
> list. The last two are identical to the 2 that I retained. Given other
> evolutions of the patchset I can drop the last one and keep it as just
> $ARCH_DEFCONFIG since I've always got that defined for arm and x86.

Oh, the context was ambiguous: The comment related to everything
quoted, not just the last option. I.e. I'm being irritated by there being
quite a few more config options here compared to Linux.

>>> --- a/xen/Makefile
>>> +++ b/xen/Makefile
>>> @@ -17,6 +17,9 @@ 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)
>> 
>> I don't see the need for this. We already require setting this on the
>> command line when invoking a build process bypassing the top level
>> directory. Later in the series, when actually using the produced
>> xen/.config, I could see this becoming a nice enhancement (by
>> reading the value from the file).
> 
> One of the early on reviews told me it was not required (and I can
> confirm that I can run "git clean -xdf && cd xen && make" and it will
> build). This change makes that behavior still work.

Yes, non-cross builds of course have been working without setting
that variable. I was (not clearly enough) referring to cross builds,
including hypervisor builds on ix86 distros (which I consider at best
kind of cross, but would really deem to be native with there not
being any 32-bit hypervisor anymore).

So can you clarify what exactly breaks in which way without this
change?

>>> @@ -216,3 +220,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)/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
>> 
>> Okay, I have found the Linux original to this and it's the same there,
>> but I'd like to ask anyway: How can this work without $* getting
>> passed on?
> 
> silentoldconfig is the step that actually takes the .config and
> generates out all the files like auto.conf and generated/config.h It
> should be in xen/scripts/kconfig/Makefile.linux I believe.

Not sure what you're trying to tell me, but in any event I don't see
this to answer the question.

>>> +# 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
>> 
>> Is this correct? If I have xen/.config but no
>> xen/include/config/auto.conf.cmd I surely don't want "defconfig" to
>> be run (unless "defconfig" honors xen/.config, in which case the
>> goal's name would be questionable)?
>> 
>> Also do you really need all the explicit $(BASEDIR) references in the
>> rules above?
> 
> I was asked to make the build work with out of tree builds and that's
> why I went this route. The rest of the Xen build system doesn't support
> out of tree builds so one can argue that's not needed.

That can't be right - $(BASEDIR) can't possibly refer to both the
source and object trees, yet the code above clearly references
both.

>>> --- /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
>> 
>> As said before I'm not really up to speed with defconfigs, but the
>> arm64 variant being empty but the arm32 one disabling 64BIT
>> seems backwards: You don't even have a choice on arm32.
> 
> I agree its squirrelly here. I believe I followed Linux and it only
> seems to come into play when you don't specify you're target arch and
> are running natively on the platform but want to build for the other
> arch. It likely can be dropped if its too confusing.

Unless you can explain this apparent backwardness, yes please.

>> Also - not 64BIT here, yet this - if added to ARM - should be added
>> here too so it can be used in common code.
> 
> That can fold into the above drop of 64BIT as configurable.

Iiuc on ARM you explicitly want this to be configurable. And even if
you make it a non-configurable setting, it should still be mirrored to
x86.

>>> +config ARCH_DEFCONFIG
>>> +   string
>>> +   default "arch/x86/configs/x86_64_defconfig"
>> 
>> x86_defconfig perhaps?
> 
> No. I was told to drop support for x86 entirely in an earlier review.
> Its not possible to configure for 32-bit x86 in v6.

x86 != 32-bit. I think you're mixing this up with ix86 or x86-32.
Here I consider x86 as to basic architecture without any
particular bit width in mind.

>>> --- /dev/null
>>> +++ b/xen/scripts/kconfig/Makefile
>>> @@ -0,0 +1,77 @@
>>> +# xen/scripts/kconfig
>>> +
>>> +MAKEFLAGS += -rR
>> 
>> Why?
> 
> kconfig in Linux makes the assumption that implicit rules and variables
> are turned off for the whole build process. Xen (oddly) does not do
> this.

Mind pointing out where this is being enforced? I've never run
across this.

> I sent another patch a while back that I planned on resending that
> disables the implicit rules and implicit variables.

That would be a prereq one then as it seems.

>>> +# 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)); \
>>> +   )
>> 
>> Considering how much you stripped these fro their Linux original, why
>> did you leave the always true $(if ...) in here, and why did you not
>> consolidate things only single lines (helping readability).
> 
> Funny story about GNU Make but it clears up build problems between 3.81
> and 4.0 on machines that I tested this on.

Then you'd have to explain the issue in a comment, since otherwise
the first one to seriously look at this would be tempted to clean it up.
(But I guess a better solution could be found than making both of
these 4-line constructs.)

>>> +# Set our default defconfig file
>>> +KBUILD_DEFCONFIG := $(ARCH)_defconfig
>>> +
>>> +# provide our shell
>>> +CONFIG_SHELL := $(SHELL)
>>> +
>>> +# provide the host compiler
>>> +HOSTCC := gcc
>>> +HOSTCXX := g++
>> 
>> Why is the C setting from ./Config.mk not good enough (the C++
>> one should then be added there if indeed needed, which I doubt)?
> 
> From an earlier review I dropped the usage of Config.mk because I was
> told the hypervisor (xen/) should build without ./configure being run.
> The C++ is needed for the kconfig frontends.

But Config.mk has nothing to do with top level configure, and is e.g.
being included from xen/Rules.mk.

Jan

_______________________________________________
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®.