cookbook: make every staging path collision-free; restore the native toolchain

Concurrency
-----------
Package variants of one recipe (llvm-native, llvm-native.dev,
llvm-native.runtime) share a single target/<triple>/ directory and are
cooked concurrently by the cook_jobs thread pool, but every staging path
under it had a fixed name -- stage.tmp and sysroot.tmp. The variants
therefore raced: one renamed or removed the shared directory while a
sibling was still writing into it.

  Canonicalize stage dir failed at '.../stage.tmp': No such file or directory
  Renaming failed from '.../sysroot.tmp' to '.../sysroot': File exists

llvm-native cooks clean on its own -- verified, zero errors, all three
variants published -- but failed in every parallel build for this
reason. It was never a compile error, which is what the earlier
'C++/pthread header gaps' note in the config misattributed.

Both stage.tmp sites and the sysroot site now go through one
unique_tmp_dir() helper. A pid alone cannot disambiguate (the pool is
threads in one process), so a process-wide counter supplies uniqueness.

Config
------
Restore gcc-native, llvm-native and rust-native to redbear-full.
gcc-native was set to "ignore" and the other two were commented out as
'not needed for greeter proof'. Both forms are forbidden by AGENTS.md
ABSOLUTE RULE -- NEVER DELETE, NEVER IGNORE, NEVER COMMENT OUT, and by
local/AGENTS.md 'No build-excluded until ported packages': a package
that does not build gets ported, not excluded. llvm-native is required,
not optional -- it supplies the host LLVM dev tree that libclc and
Mesa's iris/radeonsi CLC path need.
This commit is contained in:
2026-08-03 14:53:39 +03:00
parent 2f6e2d2b58
commit 4fac89eec4
2 changed files with 46 additions and 11 deletions
+9 -3
View File
@@ -262,10 +262,16 @@ redbear-meta = {}
redbear-power = {}
# Native build toolchain (Phase 3: GCC + binutils running on redox)
gcc-native = "ignore"
# All four are first-class members of this target. gcc-native was set to
# "ignore" and llvm-native/rust-native were commented out as "not needed for
# greeter proof"; both forms are forbidden by AGENTS.md § ABSOLUTE RULE —
# NEVER DELETE, NEVER IGNORE, NEVER COMMENT OUT and by local/AGENTS.md
# § "No 'build-excluded until ported' packages". A package that does not build
# gets ported, not excluded.
gcc-native = {}
binutils-native = {}
# llvm-native = {} # suppressed: Redox C++/pthread header gaps; not needed for greeter proof
# rust-native = {} # suppressed: depends on llvm-native; not needed for greeter proof
llvm-native = {}
rust-native = {}
# Desktop fonts and icons
dejavu = {}