selfhost: migrate tool sources to directory packages
Build w6a and w6l from package-main directories and expose the wcc backend through a narrow package API so w6c and wwdump no longer import implementation files. Retarget the remaining load-bearing fixtures and example sources to directory packages; retain the one intentional flat compiler collision as an explicitly composed raw unit.
This commit is contained in:
56
Makefile
56
Makefile
@@ -173,12 +173,12 @@ $(OBJ)/w6l/%.o: cmd/w6l/%.c cmd/w6l/l.h | $(OBJ)/w6l
|
||||
# ---- ww-side wwdump (the frontend dump tool; oracle for 950/994) -------
|
||||
# Built via the user-facing ww driver. The frontend (lex, tok, ast,
|
||||
# parse, typ, sym) is the `syntax` package in lib/ww/syntax/; the
|
||||
# compiler-only bits (check, cgen*) stay in selfhost/cmd/wcc/. Output named wwdump_ww
|
||||
# to avoid colliding with the C-side wwdump in $(BIN).
|
||||
# compiler-only bits are the `wcc` directory package in selfhost/cmd/wcc/.
|
||||
# Output is named wwdump_ww to avoid colliding with the C-side wwdump.
|
||||
$(BIN)/wwdump_ww: selfhost/cmd/wwdump/main.ww \
|
||||
lib/ww/syntax/lex.ww lib/ww/syntax/tok.ww lib/ww/syntax/ast.ww \
|
||||
lib/ww/syntax/parse.ww lib/ww/syntax/expr.ww lib/ww/syntax/stmt.ww lib/ww/syntax/decl.ww lib/ww/syntax/typ.ww lib/ww/syntax/sym.ww \
|
||||
selfhost/cmd/wcc/check.ww \
|
||||
selfhost/cmd/wcc/api.ww selfhost/cmd/wcc/check.ww selfhost/cmd/wcc/wwi.ww \
|
||||
selfhost/cmd/wcc/cgen.ww selfhost/cmd/wcc/cgenexpr.ww \
|
||||
selfhost/cmd/wcc/cgenstmt.ww selfhost/cmd/wcc/cgenutil.ww \
|
||||
selfhost/cmd/wcc/cgendecl.ww \
|
||||
@@ -188,17 +188,18 @@ $(BIN)/wwdump_ww: selfhost/cmd/wwdump/main.ww \
|
||||
@mkdir -p $(WWBUILD)/wwdump_ww
|
||||
@$(CURDIR)/$(BIN)/ww build -w $(WWBUILD)/wwdump_ww \
|
||||
-o $(WWBUILD)/wwdump_ww/main \
|
||||
-I $(CURDIR)/lib/ww -I $(CURDIR)/selfhost/cmd/wcc \
|
||||
-I $(CURDIR)/lib/ww -I $(CURDIR)/selfhost/cmd \
|
||||
$(CURDIR)/selfhost/cmd/wwdump/main.ww
|
||||
@mv $(WWBUILD)/wwdump_ww/main $@
|
||||
|
||||
# ---- ww-side w6c (compiler port, exercised by 994_w6c_ww) -------------
|
||||
# Thin driver: parse + cgen. The frontend (lex/parse/ast/...) is the
|
||||
# `syntax` package in lib/ww/syntax/; cgen + check live in selfhost/cmd/wcc/.
|
||||
# `syntax` package in lib/ww/syntax/; cgen + check are behind the `wcc`
|
||||
# directory package in selfhost/cmd/wcc/.
|
||||
$(BIN)/w6c_ww: selfhost/cmd/w6c/main.ww \
|
||||
lib/ww/syntax/lex.ww lib/ww/syntax/tok.ww lib/ww/syntax/ast.ww \
|
||||
lib/ww/syntax/parse.ww lib/ww/syntax/expr.ww lib/ww/syntax/stmt.ww lib/ww/syntax/decl.ww lib/ww/syntax/typ.ww lib/ww/syntax/sym.ww \
|
||||
selfhost/cmd/wcc/check.ww selfhost/cmd/wcc/wwi.ww \
|
||||
selfhost/cmd/wcc/api.ww selfhost/cmd/wcc/check.ww selfhost/cmd/wcc/wwi.ww \
|
||||
selfhost/cmd/wcc/cgen.ww selfhost/cmd/wcc/cgenexpr.ww \
|
||||
selfhost/cmd/wcc/cgenstmt.ww selfhost/cmd/wcc/cgenutil.ww \
|
||||
selfhost/cmd/wcc/cgendecl.ww \
|
||||
@@ -208,13 +209,13 @@ $(BIN)/w6c_ww: selfhost/cmd/w6c/main.ww \
|
||||
@mkdir -p $(WWBUILD)/w6c_ww
|
||||
@$(CURDIR)/$(BIN)/ww build -w $(WWBUILD)/w6c_ww \
|
||||
-o $(WWBUILD)/w6c_ww/main \
|
||||
-I $(CURDIR)/lib/ww -I $(CURDIR)/selfhost/cmd/wcc \
|
||||
-I $(CURDIR)/lib/ww -I $(CURDIR)/selfhost/cmd \
|
||||
$(CURDIR)/selfhost/cmd/w6c/main.ww
|
||||
@mv $(WWBUILD)/w6c_ww/main $@
|
||||
|
||||
# ---- ww-side w6a (assembler port, exercised by 991_w6a_ww) ------------
|
||||
# Built like wwdump_ww. Needs -I selfhost/cmd/w6a for the local types/lex/
|
||||
# parse/asm/obj modules.
|
||||
# The whole directory is one executable package; helper source files are not
|
||||
# importable modules.
|
||||
$(BIN)/w6a_ww: selfhost/cmd/w6a/main.ww selfhost/cmd/w6a/opcodes.ww \
|
||||
selfhost/cmd/w6a/lex.ww selfhost/cmd/w6a/parse.ww \
|
||||
selfhost/cmd/w6a/asm.ww selfhost/cmd/w6a/obj.ww \
|
||||
@@ -226,13 +227,12 @@ $(BIN)/w6a_ww: selfhost/cmd/w6a/main.ww selfhost/cmd/w6a/opcodes.ww \
|
||||
@mkdir -p $(WWBUILD)/w6a_ww
|
||||
@$(CURDIR)/$(BIN)/ww build -w $(WWBUILD)/w6a_ww \
|
||||
-o $(WWBUILD)/w6a_ww/main \
|
||||
-I $(CURDIR)/selfhost/cmd/w6a \
|
||||
$(CURDIR)/selfhost/cmd/w6a/main.ww
|
||||
$(CURDIR)/selfhost/cmd/w6a
|
||||
@mv $(WWBUILD)/w6a_ww/main $@
|
||||
|
||||
# ---- ww-side w6l (linker port, exercised by 992_w6l_ww) ---------------
|
||||
# Built like 6a_ww. Needs -I selfhost/cmd/w6l for the local sym/obj/pass/
|
||||
# out modules.
|
||||
# The whole directory is one executable package; helper source files are not
|
||||
# importable modules.
|
||||
$(BIN)/w6l_ww: selfhost/cmd/w6l/main.ww selfhost/cmd/w6l/sym.ww \
|
||||
selfhost/cmd/w6l/obj.ww selfhost/cmd/w6l/dyn.ww \
|
||||
selfhost/cmd/w6l/pass.ww selfhost/cmd/w6l/dynout.ww \
|
||||
@@ -245,8 +245,7 @@ $(BIN)/w6l_ww: selfhost/cmd/w6l/main.ww selfhost/cmd/w6l/sym.ww \
|
||||
@mkdir -p $(WWBUILD)/w6l_ww
|
||||
@$(CURDIR)/$(BIN)/ww build -w $(WWBUILD)/w6l_ww \
|
||||
-o $(WWBUILD)/w6l_ww/main \
|
||||
-I $(CURDIR)/selfhost/cmd/w6l \
|
||||
$(CURDIR)/selfhost/cmd/w6l/main.ww
|
||||
$(CURDIR)/selfhost/cmd/w6l
|
||||
@mv $(WWBUILD)/w6l_ww/main $@
|
||||
|
||||
# ---- ww-side ww driver (exercised by 993_ww_ww) ------------------------
|
||||
@@ -794,19 +793,18 @@ test-incremental: $(BIN)/ww $(BIN)/ww_ww $(BIN)/w6c $(BIN)/w6c_ww \
|
||||
$(LIB)/libwwrt.a
|
||||
@rm -rf $(INCR_DIR)
|
||||
@set -e; \
|
||||
src=$(CURDIR)/selfhost/cmd/w6a/main.ww; \
|
||||
inc=$(CURDIR)/selfhost/cmd/w6a; \
|
||||
src=$(CURDIR)/selfhost/cmd/w6a; \
|
||||
for stage in cs ws; do \
|
||||
drv=$(CURDIR)/$(BIN)/ww; \
|
||||
if [ $$stage = ws ]; then drv=$(CURDIR)/$(BIN)/ww_ww; fi; \
|
||||
w=$(INCR_DIR)/$$stage.w; mkdir -p $$w; \
|
||||
$$drv build -w $$w -o $(INCR_DIR)/$$stage.cold -I $$inc $$src; \
|
||||
$$drv build -w $$w -o $(INCR_DIR)/$$stage.warm -I $$inc $$src; \
|
||||
$$drv build -w $$w -o $(INCR_DIR)/$$stage.cold $$src; \
|
||||
$$drv build -w $$w -o $(INCR_DIR)/$$stage.warm $$src; \
|
||||
rm $$w/strings.s $$w/strings.o $$w/strings.a; \
|
||||
$$drv build -w $$w -o $(INCR_DIR)/$$stage.surg -I $$inc $$src; \
|
||||
$$drv build -w $$w -o $(INCR_DIR)/$$stage.surg $$src; \
|
||||
: > $$w/bytes.o; \
|
||||
$$drv build -w $$w -o $(INCR_DIR)/$$stage.heal -I $$inc $$src; \
|
||||
(cd $(INCR_DIR) && $$drv build -o $$stage.clean -I $$inc $$src); \
|
||||
$$drv build -w $$w -o $(INCR_DIR)/$$stage.heal $$src; \
|
||||
(cd $(INCR_DIR) && $$drv build -o $$stage.clean $$src); \
|
||||
for v in cold warm surg heal; do \
|
||||
cmp $(INCR_DIR)/$$stage.$$v $(INCR_DIR)/$$stage.clean || { \
|
||||
echo "test-incremental: $$stage.$$v differs from clean" >&2; \
|
||||
@@ -863,7 +861,7 @@ clean:
|
||||
# fixed, not merely a coincidental two-stage equilibrium.
|
||||
BS = $(OUT)/bootstrap
|
||||
W6CSRC = selfhost/cmd/w6c/main.ww
|
||||
W6CINC = -I lib/ww -I selfhost/cmd/wcc
|
||||
W6CINC = -I lib/ww -I selfhost/cmd
|
||||
bootstrap: all
|
||||
@echo "=== stage 0 (Cstage): C-built tools ==="
|
||||
@echo " $(BIN)/ww (sep orchestrator) $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l"
|
||||
@@ -961,14 +959,12 @@ nocc:
|
||||
@# Pass -I $(CURDIR)/lib so `use os` etc. resolve to source.
|
||||
@cd $(NOCC_BIN) && ./ww build -o main \
|
||||
-I $(CURDIR)/lib/ww \
|
||||
-I $(CURDIR)/selfhost/cmd/wcc \
|
||||
-I $(CURDIR)/selfhost/cmd \
|
||||
-I $(CURDIR)/lib $(CURDIR)/selfhost/cmd/w6c/main.ww && mv main w6c_ww1
|
||||
@cd $(NOCC_BIN) && ./ww build -o main -I $(CURDIR)/selfhost/cmd/w6a \
|
||||
-I $(CURDIR)/selfhost/cmd/wcc -I $(CURDIR)/lib \
|
||||
$(CURDIR)/selfhost/cmd/w6a/main.ww && mv main w6a_ww1
|
||||
@cd $(NOCC_BIN) && ./ww build -o main -I $(CURDIR)/selfhost/cmd/w6l \
|
||||
-I $(CURDIR)/selfhost/cmd/wcc -I $(CURDIR)/lib \
|
||||
$(CURDIR)/selfhost/cmd/w6l/main.ww && mv main w6l_ww1
|
||||
@cd $(NOCC_BIN) && ./ww build -o main -I $(CURDIR)/lib \
|
||||
$(CURDIR)/selfhost/cmd/w6a && mv main w6a_ww1
|
||||
@cd $(NOCC_BIN) && ./ww build -o main -I $(CURDIR)/lib \
|
||||
$(CURDIR)/selfhost/cmd/w6l && mv main w6l_ww1
|
||||
@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
|
||||
@echo "=== fixed-point gates: rebuilt tools == stage-0 binaries? ==="
|
||||
|
||||
Reference in New Issue
Block a user