|
| 1 | +-- picolibc as a SOURCE package: compiled with the consuming program's own flags. |
| 2 | +-- |
| 3 | +-- ⭐⭐ THERE IS NO MULTILIB HERE, AND THAT IS WHY IT IS A SOURCE PACKAGE. |
| 4 | +-- |
| 5 | +-- A prebuilt C library ships one build per ABI a target table can name — seven |
| 6 | +-- for Cortex-M alone — and every consumer then finds the right one through a |
| 7 | +-- `libdir` convention that must match the payload byte for byte. That |
| 8 | +-- convention is what #481 was filed about, and on ARM it cannot work at all: |
| 9 | +-- the key `<march>/<mabi>` does not separate the float ABI, because `mabi` |
| 10 | +-- there names the procedure call standard and is `aapcs` either way. |
| 11 | +-- |
| 12 | +-- Measured while building the prebuilt (`xim:picolibc-arm`, which remains |
| 13 | +-- published and is NOT the route): the seven profiles collapsed into five |
| 14 | +-- directories and the soft-float row received a library carrying |
| 15 | +-- `Tag_ABI_HardFP_use`. Nothing failed at build time. |
| 16 | +-- |
| 17 | +-- ⚠️ AND THE HEADERS WERE NEVER PER-PROFILE. Measured across those seven |
| 18 | +-- builds, the whole include tree — `picolibc.h` and `newlib.h`, which meson |
| 19 | +-- GENERATES, included — is byte-identical. The prebuilt ships seven copies of |
| 20 | +-- one directory. |
| 21 | +-- |
| 22 | +-- ⭐ Compiled with the SAME `compile_flags` as the program consuming it, ABI |
| 23 | +-- agreement holds by construction rather than by a naming convention, and the |
| 24 | +-- version lands in `mcpp.lock` rather than being pinned inside a target table. |
| 25 | +-- |
| 26 | +-- ⚠️ `picocrt` IS DELIBERATELY ABSENT. A startup object decides where execution |
| 27 | +-- begins and how it reaches the host — which board is running. Choosing among |
| 28 | +-- picolibc's nine variants is a board-support package's job; `cortex-m-rt` |
| 29 | +-- supplies its own, including the thread-pointer initialisation without which |
| 30 | +-- a `printf` program links cleanly, runs, prints nothing and hangs. |
| 31 | +package = { |
| 32 | + spec = "1", |
| 33 | + namespace = "mcpplibs", |
| 34 | + name = "picolibc", |
| 35 | + description = "picolibc as a source package: a freestanding C library compiled with the consuming program's own flags, so there is no multilib and no ABI convention to match", |
| 36 | + licenses = {"BSD-3-Clause", "BSD-2-Clause"}, |
| 37 | + repo = "https://github.com/mcpplibs/picolibc", |
| 38 | + type = "package", |
| 39 | + |
| 40 | + xpm = { |
| 41 | + linux = { |
| 42 | + ["1.8.12"] = { |
| 43 | + url = { |
| 44 | + GLOBAL = "https://github.com/mcpplibs/picolibc/archive/refs/tags/1.8.12.tar.gz", |
| 45 | + CN = "https://gitcode.com/mcpp-res/picolibc/releases/download/1.8.12/picolibc-1.8.12.tar.gz", |
| 46 | + }, |
| 47 | + sha256 = "8f3d7a41d9981905d389b321edbfa2fac4946e5acc3a0677617b8184b21d4420", |
| 48 | + }, |
| 49 | + }, |
| 50 | + macosx = { |
| 51 | + ["1.8.12"] = { |
| 52 | + url = { |
| 53 | + GLOBAL = "https://github.com/mcpplibs/picolibc/archive/refs/tags/1.8.12.tar.gz", |
| 54 | + CN = "https://gitcode.com/mcpp-res/picolibc/releases/download/1.8.12/picolibc-1.8.12.tar.gz", |
| 55 | + }, |
| 56 | + sha256 = "8f3d7a41d9981905d389b321edbfa2fac4946e5acc3a0677617b8184b21d4420", |
| 57 | + }, |
| 58 | + }, |
| 59 | + windows = { |
| 60 | + ["1.8.12"] = { |
| 61 | + url = { |
| 62 | + GLOBAL = "https://github.com/mcpplibs/picolibc/archive/refs/tags/1.8.12.tar.gz", |
| 63 | + CN = "https://gitcode.com/mcpp-res/picolibc/releases/download/1.8.12/picolibc-1.8.12.tar.gz", |
| 64 | + }, |
| 65 | + sha256 = "8f3d7a41d9981905d389b321edbfa2fac4946e5acc3a0677617b8184b21d4420", |
| 66 | + }, |
| 67 | + }, |
| 68 | + }, |
| 69 | + |
| 70 | + -- The package's own manifest, inside the tarball's wrap directory. |
| 71 | + mcpp = "*/mcpp.toml", |
| 72 | +} |
0 commit comments