build: the two map files are one grouped target, so their sub-make runs once (#185)

kernel/Makefile gave capsules/v4/sys/map-64.f18 and map-32.f18 one rule with
two plain targets -- in GNU make, two rules sharing a recipe. Under -j both
ran at once: two make -C v4 sysmap built and ran the same v4/build/mkmap-<w>
side by side (Build run 255's RASPI job: "mkmap-32: Permission denied").
Now one grouped target (&:, GNU make 4.3+, as here and in the CI image).

Seen to fail first: the two targets with -j8, mkmap removed each time, 12
runs -- 6 failed ("Text file busy", "Permission denied"). After: 0 of 12.
Both sets of runs in logs/20261112-152711/race-185/. The map files are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017RzZgrf7V7Zk2iczBXDRbm
This commit is contained in:
Claude
2026-11-12 15:27:11 +00:00
parent c642af541b
commit d783fd11c3
3 changed files with 10 additions and 1 deletions
+4 -1
View File
@@ -913,7 +913,10 @@ $(V4_ROM_C) $(V4_MAP_C) &: FORCE
# the same description as the ROM and v4_map_image (v4/tests/host_map.h), and
# the ROM assembles it from this kernel's capsule directory: it is made
# again before the directory is packed, so the three always agree.
$(CAPSULES_DIR)/v4/sys/map-64.f18 $(CAPSULES_DIR)/v4/sys/map-32.f18: FORCE
# One rule making both (&:, a grouped target, GNU make 4.3+): with two plain targets make ran the
# recipe once for each, and under -j the two sub-makes built and ran the same v4/build/mkmap-<w>
# at once -- "Text file busy", "Permission denied" (#185).
$(CAPSULES_DIR)/v4/sys/map-64.f18 $(CAPSULES_DIR)/v4/sys/map-32.f18 &: FORCE
@$(MAKE) --no-print-directory -C v4 CC=cc sysmap
$(LOADER_OBJ_DIR)/v4engine/v4_rom.o: $(V4_ROM_C) | $(LOADER_OBJ_DIR)
Binary file not shown.
Binary file not shown.