The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/Documentation/smart-config.txt

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 Smart CONFIG_* Dependencies
    2 1 August 1999
    3 
    4 Michael Chastain   <mec@shout.net>
    5 Werner Almesberger <almesber@lrc.di.epfl.ch>
    6 Martin von Loewis  <martin@mira.isdn.cs.tu-berlin.de>
    7 
    8 Here is the problem:
    9 
   10     Suppose that drivers/net/foo.c has the following lines:
   11 
   12         #include <linux/config.h>
   13 
   14         ...
   15 
   16         #ifdef CONFIG_FOO_AUTOFROB
   17             /* Code for auto-frobbing */
   18         #else
   19             /* Manual frobbing only */
   20         #endif
   21 
   22         ...
   23 
   24         #ifdef CONFIG_FOO_MODEL_TWO
   25             /* Code for model two */
   26         #endif
   27 
   28     Now suppose the user (the person building kernels) reconfigures the
   29     kernel to change some unrelated setting.  This will regenerate the
   30     file include/linux/autoconf.h, which will cause include/linux/config.h
   31     to be out of date, which will cause drivers/net/foo.c to be recompiled.
   32 
   33     Most kernel sources, perhaps 80% of them, have at least one CONFIG_*
   34     dependency somewhere.  So changing _any_ CONFIG_* setting requires
   35     almost _all_ of the kernel to be recompiled.
   36 
   37 Here is the solution:
   38 
   39     We've made the dependency generator, mkdep.c, smarter.  Instead of
   40     generating this dependency:
   41 
   42         drivers/net/foo.c: include/linux/config.h
   43 
   44     It now generates these dependencies:
   45 
   46         drivers/net/foo.c: \
   47             include/config/foo/autofrob.h \
   48             include/config/foo/model/two.h
   49 
   50     So drivers/net/foo.c depends only on the CONFIG_* lines that
   51     it actually uses.
   52 
   53     A new program, split-include.c, runs at the beginning of
   54     compilation (make bzImage or make zImage).  split-include reads
   55     include/linux/autoconf.h and updates the include/config/ tree,
   56     writing one file per option.  It updates only the files for options
   57     that have changed.
   58 
   59 Flag Dependencies
   60 
   61     Martin Von Loewis contributed another feature to this patch:
   62     'flag dependencies'.  The idea is that a .o file depends on
   63     the compilation flags used to build it.  The file foo.o has
   64     its flags stored in .flags.foo.o.
   65 
   66     Suppose the user changes the foo driver from resident to modular.
   67     'make' will notice that the current foo.o was not compiled with
   68     -DMODULE and will recompile foo.c.
   69 
   70     All .o files made from C source have flag dependencies.  So do .o
   71     files made with ld, and .a files made with ar.  However, .o files
   72     made from assembly source do not have flag dependencies (nobody
   73     needs this yet, but it would be good to fix).
   74 
   75 Per-source-file Flags
   76 
   77     Flag dependencies also work with per-source-file flags.
   78     You can specify compilation flags for individual source files
   79     like this:
   80 
   81         CFLAGS_foo.o = -DSPECIAL_FOO_DEFINE
   82 
   83     This helps clean up drivers/net/Makefile, drivers/scsi/Makefile,
   84     and several other Makefiles.
   85 
   86 Credit
   87 
   88     Werner Almesberger had the original idea and wrote the first
   89     version of this patch.
   90     
   91     Michael Chastain picked it up and continued development.  He is
   92     now the principal author and maintainer.  Please report any bugs
   93     to him.
   94 
   95     Martin von Loewis wrote flag dependencies, with some modifications
   96     by Michael Chastain.
   97 
   98     Thanks to all of the beta testers.

Cache object: fa47eb1be01d50451cdf2e8fe5f98005


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.