Smart CONFIG_* Dependencies
1 August 1999

Michael Chastain   <mec@shout.net>
Werner Almesberger <almesber@lrc.di.epfl.ch>
Martin von Loewis  <martin@mira.isdn.cs.tu-berlin.de>

Here is the problem:

    Suppose that drivers/net/foo.c has the following lines:

	#include <linux/config.h>

	...

	#ifdef CONFIG_FOO_AUTOFROB
	    /* Code for auto-frobbing */
	#else
	    /* Manual frobbing only */
	#endif

	...

	#ifdef CONFIG_FOO_MODEL_TWO
	    /* Code for model two */
	#endif

    Now suppose the user (the person building kernels) reconfigures the
    kernel to change some unrelated setting.  This will regenerate the
    file include/linux/autoconf.h, which will cause include/linux/config.h
    to be out of date, which will cause drivers/net/foo.c to be recompiled.

    Most kernel sources, perhaps 80% of them, have at least one CONFIG_*
    dependency somewhere.  So changing _any_ CONFIG_* setting requires
    almost _all_ of the kernel to be recompiled.

Here is the solution:

    We've made the dependency generator, mkdep.c, smarter.  Instead of
    generating this dependency:

	drivers/net/foo.c: include/linux/config.h

    It now generates these dependencies:

	drivers/net/foo.c: \
	    include/config/foo/autofrob.h \
	    include/config/foo/model/two.h

    So drivers/net/foo.c depends only on the CONFIG_* lines that
    it actually uses.

    A new program, split-include.c, runs at the beginning of
    compilation (make bzImage or make zImage).  split-include reads
    include/linux/autoconf.h and updates the include/config/ tree,
    writing one file per option.  It updates only the files for options
    that have changed.

    mkdep.c no longer generates warning messages for missing or unneeded
    <linux/config.h> lines.  The new top-level target 'make checkconfig'
    checks for these problems.

Flag Dependencies

    Martin Von Loewis contributed another feature to this patch:
    'flag dependencies'.  The idea is that a .o file depends on
    the compilation flags used to build it.  The file foo.o has
    its flags stored in .flags.foo.o.

    Suppose the user changes the foo driver from resident to modular.
    'make' will notice that the current foo.o was not compiled with
    -DMODULE and will recompile foo.c.

    All .o files made from C source have flag dependencies.  So do .o
    files made with ld, and .a files made with ar.  However, .o files
    made from assembly source do not have flag dependencies (nobody
    needs this yet, but it would be good to fix).

Per-source-file Flags

    Flag dependencies also work with per-source-file flags.
    You can specify compilation flags for individual source files
    like this:

	CFLAGS_foo.o = -DSPECIAL_FOO_DEFINE

    This helps clean up drivers/net/Makefile, drivers/scsi/Makefile,
    and several other Makefiles.

Credit

    Werner Almesberger had the original idea and wrote the first
    version of this patch.
    
    Michael Chastain picked it up and continued development.  He is
    now the principal author and maintainer.  Please report any bugs
    to him.

    Martin von Loewis wrote flag dependencies, with some modifications
    by Michael Chastain.

    Thanks to all of the beta testers.
