| 142 | | The first thing to understand is that the source tree is built in two |
| 143 | | passes. First {{{make boot}}} builds dependencies and any other tools |
| 144 | | required as part of the build itself. For example, |
| 145 | | {{{utils/genprimopcode}}} is built as part of {{{make boot}}}, because it is |
| 146 | | required to preprocess {{{compiler/prelude/primops.txt.pp}}}. |
| 147 | | |
| 148 | | After {{{make boot}}}, {{{make}}} will build everything. |
| 149 | | |
| 150 | | If you say {{{make}}} from the very top-level, the build system will |
| 151 | | arrange to do the appropriate 'make boot' steps for you. If you just |
| 152 | | want to build in a subdirectory (eg. ghc), you have to do {{{make boot}}} |
| 153 | | yourself. You don't need to {{{make boot}}} after every single change, |
| 154 | | but you might want to do it to update dependencies, for example. |
| 155 | | |
| | 142 | The first thing to understand is that in general each part of the source |
| | 143 | tree may be built in two passes. First `make boot` does any configuring |
| | 144 | necessary, and then `make` will actually build everything. |
| | 145 | |
| | 146 | If you say `make` from the very top-level, the build system will |
| | 147 | arrange to do the appropriate `make boot` steps for you. If you just |
| | 148 | want to build in a subdirectory (eg. `compiler`), you have to do |
| | 149 | `make boot` yourself. You don't need to `make boot` after every single |
| | 150 | change, but you might need to do it after changing modules imports, |
| | 151 | for example, so that the module dependency graph can be recalculated. |