smart-config.txt
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

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