|
4 | 4 | > Each `## [<version>]` section is that release's notes. Entries are written in English |
5 | 5 | > from 2026.9.28.3 on; earlier entries remain as written. |
6 | 6 |
|
| 7 | +## [2026.10.1.2] - 2026-10-01 |
| 8 | + |
| 9 | +This release implements the design for a pack's build and a compile that does |
| 10 | +not depend on the member selection |
| 11 | +(`.agents/docs/2026-10-01-pack-drive-and-selection-independent-compile-design.md`), |
| 12 | +and resolves mcpp#751 and mcpp#753. A project that imports a module of a |
| 13 | +dependency, and every project on an ELF target, is compiled once more after the |
| 14 | +upgrade, because its commands change (both under **Changed**). |
| 15 | + |
| 16 | +### Fixed |
| 17 | + |
| 18 | +- **A unit is compiled by the same command in every selection of a |
| 19 | + workspace.** The selections of one configuration share a build directory, |
| 20 | + and three facts about the whole graph reached the commands of members they |
| 21 | + did not concern, so each switch between `--workspace` and `-p` recompiled |
| 22 | + them (mcpp#751; GalTranslPP 3.1.3 recompiled its core for 3m22s): |
| 23 | + - a module name that two members provide moved every BMI of that name below |
| 24 | + its provider's directory, and told the importers so, only when the graph |
| 25 | + held both providers; |
| 26 | + - a file that a member lists from outside its own directory was owned by the |
| 27 | + workspace's virtual root, whose object census depended on how many members |
| 28 | + listed it; |
| 29 | + - a member that builds a shared library put `-fPIC` on every unit of the |
| 30 | + graph. |
| 31 | + A command now depends on the unit's package, the packages it reaches, the |
| 32 | + features the selection activates for it and the declarations a selected |
| 33 | + member holds as the root, and on nothing else in the graph. `mcpp build |
| 34 | + --workspace` followed by `mcpp build -p <member>` compiles nothing, and so |
| 35 | + does any alternation of selections (e2e 872). |
| 36 | +- **`mcpp pack` states the build it performs.** Its build wrote no package |
| 37 | + line, no status row and no `Finished`, so a release job whose pack |
| 38 | + recompiled mcpp showed `Planning` for six minutes (mcpp#753). A pack is now |
| 39 | + stated as `mcpp build` states one, with `Finished` before the first `Packing` |
| 40 | + line and one `Finished` for a pack over several configurations; the second |
| 41 | + pass of a dispatched `--format` is stated in the same way (e2e 871). |
| 42 | +- **`[build] jobs` bounds every command that compiles.** `mcpp test` and |
| 43 | + `mcpp pack` ran ninja's default number of jobs whatever `[build] jobs`, |
| 44 | + `--jobs` or `MCPP_JOBS` said, which on a machine with little memory exceeded |
| 45 | + the bound the key exists to enforce. The backend reads the job count from |
| 46 | + the plan, and the reclaim of stale `bmi_schedule = "on"` tokens, which ran |
| 47 | + only under `mcpp build`, runs before the first drive of every build |
| 48 | + directory (e2e 871). |
| 49 | +- **A pack fills the global dependency cache** with the dependencies its |
| 50 | + build compiled, as `mcpp build` and `mcpp test` do. |
| 51 | + |
| 52 | +### Changed |
| 53 | + |
| 54 | +- **Every package's BMIs lie below the package's directory, except the root |
| 55 | + package's.** The rule is the one object files have followed since mcpp#233: |
| 56 | + `gcm.cache/<package>/<module>.gcm` (`pcm.cache` with clang). A unit that |
| 57 | + imports a module of another package reads one module map of the modules it |
| 58 | + reaches through its imports: a mapper file with GCC, and an argument file |
| 59 | + `@<build directory>/modmap/<package>-<hash>.modmap` of `-fmodule-file=` or |
| 60 | + `/reference` lines with clang or MSVC. A project whose modules are all its |
| 61 | + own is laid out, and every command spelled, as before. A package whose |
| 62 | + module name another package of the graph provides is served from the global |
| 63 | + dependency cache again; 2026.9.30.2 compiled it in the project. |
| 64 | +- **Every unit of an ELF target that is not freestanding is compiled with |
| 65 | + `-fPIC`,** whether or not the graph links a shared library, as rustc's |
| 66 | + default relocation model does on these targets: an object compiled once |
| 67 | + serves a program and a shared object. Mach-O compilers produce |
| 68 | + position-independent code by default, PE has no such flag, and nothing |
| 69 | + changes on those targets or on freestanding ones. The global dependency |
| 70 | + cache keys these entries by the flag, so each is compiled once more and |
| 71 | + then served again. |
| 72 | + |
7 | 73 | ## [2026.10.1.1] - 2026-10-01 |
8 | 74 |
|
9 | 75 | This release implements the plan for member selection, build programs prepared |
|
0 commit comments