linux/scripts/kconfig
Masahiro Yamada 00c864f890 kconfig: allow all config targets to write auto.conf if missing
Currently, only syncconfig creates or updates include/config/auto.conf
and some other files.  Other config targets create or update only the
.config file.

When you configure and build the kernel from a pristine source tree,
any config target is followed by syncconfig in the build stage since
include/config/auto.conf is missing.

We are moving compiler tests from Makefile to Kconfig.  It means that
parsing Kconfig files will be more costly since Kconfig invokes the
compiler commands internally.  Thus, we want to avoid invoking Kconfig
twice (one for *config to create the .config, and one for syncconfig
to synchronize the auto.conf).  If auto.conf does not exist, we can
generate all configuration files in the first configuration stage,
which will save the syncconfig in the build stage.

Please note this should be done only when auto.conf is missing.  If
*config blindly did this, time stamp files under include/config/ would
be unnecessarily touched, triggering unneeded rebuild of objects.

I assume a scenario like this:

 1. You have a source tree that has already been built
    with CONFIG_FOO disabled

 2. Run "make menuconfig" to enable CONFIG_FOO

 3. CONFIG_FOO turns out to be unnecessary.
    Run "make menuconfig" again to disable CONFIG_FOO

 4. Run "make"

In this case, include/config/foo.h should not be touched since there
is no change in CONFIG_FOO.  The sync process should be delayed until
the user really attempts to build the kernel.

This commit has another motivation; I want to suppress the 'No such
file or directory' warning from the 'include' directive.

The top-level Makefile includes auto.conf with '-include' directive,
like this:

  ifeq ($(dot-config),1)
  -include include/config/auto.conf
  endif

This looks strange because auto.conf is mandatory when dot-config is 1.
I guess only the reason of using '-include' is to suppress the warning
'include/config/auto.conf: No such file or directory' when building
from a clean tree.  However, this has a side-effect; Make considers
the files included by '-include' are optional.  Hence, Make continues
to build even if it fails to generate include/config/auto.conf.  I will
change this in the next commit, but the warning message is annoying.
(At least, kbuild test robot reports it as a regression.)

With this commit, Kconfig will generate all configuration files together
with the .config and I guess it is a solution good enough to suppress
the warning.

Note:
GNU Make 4.2 or later does not display the warning from the 'include'
directive if include files are successfully generated.  See GNU Make
commit 87a5f98d248f ("[SV 102] Don't show unnecessary include file
errors.")  However, older GNU Make versions are still widely used.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
2018-07-25 23:25:30 +09:00
..
lxdialog kconfig: drop localization support 2018-05-28 18:25:21 +09:00
tests kconfig: test: add Kconfig macro language tests 2018-05-29 03:31:19 +09:00
.gitignore kconfig: drop localization support 2018-05-28 18:25:21 +09:00
check-pkgconfig.sh kconfig: check for pkg-config on make {menu,n,g,x}config 2018-07-18 01:18:09 +09:00
conf.c kconfig: allow all config targets to write auto.conf if missing 2018-07-25 23:25:30 +09:00
confdata.c kconfig: allow all config targets to write auto.conf if missing 2018-07-25 23:25:30 +09:00
expr.c kconfig: make unmet dependency warnings readable 2018-03-26 02:04:06 +09:00
expr.h kconfig: rename SYMBOL_AUTO to SYMBOL_NO_WRITE 2018-07-18 01:18:09 +09:00
gconf-cfg.sh kconfig: refactor GTK+ package checks for building gconf 2018-05-28 18:25:21 +09:00
gconf.c kconfig: allow all config targets to write auto.conf if missing 2018-07-25 23:25:30 +09:00
gconf.glade scripts/kconfig/gconf.glade Update broken web addresses. 2010-09-17 16:54:42 +02:00
images.c
kconf_id.c kconfig: reference environment variables directly and remove 'option env=' 2018-05-29 03:28:58 +09:00
list.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
lkc_proto.h kconfig: allow all config targets to write auto.conf if missing 2018-07-25 23:25:30 +09:00
lkc.h kconfig: rename file_write_dep and move it to confdata.c 2018-07-25 23:25:28 +09:00
Makefile kconfig: create directories needed for syncconfig by itself 2018-07-25 23:25:30 +09:00
mconf-cfg.sh kconfig: refactor ncurses package checks for building mconf and nconf 2018-05-28 18:25:21 +09:00
mconf.c kconfig: allow all config targets to write auto.conf if missing 2018-07-25 23:25:30 +09:00
menu.c kconfig: rename SYMBOL_AUTO to SYMBOL_NO_WRITE 2018-07-18 01:18:09 +09:00
merge_config.sh kconfig/merge_config.sh: Accept a single file 2015-10-14 16:19:37 +02:00
nconf-cfg.sh kconfig: refactor ncurses package checks for building mconf and nconf 2018-05-28 18:25:21 +09:00
nconf.c kconfig: allow all config targets to write auto.conf if missing 2018-07-25 23:25:30 +09:00
nconf.gui.c kconfig: add xrealloc() helper 2018-02-10 11:26:04 +09:00
nconf.h kconfig: drop localization support 2018-05-28 18:25:21 +09:00
preprocess.c kconfig: loop boundary condition fix 2018-06-28 22:48:08 +09:00
qconf-cfg.sh kconfig: refactor Qt package checks for building qconf 2018-05-28 18:25:21 +09:00
qconf.cc kconfig: allow all config targets to write auto.conf if missing 2018-07-25 23:25:30 +09:00
qconf.h Port xconfig to Qt5 - Source format. 2015-10-14 14:59:03 +02:00
streamline_config.pl kconfig: fix localmodconfig 2018-06-11 09:16:30 +09:00
symbol.c kconfig: rename SYMBOL_AUTO to SYMBOL_NO_WRITE 2018-07-18 01:18:09 +09:00
util.c kconfig: rename file_write_dep and move it to confdata.c 2018-07-25 23:25:28 +09:00
zconf.l kconfig: expand lefthand side of assignment statement 2018-05-29 03:31:19 +09:00
zconf.y kconfig: rename SYMBOL_AUTO to SYMBOL_NO_WRITE 2018-07-18 01:18:09 +09:00