Contents of /alx-src/tags/kernel26-2.6.12-alx-r9/Documentation/smart-config.txt
Parent Directory | Revision Log
Revision 630 -
(show annotations)
(download)
Wed Mar 4 11:03:09 2009 UTC (15 years, 3 months ago) by niro
File MIME type: text/plain
File size: 3220 byte(s)
Wed Mar 4 11:03:09 2009 UTC (15 years, 3 months ago) by niro
File MIME type: text/plain
File size: 3220 byte(s)
Tag kernel26-2.6.12-alx-r9
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 | mkdep.c no longer generates warning messages for missing or unneeded |
60 | <linux/config.h> lines. The new top-level target 'make checkconfig' |
61 | checks for these problems. |
62 | |
63 | Flag Dependencies |
64 | |
65 | Martin Von Loewis contributed another feature to this patch: |
66 | 'flag dependencies'. The idea is that a .o file depends on |
67 | the compilation flags used to build it. The file foo.o has |
68 | its flags stored in .flags.foo.o. |
69 | |
70 | Suppose the user changes the foo driver from resident to modular. |
71 | 'make' will notice that the current foo.o was not compiled with |
72 | -DMODULE and will recompile foo.c. |
73 | |
74 | All .o files made from C source have flag dependencies. So do .o |
75 | files made with ld, and .a files made with ar. However, .o files |
76 | made from assembly source do not have flag dependencies (nobody |
77 | needs this yet, but it would be good to fix). |
78 | |
79 | Per-source-file Flags |
80 | |
81 | Flag dependencies also work with per-source-file flags. |
82 | You can specify compilation flags for individual source files |
83 | like this: |
84 | |
85 | CFLAGS_foo.o = -DSPECIAL_FOO_DEFINE |
86 | |
87 | This helps clean up drivers/net/Makefile, drivers/scsi/Makefile, |
88 | and several other Makefiles. |
89 | |
90 | Credit |
91 | |
92 | Werner Almesberger had the original idea and wrote the first |
93 | version of this patch. |
94 | |
95 | Michael Chastain picked it up and continued development. He is |
96 | now the principal author and maintainer. Please report any bugs |
97 | to him. |
98 | |
99 | Martin von Loewis wrote flag dependencies, with some modifications |
100 | by Michael Chastain. |
101 | |
102 | Thanks to all of the beta testers. |