build: redirect selfhost-build sepwork scratch out of tree with -o main (#14)

The 9 Makefile recipes that build selfhost/cmd/<tool>/main.ww (5 primary
$(BIN)/*_ww + 4 nocc bootstrap) passed no -o, so the compiler's scratch
followed the SOURCE stem and left selfhost/cmd/<tool>/main.sepwork in the
tracked tree (the binary was mv'd out; the .sepwork dir stayed behind).

Each recipe already cd's into a gitignored out-of-tree dir before building,
so a uniform `-o main` makes the scratch follow the OUTPUT stem (cwd) out
of the source tree; the binary still lands at cwd `main` and the existing
`mv` lines are unchanged. Same intermediates-follow-output principle as the
T3 -o redirect (rule 14).

Carved from #8 by unanimous advisor ruling as its own bisect-clean commit.
make clean && make test: all 402 passed, zero in-repo .sepwork, zero /tmp
scratch.
This commit is contained in:
2026-06-22 23:41:24 +09:00
parent ce3a25a0b4
commit 81ebaf7bfa

View File

@@ -133,6 +133,7 @@ $(BIN)/wwdump_ww: selfhost/cmd/wwdump/main.ww \
$(LIB)/libwwrt.a | $(BIN) $(LIB)/libwwrt.a | $(BIN)
@mkdir -p $(BIN)/wwdump_ww.d @mkdir -p $(BIN)/wwdump_ww.d
cd $(BIN)/wwdump_ww.d && $(CURDIR)/$(BIN)/ww build \ cd $(BIN)/wwdump_ww.d && $(CURDIR)/$(BIN)/ww build \
-o main \
-I $(CURDIR)/lib/ww \ -I $(CURDIR)/lib/ww \
-I $(CURDIR)/selfhost/cmd/wcc \ -I $(CURDIR)/selfhost/cmd/wcc \
$(CURDIR)/selfhost/cmd/wwdump/main.ww $(CURDIR)/selfhost/cmd/wwdump/main.ww
@@ -153,6 +154,7 @@ $(BIN)/w6c_ww: selfhost/cmd/w6c/main.ww \
$(LIB)/libwwrt.a | $(BIN) $(LIB)/libwwrt.a | $(BIN)
@mkdir -p $(BIN)/w6c_ww.d @mkdir -p $(BIN)/w6c_ww.d
cd $(BIN)/w6c_ww.d && $(CURDIR)/$(BIN)/ww build \ cd $(BIN)/w6c_ww.d && $(CURDIR)/$(BIN)/ww build \
-o main \
-I $(CURDIR)/lib/ww \ -I $(CURDIR)/lib/ww \
-I $(CURDIR)/selfhost/cmd/wcc \ -I $(CURDIR)/selfhost/cmd/wcc \
$(CURDIR)/selfhost/cmd/w6c/main.ww $(CURDIR)/selfhost/cmd/w6c/main.ww
@@ -170,6 +172,7 @@ $(BIN)/w6a_ww: selfhost/cmd/w6a/main.ww selfhost/cmd/w6a/opcodes.ww \
$(LIB)/libwwrt.a | $(BIN) $(LIB)/libwwrt.a | $(BIN)
@mkdir -p $(BIN)/w6a_ww.d @mkdir -p $(BIN)/w6a_ww.d
cd $(BIN)/w6a_ww.d && $(CURDIR)/$(BIN)/ww build \ cd $(BIN)/w6a_ww.d && $(CURDIR)/$(BIN)/ww build \
-o main \
-I $(CURDIR)/selfhost/cmd/w6a \ -I $(CURDIR)/selfhost/cmd/w6a \
$(CURDIR)/selfhost/cmd/w6a/main.ww $(CURDIR)/selfhost/cmd/w6a/main.ww
mv $(BIN)/w6a_ww.d/main $@ mv $(BIN)/w6a_ww.d/main $@
@@ -187,6 +190,7 @@ $(BIN)/w6l_ww: selfhost/cmd/w6l/main.ww selfhost/cmd/w6l/sym.ww \
$(LIB)/libwwrt.a | $(BIN) $(LIB)/libwwrt.a | $(BIN)
@mkdir -p $(BIN)/w6l_ww.d @mkdir -p $(BIN)/w6l_ww.d
cd $(BIN)/w6l_ww.d && $(CURDIR)/$(BIN)/ww build \ cd $(BIN)/w6l_ww.d && $(CURDIR)/$(BIN)/ww build \
-o main \
-I $(CURDIR)/selfhost/cmd/w6l \ -I $(CURDIR)/selfhost/cmd/w6l \
$(CURDIR)/selfhost/cmd/w6l/main.ww $(CURDIR)/selfhost/cmd/w6l/main.ww
mv $(BIN)/w6l_ww.d/main $@ mv $(BIN)/w6l_ww.d/main $@
@@ -201,6 +205,7 @@ $(BIN)/ww_ww: selfhost/cmd/ww/main.ww lib/os/os.ww lib/rt/malloc.ww \
$(LIB)/libwwrt.a | $(BIN) $(LIB)/libwwrt.a | $(BIN)
@mkdir -p $(BIN)/ww_ww.d @mkdir -p $(BIN)/ww_ww.d
cd $(BIN)/ww_ww.d && $(CURDIR)/$(BIN)/ww build \ cd $(BIN)/ww_ww.d && $(CURDIR)/$(BIN)/ww build \
-o main \
$(CURDIR)/selfhost/cmd/ww/main.ww $(CURDIR)/selfhost/cmd/ww/main.ww
mv $(BIN)/ww_ww.d/main $@ mv $(BIN)/ww_ww.d/main $@
@@ -3503,17 +3508,17 @@ nocc:
@# The driver's default lib path is $self_dir/../../lib — under @# The driver's default lib path is $self_dir/../../lib — under
@# $(NOCC_BIN) that resolves to $(NOCC_OUT)/lib (libwwrt only). @# $(NOCC_BIN) that resolves to $(NOCC_OUT)/lib (libwwrt only).
@# Pass -I $(CURDIR)/lib so `use os` etc. resolve to source. @# Pass -I $(CURDIR)/lib so `use os` etc. resolve to source.
@cd $(NOCC_BIN) && ./ww build \ @cd $(NOCC_BIN) && ./ww build -o main \
-I $(CURDIR)/lib/ww \ -I $(CURDIR)/lib/ww \
-I $(CURDIR)/selfhost/cmd/wcc \ -I $(CURDIR)/selfhost/cmd/wcc \
-I $(CURDIR)/lib $(CURDIR)/selfhost/cmd/w6c/main.ww && mv main w6c_ww1 -I $(CURDIR)/lib $(CURDIR)/selfhost/cmd/w6c/main.ww && mv main w6c_ww1
@cd $(NOCC_BIN) && ./ww build -I $(CURDIR)/selfhost/cmd/w6a \ @cd $(NOCC_BIN) && ./ww build -o main -I $(CURDIR)/selfhost/cmd/w6a \
-I $(CURDIR)/selfhost/cmd/wcc -I $(CURDIR)/lib \ -I $(CURDIR)/selfhost/cmd/wcc -I $(CURDIR)/lib \
$(CURDIR)/selfhost/cmd/w6a/main.ww && mv main w6a_ww1 $(CURDIR)/selfhost/cmd/w6a/main.ww && mv main w6a_ww1
@cd $(NOCC_BIN) && ./ww build -I $(CURDIR)/selfhost/cmd/w6l \ @cd $(NOCC_BIN) && ./ww build -o main -I $(CURDIR)/selfhost/cmd/w6l \
-I $(CURDIR)/selfhost/cmd/wcc -I $(CURDIR)/lib \ -I $(CURDIR)/selfhost/cmd/wcc -I $(CURDIR)/lib \
$(CURDIR)/selfhost/cmd/w6l/main.ww && mv main w6l_ww1 $(CURDIR)/selfhost/cmd/w6l/main.ww && mv main w6l_ww1
@cd $(NOCC_BIN) && ./ww build -I $(CURDIR)/selfhost/cmd/wcc \ @cd $(NOCC_BIN) && ./ww build -o main -I $(CURDIR)/selfhost/cmd/wcc \
-I $(CURDIR)/lib $(CURDIR)/selfhost/cmd/ww/main.ww && mv main ww_ww1 -I $(CURDIR)/lib $(CURDIR)/selfhost/cmd/ww/main.ww && mv main ww_ww1
@echo "=== fixed-point gates: rebuilt tools == stage-0 binaries? ===" @echo "=== fixed-point gates: rebuilt tools == stage-0 binaries? ==="
@cmp $(NOCC_BIN)/w6c_ww1 $(STAGE0)/w6c && echo " w6c ✓" @cmp $(NOCC_BIN)/w6c_ww1 $(STAGE0)/w6c && echo " w6c ✓"