OpenCores
URL https://opencores.org/ocsvn/or1k_soc_on_altera_embedded_dev_kit/or1k_soc_on_altera_embedded_dev_kit/trunk

Subversion Repositories or1k_soc_on_altera_embedded_dev_kit

[/] [or1k_soc_on_altera_embedded_dev_kit/] [tags/] [linux-2.6/] [linux-2.6.24_orig/] [Documentation/] [smart-config.txt] - Blame information for rev 5

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 xianfeng
Smart CONFIG_* Dependencies
2
1 August 1999
3
 
4
Michael Chastain   
5
Werner Almesberger 
6
Martin von Loewis  
7
 
8
Here is the problem:
9
 
10
    Suppose that drivers/net/foo.c has the following lines:
11
 
12
        #include 
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.

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.