make: wire test-run into make test (pre-push reject gate)
test-run drives runww.ww over the test/wcc/data/*/case.ww behavior and //ww:error cases, but was not a prerequisite of any aggregate, so the reject surface was ungated. With runww's arm now dual-stage, gate it. Added to the pre-push `test` target only -- not test-unit, not the test-commit content-key tier. runww execve's its children with nil envp, so a WW_PKGCACHE override cannot reach them; they fall back to the default out/.pkgcache that $(TESTS) and the byte-id gates also use. A normal prereq would let make -j overlap test-run with those writers, so test-run carries an order-only prereq (| $(TESTS) test-lang test-lang-byteid) and is scheduled strictly after every default-cache writer. No cache isolation is added: it would be inert under nil envp, and the ordering prevents the race. True per-run cache isolation stays blocked on an os envp() forwarder.
This commit is contained in:
22
Makefile
22
Makefile
@@ -3256,7 +3256,7 @@ sizelint:
|
|||||||
peellint:
|
peellint:
|
||||||
@sh tools/peellint
|
@sh tools/peellint
|
||||||
|
|
||||||
test: all sizelint peellint $(TESTS) test-lang test-lang-byteid
|
test: all sizelint peellint $(TESTS) test-lang test-lang-byteid test-run
|
||||||
@WW=$(BIN)/ww BIN=$(BIN) sh test/run
|
@WW=$(BIN)/ww BIN=$(BIN) sh test/run
|
||||||
|
|
||||||
test-unit: all sizelint peellint $(TESTS)
|
test-unit: all sizelint peellint $(TESTS)
|
||||||
@@ -3264,12 +3264,22 @@ test-unit: all sizelint peellint $(TESTS)
|
|||||||
|
|
||||||
# ---- test-run: ww-native behavior harness (fold 2) ---------------------
|
# ---- test-run: ww-native behavior harness (fold 2) ---------------------
|
||||||
# Drives test/runww.ww over every test/wcc/data/<name>/case.ww, building
|
# Drives test/runww.ww over every test/wcc/data/<name>/case.ww, building
|
||||||
# and running each case through the cstage `ww` driver (T1) and checking
|
# and running each case through the cstage `ww` driver (T1, plus the ERROR
|
||||||
# its leading `//ww:` directive. The harness prints `runww: all ok` and exits
|
# arm's wwstage w6c_ww leg) and checking its leading `//ww:` directive. The
|
||||||
# 0 only if every case passes; the target propagates that exit code. NOT
|
# harness prints `runww: all ok` and exits 0 only if every case passes; the
|
||||||
# yet wired into `make test` (fold 6). See test/runww.ww header.
|
# target propagates that exit code. Wired into `make test` (pre-push only).
|
||||||
|
#
|
||||||
|
# runww execve's its child `ww`/`w6c_ww` with a NIL envp, so a WW_PKGCACHE=
|
||||||
|
# override can't reach them — the children write the DEFAULT out/.pkgcache,
|
||||||
|
# the same cache the recipe's $(TESTS)/byte-id gates use. The order-only
|
||||||
|
# prereqs (after `|`) force `make test -j` to schedule test-run strictly
|
||||||
|
# LAST among the prereqs, so it cannot run concurrently with any default-
|
||||||
|
# cache writer (`all`'s selfhost builds are already ordered via the normal
|
||||||
|
# `all` prereq; test-lang/test-lang-byteid use isolated caches, but ordering
|
||||||
|
# after them is belt-and-suspenders). The recipe's 990-997/pkgcache default-
|
||||||
|
# cache tests run only after ALL prereqs complete, so no overlap there.
|
||||||
RUNWW_CASES = $(wildcard test/wcc/data/*/case.ww)
|
RUNWW_CASES = $(wildcard test/wcc/data/*/case.ww)
|
||||||
test-run: all
|
test-run: all | $(TESTS) test-lang test-lang-byteid
|
||||||
@BIN=$(BIN) $(BIN)/ww run test/runww.ww $(RUNWW_CASES)
|
@BIN=$(BIN) $(BIN)/ww run test/runww.ww $(RUNWW_CASES)
|
||||||
|
|
||||||
# ---- test-lang: in-language @test behavior corpus (fold 2) -------------
|
# ---- test-lang: in-language @test behavior corpus (fold 2) -------------
|
||||||
|
|||||||
Reference in New Issue
Block a user