3001 lines
126 KiB
Makefile
3001 lines
126 KiB
Makefile
# ww — Plan 9-organised toolchain. POSIX make.
|
|
#
|
|
# Build a small static frontend library libwcc.a and the user-facing
|
|
# driver `ww`. Per-target tools (w6c, w6a, w6l) and the runtime are added
|
|
# in their own phases. Everything lands under out/.
|
|
|
|
PREFIX ?= /usr/local
|
|
CC ?= cc
|
|
AR ?= ar
|
|
|
|
# Parallelise the build by default. The C-compile DAG and the five
|
|
# wwstage builds write disjoint outputs (each .o is distinct; each
|
|
# wwstage tool's side files land at its own selfhost/cmd/<tool>/main.*
|
|
# stem), so -j is order-independent. test/run's Phase-2 byte-id gates
|
|
# (950/990-997) are a single serial recipe — MAKEFLAGS -j does not
|
|
# reach inside them. Override with `make -j1` if needed.
|
|
NPROC ?= $(shell nproc 2>/dev/null || echo 4)
|
|
MAKEFLAGS += -j$(NPROC)
|
|
|
|
# Wrap the C compiler with ccache when present — content-addressed, so
|
|
# byte-identical to plain cc; just skips recompiling unchanged TUs.
|
|
# Falls back cleanly to bare $(CC) when ccache is absent. A command-line
|
|
# CC= override wins and is left unwrapped.
|
|
CC := $(shell command -v ccache >/dev/null 2>&1 && echo "ccache $(CC)" || echo "$(CC)")
|
|
CFLAGS ?= -O0 -g -Wall -Wextra -Wpedantic -Wno-unused-parameter
|
|
CFLAGS += -std=c99 -fno-strict-aliasing -D_POSIX_C_SOURCE=200809L
|
|
INCS = -Icmd/wcc
|
|
|
|
OUT = out
|
|
BIN = $(OUT)/bin
|
|
LIB = $(OUT)/lib
|
|
OBJ = $(OUT)/obj
|
|
|
|
WCC_SRC = cmd/wcc/mem.c cmd/wcc/err.c cmd/wcc/tok.c cmd/wcc/lex.c \
|
|
cmd/wcc/ast.c cmd/wcc/parse.c cmd/wcc/sym.c cmd/wcc/type.c \
|
|
cmd/wcc/check.c
|
|
WCC_OBJ = $(WCC_SRC:cmd/wcc/%.c=$(OBJ)/wcc/%.o)
|
|
|
|
WW_SRC = cmd/ww/main.c
|
|
WW_OBJ = $(WW_SRC:cmd/ww/%.c=$(OBJ)/ww/%.o)
|
|
|
|
WD_SRC = cmd/wwdump/main.c
|
|
WD_OBJ = $(WD_SRC:cmd/wwdump/%.c=$(OBJ)/wwdump/%.o)
|
|
|
|
W6C_SRC = cmd/w6c/main.c cmd/w6c/cgen.c cmd/w6c/txt.c cmd/w6c/swt.c \
|
|
cmd/w6c/peep.c cmd/w6c/reg.c cmd/w6c/wwi.c
|
|
W6C_OBJ = $(W6C_SRC:cmd/w6c/%.c=$(OBJ)/w6c/%.o)
|
|
|
|
W6A_SRC = cmd/w6a/main.c cmd/w6a/lex.c cmd/w6a/parse.c cmd/w6a/asm.c cmd/w6a/obj.c
|
|
W6A_OBJ = $(W6A_SRC:cmd/w6a/%.c=$(OBJ)/w6a/%.o)
|
|
|
|
W6L_SRC = cmd/w6l/main.c cmd/w6l/obj.c cmd/w6l/sym.c cmd/w6l/pass.c cmd/w6l/out.c \
|
|
cmd/w6l/dyn.c cmd/w6l/dynout.c
|
|
W6L_OBJ = $(W6L_SRC:cmd/w6l/%.c=$(OBJ)/w6l/%.o)
|
|
|
|
RT_S = rt/start.s rt/syscall.s rt/alloc.s rt/streq.s rt/abort.s
|
|
RT_WW = rt/ensure.ww rt/malloc.ww
|
|
RT_OBJ = $(RT_S:rt/%.s=$(OBJ)/rt/%.o) $(RT_WW:rt/%.ww=$(OBJ)/rt/%.o)
|
|
|
|
# Cstage: one-time C bootstrap (see BOOTSTRAP.md). Built by `cc`.
|
|
# Goes away at v1.0, replaced by a checked-in stage-0 binary.
|
|
CSTAGE_BINS = $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l $(BIN)/wwdump
|
|
|
|
# Wwstage: ww-rewritten toolchain. Built by Cstage today; will be the
|
|
# only toolchain after Phase 10 closeout. Byte-identical to Cstage
|
|
# (tests 990-994).
|
|
WWSTAGE_BINS = $(BIN)/wwdump_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww $(BIN)/ww_ww
|
|
|
|
BINS = $(CSTAGE_BINS) $(WWSTAGE_BINS)
|
|
LIBS = $(LIB)/libwcc.a $(LIB)/libwwrt.a
|
|
|
|
all: cstage wwstage
|
|
|
|
cstage: $(CSTAGE_BINS) $(LIBS)
|
|
wwstage: $(WWSTAGE_BINS)
|
|
|
|
# ---- libwcc.a ----------------------------------------------------------
|
|
$(LIB)/libwcc.a: $(WCC_OBJ) | $(LIB)
|
|
$(AR) rcs $@ $(WCC_OBJ)
|
|
|
|
$(OBJ)/wcc/%.o: cmd/wcc/%.c cmd/wcc/ww.h | $(OBJ)/wcc
|
|
$(CC) $(CFLAGS) $(INCS) -c -o $@ $<
|
|
|
|
# ---- ww driver ---------------------------------------------------------
|
|
$(BIN)/ww: $(WW_OBJ) $(LIB)/libwcc.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $(WW_OBJ) -L$(LIB) -lwcc
|
|
|
|
$(OBJ)/ww/%.o: cmd/ww/%.c cmd/wcc/ww.h | $(OBJ)/ww
|
|
$(CC) $(CFLAGS) $(INCS) -c -o $@ $<
|
|
|
|
# ---- wwdump (lex/AST diff anchor) --------------------------------------
|
|
$(BIN)/wwdump: $(WD_OBJ) $(LIB)/libwcc.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $(WD_OBJ) -L$(LIB) -lwcc
|
|
|
|
$(OBJ)/wwdump/%.o: cmd/wwdump/%.c cmd/wcc/ww.h | $(OBJ)/wwdump
|
|
$(CC) $(CFLAGS) $(INCS) -c -o $@ $<
|
|
|
|
# ---- w6c amd64 compiler ------------------------------------------------
|
|
$(BIN)/w6c: $(W6C_OBJ) $(LIB)/libwcc.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $(W6C_OBJ) -L$(LIB) -lwcc
|
|
|
|
$(OBJ)/w6c/%.o: cmd/w6c/%.c cmd/w6c/gc.h cmd/w6c/6.out.h cmd/wcc/ww.h | $(OBJ)/w6c
|
|
$(CC) $(CFLAGS) $(INCS) -Icmd/w6c -c -o $@ $<
|
|
|
|
# ---- w6a amd64 assembler -----------------------------------------------
|
|
$(BIN)/w6a: $(W6A_OBJ) | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $(W6A_OBJ)
|
|
|
|
$(OBJ)/w6a/%.o: cmd/w6a/%.c cmd/w6a/a.h cmd/w6c/6.out.h | $(OBJ)/w6a
|
|
$(CC) $(CFLAGS) -Icmd/w6a -Icmd/w6c -c -o $@ $<
|
|
|
|
# ---- w6l amd64 linker --------------------------------------------------
|
|
$(BIN)/w6l: $(W6L_OBJ) | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $(W6L_OBJ)
|
|
|
|
$(OBJ)/w6l/%.o: cmd/w6l/%.c cmd/w6l/l.h | $(OBJ)/w6l
|
|
$(CC) $(CFLAGS) -Icmd/w6l -c -o $@ $<
|
|
|
|
# ---- ww-side wwdump (the lexer port, exercised by 990_selfhost) --------
|
|
# 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).
|
|
$(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/cgen.ww selfhost/cmd/wcc/cgenexpr.ww \
|
|
selfhost/cmd/wcc/cgenstmt.ww selfhost/cmd/wcc/cgenutil.ww \
|
|
selfhost/cmd/wcc/cgendecl.ww \
|
|
lib/os/os.ww lib/rt/malloc.ww lib/time/time.ww lib/strconv/strconv.ww lib/strconv/stof_data.ww lib/strconv/decimal.ww lib/strconv/stof.ww lib/strconv/ftos_data.ww lib/strconv/ftos.ww lib/strings/strings.ww lib/bytes/bytes.ww lib/encoding/utf8/utf8.ww lib/ascii/ascii.ww lib/errors/errors.ww lib/io/io.ww lib/io/stream.ww lib/io/types.ww lib/memio/memio.ww lib/fmt/fmt.ww \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
@mkdir -p $(BIN)/wwdump_ww.d
|
|
cd $(BIN)/wwdump_ww.d && $(CURDIR)/$(BIN)/ww build \
|
|
-o main \
|
|
-I $(CURDIR)/lib/ww \
|
|
-I $(CURDIR)/selfhost/cmd/wcc \
|
|
$(CURDIR)/selfhost/cmd/wwdump/main.ww
|
|
mv $(BIN)/wwdump_ww.d/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/.
|
|
$(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/cgen.ww selfhost/cmd/wcc/cgenexpr.ww \
|
|
selfhost/cmd/wcc/cgenstmt.ww selfhost/cmd/wcc/cgenutil.ww \
|
|
selfhost/cmd/wcc/cgendecl.ww \
|
|
lib/os/os.ww lib/rt/malloc.ww lib/time/time.ww lib/strconv/strconv.ww lib/strconv/stof_data.ww lib/strconv/decimal.ww lib/strconv/stof.ww lib/strconv/ftos_data.ww lib/strconv/ftos.ww lib/strings/strings.ww lib/bytes/bytes.ww lib/encoding/utf8/utf8.ww lib/ascii/ascii.ww lib/errors/errors.ww lib/io/io.ww lib/io/stream.ww lib/io/types.ww lib/memio/memio.ww lib/fmt/fmt.ww \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
@mkdir -p $(BIN)/w6c_ww.d
|
|
cd $(BIN)/w6c_ww.d && $(CURDIR)/$(BIN)/ww build \
|
|
-o main \
|
|
-I $(CURDIR)/lib/ww \
|
|
-I $(CURDIR)/selfhost/cmd/wcc \
|
|
$(CURDIR)/selfhost/cmd/w6c/main.ww
|
|
mv $(BIN)/w6c_ww.d/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.
|
|
$(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 \
|
|
lib/os/os.ww lib/rt/malloc.ww lib/time/time.ww \
|
|
lib/strings/strings.ww lib/bytes/bytes.ww lib/encoding/utf8/utf8.ww \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
@mkdir -p $(BIN)/w6a_ww.d
|
|
cd $(BIN)/w6a_ww.d && $(CURDIR)/$(BIN)/ww build \
|
|
-o main \
|
|
-I $(CURDIR)/selfhost/cmd/w6a \
|
|
$(CURDIR)/selfhost/cmd/w6a/main.ww
|
|
mv $(BIN)/w6a_ww.d/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.
|
|
$(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 \
|
|
selfhost/cmd/w6l/out.ww \
|
|
lib/os/os.ww lib/rt/malloc.ww lib/time/time.ww \
|
|
lib/strings/strings.ww lib/bytes/bytes.ww lib/encoding/utf8/utf8.ww \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
@mkdir -p $(BIN)/w6l_ww.d
|
|
cd $(BIN)/w6l_ww.d && $(CURDIR)/$(BIN)/ww build \
|
|
-o main \
|
|
-I $(CURDIR)/selfhost/cmd/w6l \
|
|
$(CURDIR)/selfhost/cmd/w6l/main.ww
|
|
mv $(BIN)/w6l_ww.d/main $@
|
|
|
|
# ---- ww-side ww driver (exercised by 993_ww_ww) ------------------------
|
|
# The driver pulls in lib/os (default search path) and orchestrates
|
|
# w6c/w6a/w6l like the C driver.
|
|
$(BIN)/ww_ww: selfhost/cmd/ww/main.ww lib/os/os.ww lib/rt/malloc.ww \
|
|
lib/time/time.ww lib/strconv/strconv.ww \
|
|
lib/strings/strings.ww lib/bytes/bytes.ww lib/encoding/utf8/utf8.ww \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
@mkdir -p $(BIN)/ww_ww.d
|
|
cd $(BIN)/ww_ww.d && $(CURDIR)/$(BIN)/ww build \
|
|
-o main \
|
|
$(CURDIR)/selfhost/cmd/ww/main.ww
|
|
mv $(BIN)/ww_ww.d/main $@
|
|
|
|
# ---- runtime (libwwrt.a, assembled by our own w6a) ---------------------
|
|
$(OBJ)/rt/%.o: rt/%.s $(BIN)/w6a | $(OBJ)/rt
|
|
$(BIN)/w6a -o $@ $<
|
|
|
|
# ww-side runtime helpers (rt/*.ww): compile via w6c to .s, then w6a.
|
|
# Each .ww module is standalone — uses @symbol FFI for rt_alloc/rt_free
|
|
# rather than `use os;` so no bundling is required.
|
|
$(OBJ)/rt/%.s: rt/%.ww $(BIN)/w6c | $(OBJ)/rt
|
|
$(BIN)/w6c $< > $@
|
|
$(OBJ)/rt/%.o: $(OBJ)/rt/%.s $(BIN)/w6a | $(OBJ)/rt
|
|
$(BIN)/w6a -o $@ $<
|
|
|
|
$(LIB)/libwwrt.a: $(RT_OBJ) | $(LIB)
|
|
$(AR) rcs $@ $(RT_OBJ)
|
|
|
|
# ---- directories -------------------------------------------------------
|
|
$(BIN) $(LIB) $(OBJ)/wcc $(OBJ)/ww $(OBJ)/wwdump $(OBJ)/w6c $(OBJ)/w6a $(OBJ)/w6l $(OBJ)/rt:
|
|
mkdir -p $@
|
|
|
|
# ---- tests -------------------------------------------------------------
|
|
# Each phase adds a $(BIN)/test_<name> target; the runner walks them.
|
|
TESTS = $(BIN)/test_smoke $(BIN)/test_lex $(BIN)/test_parse $(BIN)/test_check \
|
|
$(BIN)/test_w6c $(BIN)/test_w6a $(BIN)/test_w6a_parsenum \
|
|
$(BIN)/test_dataw $(BIN)/test_datar \
|
|
$(BIN)/test_w6l $(BIN)/test_data_link \
|
|
$(BIN)/test_w6l_manyflags \
|
|
$(BIN)/test_arch \
|
|
$(BIN)/test_e2e $(BIN)/test_ffi $(BIN)/test_dyn $(BIN)/test_stdlib \
|
|
$(BIN)/test_selfimport $(BIN)/test_missingpkg \
|
|
$(BIN)/test_driver_flagargs \
|
|
$(BIN)/test_let_global $(BIN)/test_def_neg_global \
|
|
$(BIN)/test_def_const_fold \
|
|
$(BIN)/test_int_cast_signed $(BIN)/test_uniesc_run $(BIN)/test_dot_chain \
|
|
$(BIN)/test_amp_dot $(BIN)/test_arr_elem_field \
|
|
$(BIN)/test_arr_elem_field_write \
|
|
$(BIN)/test_arr_enum_elem \
|
|
$(BIN)/test_arr_strslice_elem \
|
|
$(BIN)/test_struct_packed \
|
|
$(BIN)/test_arr_tagged_elem \
|
|
$(BIN)/test_dup_main_reject \
|
|
$(BIN)/test_tuple_trailing_comma_reject \
|
|
$(BIN)/test_voidless_return_reject \
|
|
$(BIN)/test_const_reassign_reject \
|
|
$(BIN)/test_dupfield_reject \
|
|
$(BIN)/test_enum_reject \
|
|
$(BIN)/test_variadic_body_reject \
|
|
$(BIN)/test_index_int_reject \
|
|
$(BIN)/test_size_untyped_int \
|
|
$(BIN)/test_tagged_staticinit \
|
|
$(BIN)/test_arr_infer_len \
|
|
$(BIN)/test_arr_cap_reject \
|
|
$(BIN)/test_tagged_subset_reject \
|
|
$(BIN)/test_callarg_typecheck \
|
|
$(BIN)/test_catA_f2_reject \
|
|
$(BIN)/test_intoverflow_reject \
|
|
$(BIN)/test_unknowndecl_reject \
|
|
$(BIN)/test_nullableglobal_reject \
|
|
$(BIN)/test_taggedcompoundderef_reject \
|
|
$(BIN)/test_taggedcompoundplace_reject \
|
|
$(BIN)/test_libprecond_abort \
|
|
$(BIN)/test_ffivariadic_run \
|
|
$(BIN)/test_m1mangle_run \
|
|
$(BIN)/test_m1mangle_sym \
|
|
$(BIN)/test_m1usehint_run \
|
|
$(BIN)/test_m1union_run \
|
|
$(BIN)/test_structlocal_frame \
|
|
$(BIN)/test_arrlit_tail_zero_run \
|
|
$(BIN)/test_allocalias_run \
|
|
$(BIN)/test_slttypepref_run \
|
|
$(BIN)/test_defercap_run \
|
|
$(BIN)/test_loopcap_run \
|
|
$(BIN)/test_enumcap_run \
|
|
$(BIN)/test_wwdumpgate_run \
|
|
$(BIN)/test_datargate_run \
|
|
$(BIN)/test_dynentry_run \
|
|
$(BIN)/test_zerotest_run \
|
|
$(BIN)/test_ampfncollide_run \
|
|
$(BIN)/test_trycallcollide_run \
|
|
$(BIN)/test_fnptrcollide_run \
|
|
$(BIN)/test_arr_ptr_global \
|
|
$(BIN)/test_def_arr_infer_len \
|
|
$(BIN)/test_def_arr_len \
|
|
$(BIN)/test_def_str_table \
|
|
$(BIN)/test_arr_zero_vs_infer \
|
|
$(BIN)/test_def_str_index_reject \
|
|
$(BIN)/test_struct_global_byval_arg \
|
|
$(BIN)/test_inferred_global_let \
|
|
$(BIN)/test_inferred_float_global \
|
|
$(BIN)/test_errfirst_union_try \
|
|
$(BIN)/test_alias_tuple_coerce \
|
|
$(BIN)/test_str_eq \
|
|
$(BIN)/test_overlong_arrlit \
|
|
$(BIN)/test_tuple_elem_overlong \
|
|
$(BIN)/test_tagged_arr_variant \
|
|
$(BIN)/test_nested_union_int_box \
|
|
$(BIN)/test_tagged_assignable_cluster \
|
|
$(BIN)/test_idcast_tagged_return \
|
|
$(BIN)/test_global_tagged_castinit \
|
|
$(BIN)/test_xmod_nominal_typeeqast \
|
|
$(BIN)/test_inferred_array_global \
|
|
$(BIN)/test_slice_str_global_arg \
|
|
$(BIN)/test_slice_str_global_zero \
|
|
$(BIN)/test_slice_literal_global \
|
|
$(BIN)/test_global_arr_elem_field \
|
|
$(BIN)/test_structlit_slice_field \
|
|
$(BIN)/test_arrglob_nodup_run \
|
|
$(BIN)/test_globptr_field_store_run \
|
|
$(BIN)/test_globptr_field_read_run \
|
|
$(BIN)/test_dot_str_chained_arg \
|
|
$(BIN)/test_dot_slice_arg \
|
|
$(BIN)/test_dot_tagged_source \
|
|
$(BIN)/test_tagged_store_intlit \
|
|
$(BIN)/test_match_bind_struct \
|
|
$(BIN)/test_modtype_leaf_collision \
|
|
$(BIN)/test_samemod_prefer \
|
|
$(BIN)/test_cgreturn_struct \
|
|
$(BIN)/test_cgassign_struct \
|
|
$(BIN)/test_dot_explicit_deref \
|
|
$(BIN)/test_nested_structlit \
|
|
$(BIN)/test_dot_structlit \
|
|
$(BIN)/test_nested_call_rhs \
|
|
$(BIN)/test_fnlabel_mangle \
|
|
$(BIN)/test_cgreturn_variant_zero \
|
|
$(BIN)/test_arrlit_str_full \
|
|
$(BIN)/test_redecl \
|
|
$(BIN)/test_empty_alloc_infer \
|
|
$(BIN)/test_struct_field_index \
|
|
$(BIN)/test_tagged_return_scratch \
|
|
$(BIN)/test_tagged_widen_f64 \
|
|
$(BIN)/test_match_spill_pointer_payload \
|
|
$(BIN)/test_match_field_inplace \
|
|
$(BIN)/test_match_global_field \
|
|
$(BIN)/test_struct_byval_param \
|
|
$(BIN)/test_struct_multi_return_scratch \
|
|
$(BIN)/test_signed_data_emit \
|
|
$(BIN)/test_tagged_call_arg \
|
|
$(BIN)/test_sret_struct_return \
|
|
$(BIN)/test_tagged_sret_run \
|
|
$(BIN)/test_tagged_memarg_run \
|
|
$(BIN)/test_tagscr_sizes_run \
|
|
$(BIN)/test_global_sret_run \
|
|
$(BIN)/test_sret_narrow_field \
|
|
$(BIN)/test_match_slice_variant \
|
|
$(BIN)/test_array_zeroinit_run \
|
|
$(BIN)/test_alias_accept_run \
|
|
$(BIN)/test_alias_cgen_b5_run \
|
|
$(BIN)/test_alias_cgen_b6_run \
|
|
$(BIN)/test_alias_emit_b7_run \
|
|
$(BIN)/test_variant_chain_b95_run \
|
|
$(BIN)/test_peellint_gate \
|
|
$(BIN)/test_xmod_fnptr_const_run \
|
|
$(BIN)/test_errtype_compare \
|
|
$(BIN)/test_intbinop_mismatch \
|
|
$(BIN)/test_str_forrange_loopvar_run \
|
|
$(BIN)/test_composite_call_arg \
|
|
$(BIN)/test_letdecl_zeroinit \
|
|
$(BIN)/test_nested_if_labels \
|
|
$(BIN)/test_alias_leaf_collision \
|
|
$(BIN)/test_modcall_widen_slice \
|
|
$(BIN)/test_match_4arm_cross_module \
|
|
$(BIN)/test_match_4arm_cross_module_run \
|
|
$(BIN)/test_free_noop_run \
|
|
$(BIN)/test_enum_modshadow \
|
|
$(BIN)/test_struct_modshadow \
|
|
$(BIN)/test_def_modshadow \
|
|
$(BIN)/test_cstage_label_ssot \
|
|
$(BIN)/test_direnum \
|
|
$(BIN)/test_module_decl \
|
|
$(BIN)/test_chained_index \
|
|
$(BIN)/test_chained_write \
|
|
$(BIN)/test_dotbase_chained \
|
|
$(BIN)/test_parse_error \
|
|
$(BIN)/test_variadic_pack \
|
|
$(BIN)/test_letcopy_struct \
|
|
$(BIN)/test_fnparams_bare_leaf_shadow \
|
|
$(BIN)/test_fnret_bare_leaf_shadow \
|
|
$(BIN)/test_fnret34_modshadow \
|
|
$(BIN)/test_strdef_inline \
|
|
$(BIN)/test_def_modqual_modshadow \
|
|
$(BIN)/test_size_strategy_convergence \
|
|
$(BIN)/test_sumtype_forward \
|
|
$(BIN)/test_mklabel_modscoped \
|
|
$(BIN)/test_vararg_seq_percall \
|
|
$(BIN)/test_modparam_callee \
|
|
$(BIN)/test_convwrap_audit \
|
|
$(BIN)/test_slice_of_slice_index \
|
|
$(BIN)/test_amp_dot_idx \
|
|
$(BIN)/test_alias_chain_unwrap \
|
|
$(BIN)/test_letbind_void_bang_void \
|
|
$(BIN)/test_cgalloc_str_field \
|
|
$(BIN)/test_param_shadow_mod \
|
|
$(BIN)/test_localoff_scope \
|
|
$(BIN)/test_cast_enum_movl \
|
|
$(BIN)/test_check_enum_fold \
|
|
$(BIN)/test_def_widen_const \
|
|
$(BIN)/test_inferred_struct_arg_push \
|
|
$(BIN)/test_struct_abi_size \
|
|
$(BIN)/test_typeeq_fn_ast \
|
|
$(BIN)/test_amp_fn_ident \
|
|
$(BIN)/test_star_fn_deref \
|
|
$(BIN)/test_star_fn_deref_call \
|
|
$(BIN)/test_match_variant_dispatch \
|
|
$(BIN)/test_io_types_run \
|
|
$(BIN)/test_dot_aliased_ptr \
|
|
$(BIN)/test_return_tagged_forward \
|
|
$(BIN)/test_widen_transitive \
|
|
$(BIN)/test_typeassert_nonident \
|
|
$(BIN)/test_isas_spread_variant \
|
|
$(BIN)/test_tagged_widen_named_variant \
|
|
$(BIN)/test_io_vtable_run \
|
|
$(BIN)/test_io_handle_run \
|
|
$(BIN)/test_memio_vstream_run \
|
|
$(BIN)/test_fmt_handle_run \
|
|
$(BIN)/test_fmt_mods_run \
|
|
$(BIN)/test_fmt_scanoverflow_run \
|
|
$(BIN)/test_fmt_compositions_run \
|
|
$(BIN)/test_fmt_int_run \
|
|
$(BIN)/test_amp_fn_assign_run \
|
|
$(BIN)/test_type_value_shadow_run \
|
|
$(BIN)/test_xmod_alias_struct_collide_run \
|
|
$(BIN)/test_xmod_variant_match \
|
|
$(BIN)/test_xmod_qualstructlit_run \
|
|
$(BIN)/test_spread_variant_match \
|
|
$(BIN)/test_xmod_ident_prefer \
|
|
$(BIN)/test_xmod_valglobal_run \
|
|
$(BIN)/test_xmod_valglobal_dot_run \
|
|
$(BIN)/test_zeroinit_run \
|
|
$(BIN)/test_tuple_sret_callee \
|
|
$(BIN)/test_append_wide_elem \
|
|
$(BIN)/test_delete_elem \
|
|
$(BIN)/test_delete_range \
|
|
$(BIN)/test_insert_elem \
|
|
$(BIN)/test_arrlit_overlong \
|
|
$(BIN)/test_idx_structlit_store \
|
|
$(BIN)/test_inferred_let_struct \
|
|
$(BIN)/test_agg_assign_width \
|
|
$(BIN)/test_placeaddr_store \
|
|
$(BIN)/test_tryprop_multisuccess \
|
|
$(BIN)/test_append_place \
|
|
$(BIN)/test_struct_tuple_field_slot \
|
|
$(BIN)/test_named_ptr_alias_variant_widen \
|
|
$(BIN)/test_single_field_struct_zeroinit \
|
|
$(BIN)/test_structvariant_largeunion_return \
|
|
$(BIN)/test_narrow_alias_deref_store \
|
|
$(BIN)/test_bufio_vstream_run \
|
|
$(BIN)/test_log_vstream_run \
|
|
$(BIN)/test_use_promote_alias \
|
|
$(BIN)/test_field_signed $(BIN)/test_frame_argcount \
|
|
$(BIN)/test_selfhost $(BIN)/test_w6a_ww $(BIN)/test_w6l_ww \
|
|
$(BIN)/test_w6c_ww $(BIN)/test_ww_ww $(BIN)/test_self_rebuild \
|
|
$(BIN)/test_dyn_ww $(BIN)/test_selfcheck \
|
|
$(BIN)/test_attest_record $(BIN)/test_attest_drop \
|
|
$(BIN)/test_declns_sep $(BIN)/test_modresetadj_run \
|
|
$(BIN)/test_wwileaf_run \
|
|
$(BIN)/test_wwispread_sep \
|
|
$(BIN)/test_fmt_run $(BIN)/test_log_run $(BIN)/test_fnmatch_run \
|
|
$(BIN)/test_shlex_run $(BIN)/test_getenv_run $(BIN)/test_dirs_run \
|
|
$(BIN)/test_dirs_toolong_run \
|
|
$(BIN)/test_stat_run $(BIN)/test_time_run \
|
|
$(BIN)/test_intdiv_signed \
|
|
$(BIN)/test_strings_run \
|
|
$(BIN)/test_hex_run $(BIN)/test_utf8_run $(BIN)/test_bytes_run \
|
|
$(BIN)/test_path_run \
|
|
$(BIN)/test_test_filter \
|
|
$(BIN)/test_strconv_int_run \
|
|
$(BIN)/test_stof_run $(BIN)/test_ftos_run \
|
|
$(BIN)/test_memio_run $(BIN)/test_temp_run $(BIN)/test_getopt_run \
|
|
$(BIN)/test_errno_run \
|
|
$(BIN)/test_base32_run $(BIN)/test_base64_run \
|
|
$(BIN)/test_adler32_run $(BIN)/test_crc16_run \
|
|
$(BIN)/test_crc32_run $(BIN)/test_crc64_run \
|
|
$(BIN)/test_siphash_run $(BIN)/test_sha256_run \
|
|
$(BIN)/test_regex_run \
|
|
$(BIN)/test_lib_byteid \
|
|
$(BIN)/test_m2wwi_run \
|
|
$(BIN)/test_m3sep_run \
|
|
$(BIN)/test_barefn_collide_run \
|
|
$(BIN)/test_sepbuild_run \
|
|
$(BIN)/test_sepscratch_run \
|
|
$(BIN)/test_sepdotpath_run \
|
|
$(BIN)/test_seproot_export_run \
|
|
$(BIN)/test_syntaxexport_run \
|
|
$(BIN)/test_sepstructdef_run \
|
|
$(BIN)/test_sepcycle_dup \
|
|
$(BIN)/test_separchive_run \
|
|
$(BIN)/test_pkgcache_run \
|
|
$(BIN)/test_pkgcache_concurrent_run \
|
|
$(BIN)/test_pkgcache_poison_run \
|
|
$(BIN)/test_c6soak_run \
|
|
$(BIN)/test_septest_run \
|
|
$(BIN)/test_coloimport_sep \
|
|
$(BIN)/test_depmain_sep \
|
|
$(BIN)/test_checked_run \
|
|
$(BIN)/test_defdim_struct_run \
|
|
$(BIN)/test_arrlit_slice_run \
|
|
$(BIN)/test_def_mangle_run \
|
|
$(BIN)/test_arr_module_index_run \
|
|
$(BIN)/test_array_init_acceptiffits_run \
|
|
$(BIN)/test_amp_def_global_run \
|
|
$(BIN)/test_f64crossmod_run \
|
|
$(BIN)/test_tuprecv_run \
|
|
$(BIN)/test_tuprecv_f64_run \
|
|
$(BIN)/test_assert_builtin_run \
|
|
$(BIN)/test_modqualdestr_run \
|
|
$(BIN)/test_structparam_run \
|
|
$(BIN)/test_structret_run \
|
|
$(BIN)/test_floats_run \
|
|
$(BIN)/test_types_sizelim_run \
|
|
$(BIN)/test_types_intlim_run \
|
|
$(BIN)/test_opaque_guards \
|
|
$(BIN)/test_sort_run \
|
|
$(BIN)/test_bufio_run $(BIN)/test_random_run \
|
|
$(BIN)/test_asserttyped_gap \
|
|
$(BIN)/test_cast_base_index \
|
|
$(BIN)/test_ascii_run $(BIN)/test_tok_run $(BIN)/test_nkname_run
|
|
|
|
$(BIN)/test_smoke: test/wcc/000_smoke.c $(LIB)/libwcc.a | $(BIN)
|
|
$(CC) $(CFLAGS) $(INCS) -o $@ $< -L$(LIB) -lwcc
|
|
|
|
$(BIN)/test_lex: test/wcc/100_lex.c $(LIB)/libwcc.a | $(BIN)
|
|
$(CC) $(CFLAGS) $(INCS) -o $@ $< -L$(LIB) -lwcc
|
|
|
|
$(BIN)/test_parse: test/wcc/200_parse.c $(LIB)/libwcc.a | $(BIN)
|
|
$(CC) $(CFLAGS) $(INCS) -o $@ $< -L$(LIB) -lwcc
|
|
|
|
$(BIN)/test_check: test/wcc/300_check.c $(LIB)/libwcc.a | $(BIN)
|
|
$(CC) $(CFLAGS) $(INCS) -o $@ $< -L$(LIB) -lwcc
|
|
|
|
$(BIN)/test_w6c: test/wcc/400_w6c.c $(BIN)/w6c | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_w6a: test/wcc/500_w6a.c $(BIN)/w6c $(BIN)/w6a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_dataw: test/wcc/510_dataw.c $(BIN)/w6a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 530_w6a_parsenum (F14 #62): w6a vs w6a_ww must agree on strtoll-edge
|
|
# immediate shapes ($ 5 / $08) and both reject a bare -(BP). Needs both
|
|
# assembler twins.
|
|
$(BIN)/test_w6a_parsenum: test/wcc/530_w6a_parsenum.c $(BIN)/w6a $(BIN)/w6a_ww \
|
|
| $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_datar: test/wcc/520_datar.c $(BIN)/w6a $(BIN)/w6l | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_w6l: test/wcc/600_w6l.c $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_w6l_manyflags: test/wcc/632_w6l_manyflags.c $(BIN)/w6c $(BIN)/w6a \
|
|
$(BIN)/w6l $(BIN)/w6l_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_data_link: test/wcc/620_data_link.c $(BIN)/w6a $(BIN)/w6l | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_arch: test/wcc/610_arch.c $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(OBJ)/rt/start.o | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_e2e: test/wcc/700_e2e.c $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a $(OBJ)/rt/start.o | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_ffi: test/wcc/800_ffi.c $(BIN)/w6c | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_dyn: test/wcc/810_dyn.c $(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_stdlib: test/wcc/900_stdlib.c $(BIN)/w6c | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_selfimport: test/wcc/948_selfimport.c $(BIN)/w6c $(BIN)/w6c_ww \
|
|
| $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_missingpkg: test/wcc/949_missingpkg.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_driver_flagargs: test/wcc/949_driver_flagargs.c $(BIN)/ww \
|
|
$(BIN)/ww_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_test_filter drives `ww test <file> [pattern]` end-to-end on BOTH
|
|
# driver twins, so it needs the full cstage + wwstage tool sets (ww_ww
|
|
# shells to w6c_ww/w6a_ww/w6l_ww) plus libwwrt for the link. #17.
|
|
$(BIN)/test_test_filter: test/wcc/989_test_filter.c $(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_callarg_typecheck drives `ww build` + `ww test -c` then `<comp> -T`
|
|
# on BOTH driver/compiler twins (#24 general call-arg typecheck + #34
|
|
# fn-rvalue stamp + #29 rune-lit coerce), so it needs the full cstage +
|
|
# wwstage tool sets plus libwwrt for the link.
|
|
$(BIN)/test_callarg_typecheck: test/wcc/989_callarg_typecheck.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_catA_f2_reject drives the #38/F2 checker-reject wave (review items
|
|
# #2/#6/#7/#10/#39): each REJECT row must FAIL to build on BOTH driver
|
|
# twins, each control must build+run. Needs the full cstage + wwstage tool
|
|
# sets plus libwwrt for the link.
|
|
$(BIN)/test_catA_f2_reject: test/wcc/989_catA_f2_reject.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_intoverflow_reject (F14 #53): an integer literal that overflows u64
|
|
# must FAIL to build on BOTH driver twins (wwstage parseint dropped the C
|
|
# twin's overflow guard). Needs the full cstage + wwstage tool sets plus
|
|
# libwwrt for the control links.
|
|
$(BIN)/test_intoverflow_reject: test/wcc/989_intoverflow_reject.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_unknowndecl_reject (F14 #55): an unrecognized top-level construct
|
|
# must FAIL to build on BOTH driver twins (wwstage's parsefile fallback
|
|
# silently chewed it with no error). Needs the full cstage + wwstage tool
|
|
# sets plus libwwrt for the control links.
|
|
$(BIN)/test_unknowndecl_reject: test/wcc/989_unknowndecl_reject.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_nullableglobal_reject (#45 silent->loud bridge, task #15 prereq): a
|
|
# module-level nullable `(*T | void)` GLOBAL has no storage path, so a
|
|
# match/is/as on it silently miscompiled (0(BP) read / undefined ref) on
|
|
# BOTH stages. The bridge dies LOUD at the size/storage layer; the full
|
|
# storage + read-class arc is deferred to #15 (CSP handle-singleton
|
|
# prereq). Needs the full cstage + wwstage tool sets plus libwwrt for the
|
|
# control links.
|
|
$(BIN)/test_nullableglobal_reject: test/wcc/989_nullableglobal_reject.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_taggedcompoundderef_reject (#18, last of the tagged-payload WRITE
|
|
# class): `*p OP= v` where p is a *tagged is nonsense and must loud-reject.
|
|
# cstage already gated (sz>=16 falls to the assign-resolver fatal); wwstage
|
|
# silently miscompiled (single MOVQ on the tag word). The align-down adds
|
|
# the same size gate so both stages reach the identical resolver reject.
|
|
# Reject rows assert build-fail + shared diagnostic; control rows (scalar
|
|
# compound + #17 plain deref store) build + run. Needs both tool sets +
|
|
# libwwrt for the control links.
|
|
$(BIN)/test_taggedcompoundderef_reject: test/wcc/989_taggedcompoundderef_reject.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_libprecond_abort: test/wcc/989_libprecond_abort.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_taggedcompoundplace_reject (#20/#21, last two members of the
|
|
# compound-OP-on-tagged-place reject class): `gs[i] OP= v` / `a[i] OP= v`
|
|
# (INDEX, #20) and `g OP= v` (IDENT, #21) on a tagged-union place are
|
|
# nonsense and must loud-reject. cstage silently dropped the indexed compound
|
|
# (cs!=ww); BOTH stages silently corrupted the tag word for the ident
|
|
# compound (byte-id-green). The fix gates the cstage indexed plain-store arm
|
|
# on TK_ASSIGN (compound falls to the #133 reject) and adds a tagged-ident
|
|
# compound guard to both stages. Reject rows assert build-fail + the
|
|
# per-place-kind diagnostic (#133 for index, #21 for ident); control rows
|
|
# (scalar ident/index compound + plain tagged ident/local-index/global-index
|
|
# store) build + run. Needs both tool sets + libwwrt for the control links.
|
|
$(BIN)/test_taggedcompoundplace_reject: test/wcc/989_taggedcompoundplace_reject.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_ffivariadic_run (C1, catB-54): a ww caller of a C variadic fn must set
|
|
# the SysV AL register to the count of XMM regs used for the variadic float
|
|
# args — a RUNTIME-only correctness property (byte-id is blind to AL). The cc
|
|
# fixture is built self-contained (zero relocs + zero undef syms, verified via
|
|
# readelf -r / nm) so w6l links it with no libc, then wrapped in libffifix.a
|
|
# under $(OUT)/ffivariadic (the harness finds it via $(BIN)/../ffivariadic).
|
|
# Runs on BOTH cstage `ww` and wwstage `ww_ww` (C2). Fixture flags are fixed
|
|
# (NOT $(CFLAGS), which is -O0/-std=c99) to match ken's verified
|
|
# self-contained build.
|
|
$(OUT)/ffivariadic/libffifix.a: test/wcc/data/ffivariadic/fixture.c
|
|
@mkdir -p $(OUT)/ffivariadic
|
|
$(CC) -O1 -fno-stack-protector -fno-asynchronous-unwind-tables \
|
|
-fcf-protection=none -c -o $(OUT)/ffivariadic/fixture.o $<
|
|
$(AR) rcs $@ $(OUT)/ffivariadic/fixture.o
|
|
|
|
$(BIN)/test_ffivariadic_run: test/wcc/989_ffivariadic_run.c \
|
|
$(OUT)/ffivariadic/libffifix.a \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_m1mangle_run / _sym (M1, #22 + #32): path-qualified symbol mangling
|
|
# and root-unit entry detection. _run builds+runs a tiny package tree on
|
|
# BOTH stages (rule-10); _sym asserts the emitted symbol names + cs.s==ww.s.
|
|
$(BIN)/test_m1mangle_run: test/wcc/989_m1mangle_run.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_m1mangle_sym: test/wcc/989_m1mangle_sym.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_m1usehint_run (M1, #40): the cgen mangle-hint must be MODULE-scoped.
|
|
# Two same-leaf exported fns across directory-packages, each `import`ed by a
|
|
# different module aliasing `math`; every `math.pick()` must route to its own
|
|
# import (not the file-global first-match). Builds+runs on BOTH stages + pins
|
|
# cstage.s==wwstage.s — the gate-VISIBLE #263-class hint miscompile.
|
|
$(BIN)/test_m1usehint_run: test/wcc/989_m1usehint_run.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_m1union_run (M1, #199b): a `match` on a cross-module fn's tagged-union
|
|
# return must keep each nominal void-alias variant on a distinct tag. Builds+
|
|
# runs the utf8.next 4-arm match per-arm on BOTH stages (rule-10) and pins
|
|
# cstage.s==wwstage.s on the all-arms program — the gate-VISIBLE regression
|
|
# teeth for the variant-collapse the doc flagged as byte-id-only.
|
|
$(BIN)/test_m1union_run: test/wcc/989_m1union_run.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_structlocal_frame (#75): a sub-8 nested-composite struct LOCAL must
|
|
# reserve its frame slot at the struct's NATURAL size (round8(ti.size)),
|
|
# not the slot-padded ti.slotsize. wwstage's slotsize() TY_STRUCT arm
|
|
# over-reserved, so outer{a:u8,p:inner{x:u8,y:u8},z:i64} emitted frame $32
|
|
# / -24(BP) vs cstage's $16 / -16(BP) — runtime-invisible (both exit 0)
|
|
# but a cs!=ww .s divergence (rule 10) and a latent byte-id landmine. The
|
|
# FRAME-ABSOLUTE twin of the runtime nestfield rows (migrated to
|
|
# test/lang/nestfield_test.ww): emits .s via w6c and w6c_ww and byte-diffs
|
|
# (no link, no run).
|
|
$(BIN)/test_structlocal_frame: test/wcc/989_structlocal_frame.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_arrlit_tail_zero_run (#13): an under-length array literal zero-fills the
|
|
# unspecified tail, not the last value. Builds+runs on BOTH driver twins
|
|
# (rule-10), pinning the absolute value (pre-fix ww tail = last value).
|
|
$(BIN)/test_arrlit_tail_zero_run: test/wcc/989_arrlit_tail_zero_run.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_allocalias_run (#26): alloc(T{...}) for an alias T sizes + field-fills
|
|
# from the alias-chased struct layout, not a name-keyed lookup of the literal
|
|
# head. Builds+runs on BOTH driver twins (rule-10).
|
|
$(BIN)/test_allocalias_run: test/wcc/989_allocalias_run.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_slttypepref_run (#58/#50, c1): scopelookuptype prefers the current
|
|
# module's SK_TYPE when a value binding shadows a type leaf two modules both
|
|
# export. Builds+runs on BOTH driver twins (rule-10). See the test header.
|
|
$(BIN)/test_slttypepref_run: test/wcc/989_slttypepref_run.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_defercap_run (#40, F13 c1): the defer stack fails loud at its shared
|
|
# cap (32) in BOTH stages instead of silently dropping the overflowing
|
|
# deferred call (wwstage was capped at 16). Builds/rejects on both driver
|
|
# twins (rule-10). See the test header.
|
|
$(BIN)/test_defercap_run: test/wcc/989_defercap_run.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_loopcap_run (#42, F13 c2): the loop-label stack fails loud at its cap
|
|
# (LOOP_MAX) in BOTH stages instead of an OOB heap write (ww) / wrong jump
|
|
# target (cstage). Builds/rejects on both driver twins (rule-10). See header.
|
|
$(BIN)/test_loopcap_run: test/wcc/989_loopcap_run.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_enumcap_run (#65, F13 c3): the driver's directory enumerator grows
|
|
# dynamically (mirror cstage realloc-doubling) instead of silently capping at
|
|
# 256 files. Builds on both driver twins (`--sep`) and asserts a byte-identical
|
|
# per-package sep unit (bigmod.unit.ww) on a >256-file module (rule-10). See
|
|
# the test header.
|
|
$(BIN)/test_enumcap_run: test/wcc/989_enumcap_run.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_wwdumpgate_run (#52, F15 c4): wwdump_ww's -c/-r arms gate on parse-stage
|
|
# errors instead of silently emitting asm / a resolve report on a broken AST.
|
|
# Runs wwdump + wwdump_ww directly (rule-10). See the test header.
|
|
$(BIN)/test_wwdumpgate_run: test/wcc/989_wwdumpgate_run.c \
|
|
$(BIN)/wwdump $(BIN)/wwdump_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_datargate_run (#59, F15 c5): w6a loud-rejects a DATAR relocation whose
|
|
# slot was never defined by a prior DATAW instead of silently dropping the
|
|
# reloc (zero-filled pointer slot in the .o). Runs w6a + w6a_ww directly and
|
|
# asserts a byte-identical .o on the healthy path (rule-10). See the header.
|
|
$(BIN)/test_datargate_run: test/wcc/989_datargate_run.c \
|
|
$(BIN)/w6a $(BIN)/w6a_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_dynentry_run (#63, F15 c6): w6l's dynamic e_entry is rebased onto the
|
|
# actual .text file offset once the dynamic headers overflow the first page,
|
|
# instead of the stale base+0x1000+val (which mapped into the headers →
|
|
# SIGSEGV). BOTH stages (#263). Builds + runs ~160-dyn-sym binaries on both
|
|
# driver twins and asserts exit 42 + byte-identical output (rule-10). Skips
|
|
# without libc. See the test header.
|
|
$(BIN)/test_dynentry_run: test/wcc/989_dynentry_run.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_zerotest_run (#64, F15 c7): `ww test <dir>` over a directory with no
|
|
# *_test.ww files fails loud (rc=1 + "no *_test.ww files in ...") instead of a
|
|
# silent rc=0 false-green. Runs both driver twins (rule-10). See the header.
|
|
$(BIN)/test_zerotest_run: test/wcc/989_zerotest_run.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_ampfncollide_run (#4, c2): `&fn` synthesis (unoptype TK_AMP +
|
|
# assignableaddrfn) prefers the current module's fn when a same-leaf fn is
|
|
# declared in a later module. Builds/rejects on BOTH driver twins (rule-10).
|
|
# See the test header.
|
|
$(BIN)/test_ampfncollide_run: test/wcc/989_ampfncollide_run.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_trycallcollide_run (#11a, c3): exprtypeoftry prefers the current
|
|
# module's symbol when typing a `?`/`!` operand whose bare leaf collides with
|
|
# a same-leaf decl in a later module. Builds+runs on BOTH driver twins
|
|
# (rule-10). See the test header.
|
|
$(BIN)/test_trycallcollide_run: test/wcc/989_trycallcollide_run.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_fnptrcollide_run (F7-c7, #14): a value ident whose leaf collides with
|
|
# a fn name must not be mis-folded into the fn's TEXT reloc. Build-must-fail
|
|
# on BOTH driver twins (rule-10); wwstage gated. See the test header.
|
|
$(BIN)/test_fnptrcollide_run: test/wcc/989_fnptrcollide_run.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_let_global: test/wcc/630_let_global.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_def_neg_global: test/wcc/631_def_neg_global.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_def_const_fold: test/wcc/732_def_const_fold.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_int_cast_signed: test/wcc/640_int_cast_signed.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_uniesc_run: test/wcc/110_uniesc_run.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_dot_chain: test/wcc/650_dot_chain.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_amp_dot: test/wcc/690_amp_dot.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_arr_elem_field: test/wcc/680_arr_elem_field.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_arr_elem_field_write: test/wcc/681_arr_elem_field_write.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_arr_enum_elem: test/wcc/682_arr_enum_elem.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_arr_strslice_elem: test/wcc/683_arr_strslice_elem.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_struct_packed: test/wcc/671_struct_packed.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_arr_infer_len: test/wcc/684_arr_infer_len.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_arr_cap_reject: test/wcc/817_arr_cap_reject.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_tagged_subset_reject: test/wcc/989_tagged_subset_reject.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_arr_ptr_global: test/wcc/818_arr_ptr_global.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_cast_base_index: test/wcc/830_cast_base_index.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_def_str_index_reject: test/wcc/821_def_str_index_reject.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_struct_global_byval_arg: test/wcc/822_struct_global_byval_arg.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_inferred_global_let: test/wcc/823_inferred_global_let.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_inferred_float_global: test/wcc/824_inferred_float_global.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_errfirst_union_try: test/wcc/825_errfirst_union_try.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_alias_tuple_coerce: test/wcc/826_alias_tuple_coerce.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_str_eq: test/wcc/827_str_eq.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_overlong_arrlit: test/wcc/828_overlong_arrlit.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_tuple_elem_overlong: test/wcc/832_tuple_elem_overlong.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_tagged_arr_variant: test/wcc/834_tagged_arr_variant.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_nested_union_int_box: test/wcc/835_nested_union_int_box.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_tagged_assignable_cluster: test/wcc/836_tagged_assignable_cluster.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_idcast_tagged_return: test/wcc/837_idcast_tagged_return.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_global_tagged_castinit: test/wcc/838_global_tagged_castinit.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_xmod_nominal_typeeqast: test/wcc/839_xmod_nominal_typeeqast.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_inferred_array_global: test/wcc/833_inferred_array_global.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_slice_str_global_arg: test/wcc/829_slice_str_global_arg.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_def_arr_infer_len: test/wcc/814_def_arr_infer_len.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_def_arr_len: test/wcc/816_def_arr_len.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_def_str_table: test/wcc/819_def_str_table.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_arr_zero_vs_infer: test/wcc/820_arr_zero_vs_infer.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_arr_tagged_elem: test/wcc/685_arr_tagged_elem.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_dup_main_reject: test/wcc/842_dup_main_reject.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_tuple_trailing_comma_reject: test/wcc/845_tuple_trailing_comma_reject.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_voidless_return_reject: test/wcc/846_voidless_return_reject.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_const_reassign_reject: test/wcc/847_const_reassign_reject.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_dupfield_reject: test/wcc/849_dupfield_reject.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_enum_reject: test/wcc/850_enum_reject.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_variadic_body_reject: test/wcc/852_variadic_body_reject.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_index_int_reject: test/wcc/851_index_int_reject.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_tagged_staticinit: test/wcc/843_tagged_staticinit.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_size_untyped_int: test/wcc/844_size_untyped_int.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_slice_str_global_zero: test/wcc/686_slice_str_global_zero.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_slice_literal_global: test/wcc/687_slice_literal_global.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_global_arr_elem_field: test/wcc/688_global_arr_elem_field.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_structlit_slice_field: test/wcc/689_structlit_slice_field.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 689_arrglob_nodup_run (#12): a no-init array global emits its zero-fill
|
|
# DATAW row exactly once (the str-size arm was size-keyed and double-matched
|
|
# arrays). Builds+runs both twins; asserts one DATAW row per stage.
|
|
$(BIN)/test_arrglob_nodup_run: test/wcc/689_arrglob_nodup_run.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 689_globptr_field_store_run (#6): a module-global *struct ptr base field
|
|
# store (compound / non-scalar / chained / indexed) no longer SEGVs in cstage
|
|
# and is byte-identical to wwstage (cstage aligned UP via decline-to-resolver).
|
|
$(BIN)/test_globptr_field_store_run: test/wcc/689_globptr_field_store_run.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 689_globptr_field_read_run (#15): reading a field through a module-global
|
|
# *struct ptr base (single-dot `gp.f`) no longer SEGVs in cstage / collapses
|
|
# to a bare symbol in wwstage; both load the ptr value via SB then the field
|
|
# offset, byte-identically. Read twin of 689_globptr_field_store_run.
|
|
$(BIN)/test_globptr_field_read_run: test/wcc/689_globptr_field_read_run.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_dot_str_chained_arg: test/wcc/692_dot_str_chained_arg.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_dot_slice_arg: test/wcc/691_dot_slice_arg.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_dot_tagged_source: test/wcc/693_dot_tagged_source.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_tagged_store_intlit: test/wcc/694_tagged_store_intlit.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_match_bind_struct: test/wcc/695_match_bind_struct.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_modtype_leaf_collision: test/wcc/696_modtype_leaf_collision.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_samemod_prefer: test/wcc/697_samemod_prefer.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_cgreturn_struct: test/wcc/698_cgreturn_struct.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_cgassign_struct: test/wcc/701_cgassign_struct.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_dot_explicit_deref: test/wcc/702_dot_explicit_deref.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_nested_structlit: test/wcc/703_nested_structlit.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_dot_structlit: test/wcc/704_dot_structlit.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_nested_call_rhs: test/wcc/705_nested_call_rhs.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_fnlabel_mangle: test/wcc/706_fnlabel_mangle.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_cgreturn_variant_zero: test/wcc/707_cgreturn_variant_zero.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_param_shadow_mod: test/wcc/708_param_shadow_mod.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_localoff_scope: test/wcc/709_localoff_scope.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_cast_enum_movl: test/wcc/710_cast_enum_movl.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_check_enum_fold: test/wcc/759_check_enum_fold.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_def_widen_const: test/wcc/760_def_widen_const.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_inferred_struct_arg_push: test/wcc/761_inferred_struct_arg_push.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_struct_abi_size: test/wcc/762_struct_abi_size.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_typeeq_fn_ast: test/wcc/763_typeeq_fn_ast.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_amp_fn_ident: test/wcc/764_amp_fn_ident.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_star_fn_deref: test/wcc/765_star_fn_deref.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_star_fn_deref_call: test/wcc/766_star_fn_deref_call.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_match_variant_dispatch: test/wcc/767_match_variant_dispatch.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_io_types_run: test/wcc/768_io_types_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_dot_aliased_ptr: test/wcc/769_dot_aliased_ptr.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_return_tagged_forward: test/wcc/770_return_tagged_forward.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_widen_transitive: test/wcc/771_widen_transitive.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_typeassert_nonident: test/wcc/772_typeassert_nonident.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_isas_spread_variant: test/wcc/773_isas_spread_variant.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_tagged_widen_named_variant: test/wcc/774_tagged_widen_named_variant.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_io_vtable_run: test/wcc/775_io_vtable_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_io_handle_run: test/wcc/791_io_handle_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_memio_vstream_run: test/wcc/776_memio_vstream_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
lib/memio/memio.ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_fmt_handle_run: test/wcc/777_fmt_handle_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
lib/fmt/fmt.ww lib/memio/memio.ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #206: bare &fn assignable into *<fn-alias> / (*<fn-alias>|void). Both
|
|
# stages (cstage + wwstage byte-id); single-file probes, no lib imports.
|
|
$(BIN)/test_amp_fn_assign_run: test/wcc/783_amp_fn_assign_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #225: a value binding (param/let/fn) that shadows a same-named TYPE
|
|
# must not hide it in type-annotation or cast position. cstage was
|
|
# kind-blind in resolve_typename; wwstage already separated the type and
|
|
# value namespaces. Driver build + run on both stages + cs.s == ww.s.
|
|
$(BIN)/test_type_value_shadow_run: test/wcc/788_type_value_shadow_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #223: a struct-field access through a pointer-ALIAS receiver whose
|
|
# leaf collides with another module's same-leaf STRUCT. cstage driver
|
|
# build + run for runtime, cs-sep vs ww-sep .s cmp (concatenated
|
|
# main.sepwork/*.s) for rule-10 byte-id (the #223 discriminator). Builds its
|
|
# own 2-module fixtures in a private mktemp dir — not a selfhost-driver test.
|
|
$(BIN)/test_xmod_alias_struct_collide_run: test/wcc/784_xmod_alias_struct_collide_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #13: cross-module decomposition of an imported union's variants
|
|
# (`case pkg.a`). Pre-fix the wwstage checker rejected it; cstage built
|
|
# it. cstage driver build + run pins routing; ww-sep build (w6c_ww must
|
|
# now accept) + cs-sep==ww-sep byte-id is the discriminator.
|
|
# Builds its own 2-module fixtures in a private mktemp dir.
|
|
$(BIN)/test_xmod_variant_match: test/wcc/787_xmod_variant_match.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #76: a qualified struct literal `pkg.Type{...}` (type named through an
|
|
# imported module). Pre-fix it failed to parse (the dotted typeref folded
|
|
# to an N_DOT chain the checker's resolve_type had no arm for); the fix
|
|
# flattens the chain to one N_TNAME at the struct-lit handoff in BOTH
|
|
# stages. cstage driver build + run pins parse + runtime field values;
|
|
# cs-sep vs ww-sep .s cmp (concatenated main.sepwork/*.s) is the rule-10
|
|
# byte-id gate. Builds its own 2-module fixtures in a private mktemp dir.
|
|
$(BIN)/test_xmod_qualstructlit_run: test/wcc/848_xmod_qualstructlit_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(BIN)/wwdump $(BIN)/wwdump_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #209: a `match` over a tagged union with a `...inner` SPREAD variant
|
|
# (e.g. fmt's `field = (...formattable | *mods)`). The wwstage checker
|
|
# walked the raw AST u.list and false-rejected every flattened member arm
|
|
# ("case: not a variant" / "variant not handled"), so any fmt-importing
|
|
# unit was wwstage-uncompilable. Fix flattens the spread in the checker's
|
|
# match validity + exhaustiveness walk (selfhost/cmd/wcc/check.ww). The
|
|
# w6c_ww-accepts + cs-sep==ww-sep byte-id on the driver sep build is the
|
|
# discriminator. Self-contained single-file probe.
|
|
$(BIN)/test_spread_variant_match: test/wcc/792_spread_variant_match.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #55: bare value-ident in an imported module must resolve same-module-
|
|
# preferred (exprtype N_IDENT scopelookup -> scopelookupprefer). cstage
|
|
# driver build + run pins routing; the ww-sep build (w6c_ww) must ACCEPT
|
|
# (pre-fix it rejected the wrong-module-typed ident). Builds its own
|
|
# 2-module fixtures in a private mktemp dir.
|
|
$(BIN)/test_xmod_ident_prefer: test/wcc/794_xmod_ident_prefer.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #1 (cgen residual of #55): cross-module bare value-global load must
|
|
# mangle reference-site by resolved module / definition-site by the
|
|
# decl's own module — runtime + cs==ww byte-id. Self-contained single-
|
|
# file multi-package probe (953 model).
|
|
$(BIN)/test_xmod_valglobal_run: test/wcc/795_xmod_valglobal_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #229 (N_DOT-base + addr-of sibling of #1): cross-module DOTTED value-
|
|
# global read AND &-address-of must mangle by the dotted module name, not
|
|
# cur_mod — runtime + cs==ww byte-id. Self-contained multi-package probe.
|
|
$(BIN)/test_xmod_valglobal_dot_run: test/wcc/796_xmod_valglobal_dot_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #16: a bare `let x: T;` (no rhs) must zero-fill its slot. cgen emitted
|
|
# the zero-fill only for 8B-primitive and >8B-composite slots — a SUB-8
|
|
# aggregate (`let c: [3]u8;`) fell through to NOTHING and read stack
|
|
# garbage (cstage == wwstage, gate-blind; ken's bytes-967 root cause).
|
|
# Runtime (cstage dirty()→probe()) + cs==ww byte-id, both dimensions/row.
|
|
$(BIN)/test_zeroinit_run: test/wcc/840_zeroinit_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #10 Fold A (wide tuple-return / sret, CALLEE side): an over-cap tuple
|
|
# return (> 4 GP or > 2 SSE eightbytes) now compiles via sret instead of
|
|
# loud-stopping at the SEND. Compile + cs==ww byte-id only — the receive
|
|
# stays loud-stopped (Fold B wires the round-trip). Self-contained probes.
|
|
$(BIN)/test_tuple_sret_callee: test/wcc/798_tuple_sret_callee.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #10 Fold B (wide tuple-return / sret, RECEIVE side): the call/receive
|
|
# end of the over-cap tuple ABI — single-var-let, destructure, reassign,
|
|
# return-forward. Runtime round-trip (the net Fold A deferred — byte-id is
|
|
# blind to a SEND/RECEIVE layout mismatch) + cs==ww byte-id. Self-contained
|
|
# single-file probes (953 model), no selfhost traversal.
|
|
# #34: append() stores the full element width per element kind — runtime
|
|
# readback (tagged box / str+slice 3-word header / struct fill / spread
|
|
# word-copy / 2-append realloc survival) + per-row cs==ww byte-id (which
|
|
# pins the wwstage elemsizeofc membsz, scratch order, and frame canary)
|
|
# + the rule-7 loud-stop for the deferred struct-from-call source shape.
|
|
$(BIN)/test_append_wide_elem: test/wcc/800_append_wide_elem.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #35 (delete-half): delete(xs[i]) single-element slice removal — runtime
|
|
# rows across every element kind (scalar/narrow/str/struct/56B tagged) +
|
|
# the deref-of-local regex fold-2b shape + checker reject rows + cs==ww
|
|
# asm byte-id (the converged-by-construction shift loop).
|
|
$(BIN)/test_delete_elem: test/wcc/804_delete_elem.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #35 (range-half, fold-5a prereq P2): delete(xs[lo:hi]) range slice
|
|
# removal — runtime rows across defaults (full/head/tail/empty/end
|
|
# boundary), the esz copy-tail spread against the dynamic src offset
|
|
# (1/2/4/8/16/24), the single-elem equivalence, cap preservation,
|
|
# operand order-of-eval + aliasing pins, the deref-of-local base, the
|
|
# indexed-base regex.ha:333 consumer shape EXACT + checker reject rows
|
|
# w/ diagnostic text + cs==ww asm byte-id (the converged-by-construction
|
|
# rdl_l/rdl_e shift loop).
|
|
$(BIN)/test_delete_range: test/wcc/809_delete_range.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #35 (insert-half): insert(xs[idx], v) single-element slice insertion —
|
|
# delete()'s twin, lowered as append-desugar + rotate-right. Runtime rows
|
|
# across every element kind (scalar/narrow/str/struct/56B tagged incl.
|
|
# the regex fold-3 typed-local + cast-rvalue consumer shapes) + idx==len
|
|
# end-insert + pre-grow idx evaluation + the deref-of-local base +
|
|
# checker reject rows w/ exact diagnostic text + cs==ww asm byte-id
|
|
# (the converged-by-construction rotate loop + @insscr frame slot).
|
|
$(BIN)/test_insert_elem: test/wcc/807_insert_elem.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# F6 (task #4, regex fold-2b): (*ts)[i].field = v / OP= v through the
|
|
# cgplaceaddr resolver — runtime rows across widths/signedness/str +
|
|
# compound ops + loud-tail reject rows w/ exact diagnostic text + cs==ww
|
|
# asm byte-id.
|
|
# #71: overlong array literal (more elements than the declared [N]) is
|
|
# a loud checker reject in BOTH stages — local/module/def/struct-field +
|
|
# the repeat-marker form (which used to clobber the saved BP) — plus
|
|
# accept guards (exact-N, repeat-fill, [_] inference) w/ runtime + asm
|
|
# byte-id on both drivers.
|
|
$(BIN)/test_arrlit_overlong: test/wcc/808_arrlit_overlong.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_placeaddr_store: test/wcc/805_placeaddr_store.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# Task #20: struct-LITERAL store into an INDEXED element (`a[i] =
|
|
# pt{...}`, `(*ts)[i].caps[k] = capture{...}`) and a DEREF place
|
|
# (`*p = pt{...}`) — pre-fix a byte-identical SILENT no-op in both
|
|
# stages (gate-blind; the regex fold-5a groupstart capture store).
|
|
# Runtime readback rows + asm byte-id per row on both drivers.
|
|
$(BIN)/test_idx_structlit_store: test/wcc/809_idx_structlit_store.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #24 (fold-5 prereq, PG5 wwstage pair): field read/assign through an
|
|
# annotation-less struct-literal binding `let p = pt{...}` — pre-fix
|
|
# the wwstage checker planted the struct BODY node (N_TSTRUCT) as the
|
|
# inferred let's type, no N_TNAME-keyed cgen arm matched, and `p.f`
|
|
# leaked the FIELD NAME as a global symbol (`MOVQ f(SB)`, link-fail;
|
|
# #211 name-leak family) while a tagged-field assign hit the
|
|
# assign-resolver loud bound. Runtime rows + asm byte-id per row.
|
|
$(BIN)/test_inferred_let_struct: test/wcc/811_inferred_let_struct.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# Task #49 (Family A, ken silent-set triage): whole-aggregate ASSIGN
|
|
# `b = a` copied word0 only — one MOVQ for any struct/array/tuple — in
|
|
# BOTH stages, byte-identical, gate-blind. Same class at the structlit
|
|
# fill field-from-ident, the deref place (#31-A) and the module-let
|
|
# global. Fixed via the ONE mem-to-mem funnel (cg_aggcopy/aggcopy fed
|
|
# by aggarg_srcaddr); non-addressable aggregate rhs dies loud. Runtime
|
|
# readback rows (the only oracle for a gate-blind class) + per-row
|
|
# asm byte-id.
|
|
$(BIN)/test_agg_assign_width: test/wcc/812_agg_assign_width.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# F8+F9 (tasks #5/#12, regex fold-2b): `?` interim single-success gate
|
|
# (|success| > 1 loud-rejected on BOTH stages until task #14's
|
|
# subset-union typing) + direct `f()? is T` / `match (f()?)` reject
|
|
# parity — reject rows w/ exact per-stage diagnostic text, accept rows
|
|
# runtime + cs==ww asm byte-id.
|
|
$(BIN)/test_tryprop_multisuccess: test/wcc/806_tryprop_multisuccess.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# FA1 (task #15, regex fold-2b): append(*p, v) / append(*p, xs...)
|
|
# through a pointer-to-slice place via the cgplaceaddr resolver —
|
|
# runtime rows across element kinds + spread + realloc/frame-integrity
|
|
# + loud-tail reject rows w/ exact diagnostic text + cs==ww asm byte-id.
|
|
$(BIN)/test_append_place: test/wcc/806_append_place.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #237: a tuple-typed struct field must contribute its real slot width to
|
|
# the enclosing struct's slotsize — pure cs==ww .s byte-id (frame size).
|
|
$(BIN)/test_struct_tuple_field_slot: test/wcc/930_struct_tuple_field_slot.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #15: widening a bare *vtable into a NAMED-alias variant (`stream` =
|
|
# *vtable) of `(file | stream)` must compute the right tag, not default
|
|
# to tag 0. Both-stage byte-id + runtime, plus a degenerate-ambiguity
|
|
# reject row (drew's >=2 guard). Self-contained single-file probes.
|
|
$(BIN)/test_named_ptr_alias_variant_widen: test/wcc/789_named_ptr_alias_variant_widen.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #213: bare `let b: T;` of an 8B single-field struct must zero-init the
|
|
# slot (cstage does; wwstage skipped → read-before-init garbage + 778
|
|
# cs!=ww). Both-stage byte-id + a read-before-init correctness row.
|
|
$(BIN)/test_single_field_struct_zeroinit: test/wcc/790_single_field_struct_zeroinit.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #9: returning a STRUCT variant of a LARGE (>4-eightbyte) tagged union.
|
|
# Both-stage byte-id + runtime (reads tag AND the widened &fn field, so a
|
|
# dropped-store regression can't hide behind self-consistent byte-id).
|
|
# Self-contained single-file probes via the driver, no lib imports.
|
|
$(BIN)/test_structvariant_largeunion_return: test/wcc/785_structvariant_largeunion_return.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #11: narrow deref-store through *(!i32-alias) must emit MOVL (4B), not
|
|
# MOVQ (8B which over-writes the adjacent 4 bytes). Both-stage byte-id +
|
|
# runtime over-write guard (sentinel high word survives iff MOVL).
|
|
# Self-contained single-file probes via the driver, no lib imports.
|
|
$(BIN)/test_narrow_alias_deref_store: test/wcc/786_narrow_alias_deref_store.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_fmt_mods_run: test/wcc/780_fmt_mods_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
lib/fmt/fmt.ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_fmt_scanoverflow_run: test/wcc/989_fmt_scanoverflow_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
lib/fmt/fmt.ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_fmt_compositions_run: test/wcc/781_fmt_compositions_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
lib/fmt/fmt.ww \
|
|
lib/memio/memio.ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_fmt_int_run: test/wcc/815_fmt_int_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
lib/fmt/fmt.ww \
|
|
lib/memio/memio.ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_bufio_vstream_run: test/wcc/778_bufio_vstream_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
lib/bufio/bufio.ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_log_vstream_run: test/wcc/779_log_vstream_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
lib/log/log.ww \
|
|
lib/fmt/fmt.ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_arrlit_str_full: test/wcc/711_arrlit_str_full.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_redecl: test/wcc/712_redecl.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_empty_alloc_infer: test/wcc/729_empty_alloc_infer.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_struct_field_index: test/wcc/713_struct_field_index.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_tagged_return_scratch: test/wcc/714_tagged_return_scratch.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_tagged_widen_f64: test/wcc/715_tagged_widen_f64.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_match_spill_pointer_payload: test/wcc/716_match_spill_pointer_payload.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_match_field_inplace: test/wcc/831_match_field_inplace.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_match_global_field: test/wcc/841_match_global_field.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_struct_byval_param: test/wcc/717_struct_byval_param.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_struct_multi_return_scratch: test/wcc/718_struct_multi_return_scratch.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_signed_data_emit: test/wcc/719_signed_data_emit.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_tagged_call_arg: test/wcc/720_tagged_call_arg.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_sret_struct_return: test/wcc/721_sret_struct_return.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_tagged_sret_run: test/wcc/926_tagged_sret_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_tagged_memarg_run: test/wcc/929_tagged_memarg_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_tagscr_sizes_run: test/wcc/926_tagscr_sizes_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_global_sret_run: test/wcc/940_global_sret_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_sret_narrow_field: test/wcc/730_sret_narrow_field.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_match_slice_variant: test/wcc/722_match_slice_variant.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_str_forrange_loopvar_run: test/wcc/940_str_forrange_loopvar_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_array_zeroinit_run: test/wcc/944_array_zeroinit_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_alias_accept_run: test/wcc/944_alias_accept_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_alias_cgen_b5_run: test/wcc/944_alias_cgen_b5_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_alias_cgen_b6_run: test/wcc/944_alias_cgen_b6_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_alias_emit_b7_run: test/wcc/944_alias_emit_b7_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_variant_chain_b95_run: test/wcc/944_variant_chain_b95_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_peellint_gate: test/wcc/944_peellint_gate.c tools/peellint | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_xmod_fnptr_const_run: test/wcc/949_xmod_fnptr_const_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_errtype_compare: test/wcc/949_errtype_compare.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_intbinop_mismatch: test/wcc/949_intbinop_mismatch.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_composite_call_arg: test/wcc/723_composite_call_arg.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_letdecl_zeroinit: test/wcc/724_letdecl_zeroinit.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_nested_if_labels: test/wcc/725_nested_if_labels.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_alias_leaf_collision: test/wcc/726_alias_leaf_collision.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_modcall_widen_slice: test/wcc/727_modcall_widen_slice.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_match_4arm_cross_module: test/wcc/728_match_4arm_cross_module.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_enum_modshadow: test/wcc/733_enum_modshadow.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_struct_modshadow: test/wcc/734_struct_modshadow.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_def_modshadow: test/wcc/735_def_modshadow.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_cstage_label_ssot: test/wcc/736_cstage_label_ssot.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_direnum: test/wcc/737_direnum.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_module_decl: test/wcc/738_module_decl.c $(LIB)/libwcc.a | $(BIN)
|
|
$(CC) $(CFLAGS) -Icmd/wcc -o $@ $< -Lout/lib -lwcc
|
|
|
|
$(BIN)/test_chained_index: test/wcc/739_chained_index.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_chained_write: test/wcc/740_chained_write.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_dotbase_chained: test/wcc/741_dotbase_chained.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_parse_error: test/wcc/742_parse_error.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_variadic_pack: test/wcc/743_variadic_pack.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_letcopy_struct: test/wcc/744_letcopy_struct.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_fnparams_bare_leaf_shadow: test/wcc/732_fnparams_bare_leaf_shadow.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_fnret_bare_leaf_shadow: test/wcc/731_fnret_bare_leaf_shadow.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_fnret34_modshadow: test/wcc/745_fnret34_modshadow.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_strdef_inline: test/wcc/746_strdef_inline.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_def_modqual_modshadow: test/wcc/747_def_modqual_modshadow.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_size_strategy_convergence: test/wcc/748_size_strategy_convergence.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_sumtype_forward: test/wcc/749_sumtype_forward.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_mklabel_modscoped: test/wcc/750_mklabel_modscoped.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_vararg_seq_percall: test/wcc/751_vararg_seq_percall.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_modparam_callee: test/wcc/752_modparam_callee.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_convwrap_audit: test/wcc/753_convwrap_audit.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_slice_of_slice_index: test/wcc/754_slice_of_slice_index.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_amp_dot_idx: test/wcc/755_amp_dot_idx.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_alias_chain_unwrap: test/wcc/756_alias_chain_unwrap.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_letbind_void_bang_void: test/wcc/757_letbind_void_bang_void.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_cgalloc_str_field: test/wcc/758_cgalloc_str_field.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_match_4arm_cross_module_run: test/wcc/929_match_4arm_cross_module_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_free_noop_run: test/wcc/930_free_noop_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_use_promote_alias: test/wcc/699_use_promote_alias.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_field_signed: test/wcc/660_field_signed.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_frame_argcount: test/wcc/670_frame_argcount.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_selfhost: test/wcc/990_selfhost.c $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww $(BIN)/wwdump $(BIN)/wwdump_ww $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_w6a_ww: test/wcc/991_w6a_ww.c $(BIN)/w6a $(BIN)/w6a_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_w6l_ww: test/wcc/992_w6l_ww.c $(BIN)/w6l $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# Tier-C fold (#46 c6): the sep-build legs drive BOTH tool trios — the cstage
|
|
# `ww --sep` shells out to w6c/w6a/w6l (toolpath self_dir), the wwstage
|
|
# `ww_ww --sep` to the _ww trio — plus both drivers + libwwrt.
|
|
$(BIN)/test_w6c_ww: test/wcc/994_w6c_ww.c $(BIN)/w6c_ww $(BIN)/wwdump_ww \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_ww_ww: test/wcc/993_ww_ww.c $(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_self_rebuild: test/wcc/995_self_rebuild.c $(BIN)/ww_ww \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww $(BIN)/wwdump_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_selfcheck: test/wcc/950_selfcheck.c $(BIN)/wwdump_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_asserttyped_gap: test/wcc/901_asserttyped_gap.c $(BIN)/ww $(BIN)/wwdump_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_dyn_ww: test/wcc/996_dyn_ww.c $(BIN)/ww $(BIN)/w6l $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_attest_record: test/wcc/911_attest_record.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# C2b — #6 @test drop/keep/link via direct w6c/w6c_ww on import-free fixtures
|
|
# (both stages → all six tools + libwwrt for the linkfail leg).
|
|
$(BIN)/test_attest_drop: test/wcc/911_attest_drop.c $(BIN)/w6c $(BIN)/w6c_ww \
|
|
$(BIN)/w6a $(BIN)/w6a_ww $(BIN)/w6l $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# C2c — #23/#30 decl-namespace (dup family + builtin carve-out via direct
|
|
# w6c/w6c_ww) + module-fn coexistence (dir-package `ww build --sep` + run,
|
|
# both driver stages + cross-order byte-id) → all six tools + drivers +
|
|
# libwwrt for the builtin_redecl link.
|
|
$(BIN)/test_declns_sep: test/wcc/989_declns_sep.c $(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6a_ww \
|
|
$(BIN)/w6l $(BIN)/w6l_ww $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #9 (BUG-A) — the lexer must clear a pending modpath when a `//ww:module-reset`
|
|
# is recognized in the same skipws run (empty/export-less inlined module body).
|
|
# Feeds the composed adjacency unit DIRECTLY to w6c/w6c_ww (the driver trips #11
|
|
# first), then assembles+links+runs → all four frontend/asm/link tools + libwwrt.
|
|
$(BIN)/test_modresetadj_run: test/wcc/989_modresetadj_run.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #11 (BUG-C) — a decl-less primary module's `.wwi` `package` line must carry
|
|
# the real leaf, not the default "main", else its importer rejects the dep.
|
|
# Table-driven over empty/comment-only/nested-path shapes; feeds the composed
|
|
# producer + importer units straight to w6c/w6c_ww (.wwi leaf + byte-id +
|
|
# import resolves cs==ww). Frontends only — no asm/link/run leg.
|
|
$(BIN)/test_wwileaf_run: test/wcc/989_wwileaf_run.c \
|
|
$(BIN)/w6c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# #95 — .wwi producer must preserve the `...` union-spread marker; dir-package
|
|
# `ww build --sep` + run, both driver stages, 2-arm + 3-arm shapes + cs==ww.
|
|
$(BIN)/test_wwispread_sep: test/wcc/989_wwispread_sep.c $(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6a_ww \
|
|
$(BIN)/w6l $(BIN)/w6l_ww $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_fmt_run: test/wcc/970_fmt_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_log_run: test/wcc/971_log_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_fnmatch_run: test/wcc/972_fnmatch_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_shlex_run: test/wcc/973_shlex_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_getenv_run: test/wcc/974_getenv_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_dirs_run: test/wcc/975_dirs_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 975_dirs_toolong_run (F14 #69): an over-long composed path must abort
|
|
# loudly, not silently mkdir a truncated wrong directory. Builds+runs a
|
|
# dirs.config fixture on BOTH driver twins under a short and a ~260B HOME.
|
|
$(BIN)/test_dirs_toolong_run: test/wcc/975_dirs_toolong_run.c \
|
|
$(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_stat_run: test/wcc/976_stat_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_time_run: test/wcc/977_time_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_intdiv_signed: test/wcc/978_intdiv_signed.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_hex_run: test/wcc/979_hex_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_utf8_run: test/wcc/968_utf8_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_bytes_run: test/wcc/967_bytes_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_path_run: test/wcc/989_path_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_ascii_run: test/wcc/904_ascii_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_tok_run: test/wcc/904_tok_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_nkname_run: test/wcc/905_nkname_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_strconv_int_run: test/wcc/922_strconv_int_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_stof_run: test/wcc/909_stof_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_ftos_run: test/wcc/908_ftos_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_strings_run: test/wcc/966_strings_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_memio_run: test/wcc/980_memio_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_temp_run: test/wcc/981_temp_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_getopt_run: test/wcc/982_getopt_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_errno_run: test/wcc/902_errno_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_base32_run: test/wcc/983_base32_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_base64_run: test/wcc/984_base64_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_adler32_run: test/wcc/985_adler32_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_crc16_run: test/wcc/986_crc16_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_crc32_run: test/wcc/987_crc32_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_crc64_run: test/wcc/988_crc64_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_siphash_run: test/wcc/989_siphash_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_sha256_run: test/wcc/989_sha256_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_regex_run: test/wcc/989_regex_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_lib_byteid: test/wcc/989_lib_byteid.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_m2wwi_run: test/wcc/989_m2wwi_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6c_ww $(BIN)/wwdump $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# M3 `.wwi` separate-compile CONSUMER gate (task #22 arc). Drives both
|
|
# toolchains: w6c/w6c_ww (-c codegen filter), w6a/w6a_ww, w6l/w6l_ww for
|
|
# the per-package .s byte-id + cs==ww .s/exe + determinism + behavioral
|
|
# soak on the synth leaf->mid->root fixture. COLD: .wwi materialized fresh.
|
|
$(BIN)/test_m3sep_run: test/wcc/989_m3sep_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6a_ww $(BIN)/w6l $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_sepbuild_run drives `ww build --sep` + `ww_ww build --sep` (the
|
|
# M3-tail commit-3 build_one_sep driver) end-to-end on the real lib chain
|
|
# root->os->{rt,time}. Needs BOTH driver stages + both compiler stages
|
|
# (the keystone re-runs w6c -c on the bodies-unit).
|
|
$(BIN)/test_sepbuild_run: test/wcc/989_sepbuild_run.c $(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6a_ww \
|
|
$(BIN)/w6l $(BIN)/w6l_ww $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_sepscratch_run (#59) — the driver must rm its per-build `.sepwork`
|
|
# scratch on `run`/`test` (keepscratch 0) and KEEP it on `build -o`
|
|
# (keepscratch 1, the byte-id gates read it). Drives BOTH driver stages on
|
|
# a trivial root, so it needs both driver + both compiler + both linker
|
|
# stages + libwwrt (a `run` end-to-end build).
|
|
$(BIN)/test_sepscratch_run: test/wcc/989_sepscratch_run.c $(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6a_ww \
|
|
$(BIN)/w6l $(BIN)/w6l_ww $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_barefn_collide_run — #84 cgen bare-module fn-leaf collision gate. A
|
|
# package-less root's bare `fn run` must stay BARE (distinct from an
|
|
# imported `aa.run`), not mis-mangle onto the import (a #263-class silent
|
|
# dead-dup). Drives BOTH driver stages on a real dir-package import, so it
|
|
# needs both driver + both compiler + both linker stages + libwwrt.
|
|
$(BIN)/test_barefn_collide_run: test/wcc/989_barefn_collide_run.c $(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6a_ww \
|
|
$(BIN)/w6l $(BIN)/w6l_ww $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_sepdotpath_run — sep-build of a DOTTED-path (multi-component) package
|
|
# (#57): the producer must tag a primary body by its full dotted import path
|
|
# (`//ww:module-reset a.b`), not the leaf `package` clause, so definer ==
|
|
# importer. Drives BOTH driver stages (synthetic a.b + c graph) and re-greps
|
|
# the producer .s, so it needs both driver + both compiler + both linker
|
|
# stages + libwwrt for the link.
|
|
$(BIN)/test_sepdotpath_run: test/wcc/989_sepdotpath_run.c $(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6a_ww \
|
|
$(BIN)/w6l $(BIN)/w6l_ww $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_seproot_export_run — sep-build of a ROOT whose `export fn` references an
|
|
# unexported LOCAL type (#69, BUG-1): the producer must NOT pass `-I` for the
|
|
# root, since `-I` triggers check_exported_type, which rejects that legal
|
|
# terminal-binary pattern. Drives BOTH driver stages + replays the forced
|
|
# `-I` reject directly on the produced root unit (both compilers), so it needs
|
|
# both driver + both compiler + both linker stages + libwwrt for the link.
|
|
$(BIN)/test_seproot_export_run: test/wcc/989_seproot_export_run.c $(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6a_ww \
|
|
$(BIN)/w6l $(BIN)/w6l_ww $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_syntaxexport_run — BUG-A residual (#72) at the surviving syntax->wcc
|
|
# boundary after the #74 consolidation: syntax's exported fns name frontend
|
|
# types, so the producer's check_exported_type (recursing exported-struct
|
|
# FIELDS too) rejects until those 16 types carry `export`. Drives BOTH driver
|
|
# stages on the real lib/ww/syntax via a qualified-ref root + replays the
|
|
# producer on the produced unit (both compilers, export-strip = the bug), so
|
|
# it needs both driver + both compiler + both linker stages + libwwrt.
|
|
$(BIN)/test_syntaxexport_run: test/wcc/989_syntaxexport_run.c $(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6a_ww \
|
|
$(BIN)/w6l $(BIN)/w6l_ww $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_sepstructdef_run — sep-build of a dep exporting aggregate-initializer
|
|
# defs (N_STRUCTLIT info / N_ARRLIT arr) (#70, BUG-2): the producer must emit a
|
|
# value-LESS prototype `export def X: T;` for an aggregate-init def (DATA-global
|
|
# per #52), and the def parser must accept that bodyless form. Drives BOTH
|
|
# driver stages + reads back the dep `.wwi`, so it needs both driver + both
|
|
# compiler + both linker stages + libwwrt for the link.
|
|
$(BIN)/test_sepstructdef_run: test/wcc/989_sepstructdef_run.c $(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6a_ww \
|
|
$(BIN)/w6l $(BIN)/w6l_ww $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_sepcycle_dup — M3-tail commit-4 negative gates (#46, #31): a loud
|
|
# dep-cycle reject (both driver stages, cs==ww stderr) + the #31
|
|
# duplicate-symbol reject (both linker stages). Needs both driver stages,
|
|
# both compiler stages (w6c/w6a build the dup .o), both linker stages, and
|
|
# libwwrt.a (the dup non-vacuity single-.o link).
|
|
$(BIN)/test_sepcycle_dup: test/wcc/989_sepcycle_dup.c $(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_separchive_run — M3-tail commit-5a gate (#46, #62): per-package `.a`
|
|
# substrate (root=.o force-load, deps=.a) + the archive-path #31 dup-detect
|
|
# (PASS 3). Asserts build+run, `.a` determinism (3x), cs.a==ww.a byte-id,
|
|
# and the masked-dup reject THROUGH the `.a` path (both stages, achievable
|
|
# parity). Needs both driver + both compiler + both linker stages + libwwrt.
|
|
$(BIN)/test_separchive_run: test/wcc/989_separchive_run.c $(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6a_ww \
|
|
$(BIN)/w6l $(BIN)/w6l_ww $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_pkgcache_run — M3-tail commit-5b gate (#46, #63): the out/.pkgcache
|
|
# content-keyed package cache. COLD/dev-only (off every byte-id/bootstrap
|
|
# gate): MISS compiles, HIT skips + non-vacuously reuses byte-identical
|
|
# artifacts, and the key busts on each input class (src / dep .wwi / compiler
|
|
# md5 / flags) — both driver stages, with cs==ww cached P.o/P.wwi. Needs both
|
|
# driver + both compiler + both linker stages + libwwrt.a.
|
|
$(BIN)/test_pkgcache_run: test/wcc/989_pkgcache_run.c $(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6a_ww \
|
|
$(BIN)/w6l $(BIN)/w6l_ww $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_pkgcache_concurrent_run — #104 smoke: concurrent --sep builds sharing one
|
|
# out/.pkgcache all produce correct, byte-identical binaries (not a torn-read
|
|
# atomicity guard — that is closed by construction, #105). N concurrent builds
|
|
# share one cache + one lib pkg; each binary must be byte-identical to an
|
|
# isolated reference + run correctly. COLD/dev-only (off every byte-id/bootstrap
|
|
# gate). Needs both driver + compiler + asm + linker stages + libwwrt.a.
|
|
$(BIN)/test_pkgcache_concurrent_run: test/wcc/989_pkgcache_concurrent_run.c $(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6a_ww \
|
|
$(BIN)/w6l $(BIN)/w6l_ww $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_pkgcache_poison_run — #10 (BUG-B): a 0-byte cached P.wwi/P.o under a valid
|
|
# P.key (torn producer write) must self-heal — rejected on both lookup (MISS,
|
|
# re-derive) and store (never commit a 0-byte). Table-driven over which artifact
|
|
# is poisoned {wwi/o/both}, both driver stages. COLD/dev-only (off every byte-id/
|
|
# bootstrap gate). Needs both driver + compiler + asm + linker stages + libwwrt.a.
|
|
$(BIN)/test_pkgcache_poison_run: test/wcc/989_pkgcache_poison_run.c $(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6a_ww \
|
|
$(BIN)/w6l $(BIN)/w6l_ww $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_c6soak_run — M3-tail commit-6 dual-path soak gate, phase-1 leg (#46
|
|
# c6). Builds real lib chains (encoding.utf8 dotted + strings/bytes same-leaf
|
|
# `contains`) BOTH combined and --sep, asserts combined==sep run-equivalence
|
|
# (the M4 behavioral oracle, NOT binary identity), cs==ww per-pkg .s/.wwi, and
|
|
# the §3 distinct-label non-vacuity. Needs both driver + both compiler + both
|
|
# linker stages + libwwrt.a. (Tier-C capstone folds into 994_w6c_ww.)
|
|
$(BIN)/test_c6soak_run: test/wcc/989_c6soak_run.c $(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6a_ww \
|
|
$(BIN)/w6l $(BIN)/w6l_ww $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_septest_run — M4 E1 (#79-B) gate: `ww test --sep`. Drives BOTH driver
|
|
# stages on a passing + a failing inline @test fixture (COLD per-(case,stage)
|
|
# WW_PKGCACHE), asserting run-exit (pass=0, fail=1 = the non-vacuity teeth),
|
|
# cs==ww per-pkg .s/.wwi (rule 10), and the synth `CALL test.run` in __root.s
|
|
# (the -T synth fired under sep). Needs both driver + both compiler + both
|
|
# linker stages + libwwrt.a for the test-binary link.
|
|
$(BIN)/test_septest_run: test/wcc/989_septest_run.c $(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6a_ww \
|
|
$(BIN)/w6l $(BIN)/w6l_ww $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_coloimport_sep — #98 E3 flip-blocker: a co-located `_test` entry must
|
|
# not let its srcd shadow a self-named transitive `import <mod>` into the
|
|
# sibling file. Drives BOTH driver stages on a co-located fixture, asserting
|
|
# run-exit 0 (pre-fix the importer's fold makes w6c reject = the non-vacuity
|
|
# teeth), the dir-package registers its own .unit.ww/.wwi, and cs==ww per-pkg
|
|
# .s/.wwi (rule 10). Needs both driver + compiler + asm + linker stages.
|
|
$(BIN)/test_coloimport_sep: test/wcc/989_coloimport_sep.c $(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6a_ww \
|
|
$(BIN)/w6l $(BIN)/w6l_ww $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 989_depmain_sep — #99 E3 flip-blocker: an imported dir-package's non-exported
|
|
# `fn main` must mangle on its import path under `ww build --sep`, not emit a
|
|
# bare `TEXT main` that collides with the root unit's entry (= w6l dup-symbol).
|
|
# Drives BOTH driver stages on dotted- and single-component import fixtures,
|
|
# asserting sep build+link+run exit (pre-fix the bare-main collision makes w6l
|
|
# reject = the non-vacuity teeth), the dep's main mangles with exactly one bare
|
|
# root main, cs==ww per-pkg .s/.wwi (rule 10), and combined unaffected. Needs
|
|
# both driver + compiler + asm + linker stages.
|
|
$(BIN)/test_depmain_sep: test/wcc/989_depmain_sep.c $(BIN)/ww $(BIN)/ww_ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6a_ww \
|
|
$(BIN)/w6l $(BIN)/w6l_ww $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_bufio_run: test/wcc/998_bufio_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_random_run: test/wcc/999_random_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_checked_run: test/wcc/969_checked_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_defdim_struct_run: test/wcc/951_defdim_struct_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_arrlit_slice_run: test/wcc/953_arrlit_slice_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(BIN)/ww_ww $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_def_mangle_run: test/wcc/913_def_mangle_run.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_arr_module_index_run: test/wcc/915_arr_module_index_run.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_array_init_acceptiffits_run: test/wcc/920_array_init_acceptiffits_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_amp_def_global_run: test/wcc/921_amp_def_global_run.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_floats_run: test/wcc/952_floats_run.c $(BIN)/ww $(BIN)/w6c \
|
|
$(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_types_sizelim_run: test/wcc/958_types_sizelim_run.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_types_intlim_run: test/wcc/959_types_intlim_run.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_opaque_guards: test/wcc/961_opaque_guards.c \
|
|
$(BIN)/ww $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_sort_run: test/wcc/963_sort_run.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6a $(BIN)/w6l $(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_f64crossmod_run: test/wcc/953_f64crossmod_run.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_tuprecv_run: test/wcc/954_tuprecv_run.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
# 956 SLIM PIN (#5-C4): asserttyped stamp dimension only — runs w6c_ww and greps
|
|
# its stderr (no run/link). Value rows + byte-id live in test/lang/tuprecv_f64_test.ww.
|
|
$(BIN)/test_tuprecv_f64_run: test/wcc/956_tuprecv_f64_run.c $(BIN)/w6c_ww | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_assert_builtin_run: test/wcc/957_assert_builtin_run.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_modqualdestr_run: test/wcc/956_modqualdestr_run.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_structparam_run: test/wcc/946_structparam_run.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(BIN)/test_structret_run: test/wcc/946_structret_run.c $(BIN)/ww \
|
|
$(BIN)/w6c $(BIN)/w6c_ww $(BIN)/w6a $(BIN)/w6l \
|
|
$(LIB)/libwwrt.a | $(BIN)
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
sizelint:
|
|
@sh tools/sizelint
|
|
|
|
peellint:
|
|
@sh tools/peellint
|
|
|
|
test: all sizelint peellint $(TESTS) test-lang test-lang-byteid test-run
|
|
@WW=$(BIN)/ww BIN=$(BIN) sh test/run
|
|
|
|
test-unit: all sizelint peellint $(TESTS)
|
|
@WW=$(BIN)/ww BIN=$(BIN) UNIT=1 sh test/run
|
|
|
|
# ---- test-run: ww-native behavior harness (fold 2) ---------------------
|
|
# Drives test/runww.ww over every test/wcc/data/<name>/case.ww, building
|
|
# and running each case through the cstage `ww` driver (T1, plus the ERROR
|
|
# arm's wwstage w6c_ww leg) and checking its leading `//ww:` directive. The
|
|
# harness prints `runww: all ok` and exits 0 only if every case passes; the
|
|
# 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)
|
|
test-run: all | $(TESTS) test-lang test-lang-byteid
|
|
@BIN=$(BIN) $(BIN)/ww run test/runww.ww $(RUNWW_CASES)
|
|
|
|
# ---- test-lang: in-language @test behavior corpus (fold 2) -------------
|
|
# Runs each test/lang/*_test.ww through the cstage `ww test` subcommand.
|
|
# Each file is its own package, so one file per invocation. A failing
|
|
# @test exits non-zero and fails the target. Imports (rt/strings) resolve
|
|
# via the driver's self_dir/../../lib fallback, so no lib env is needed.
|
|
# NOT yet wired into `make test` (fold 6, gated on the T1 corpus).
|
|
test-lang: all
|
|
@set -e; for f in $(wildcard test/lang/*_test.ww); do \
|
|
echo "ww test $$f"; WW_PKGCACHE=$(OUT)/langcache $(BIN)/ww test $$f; \
|
|
done; echo "test-lang: all ok"
|
|
|
|
# ---- test-lang-byteid: T2 cross-stage .s byte-id gate (fold 4) ---------
|
|
# For every test/lang/*_test.ww, compiles it TWICE through the SAME cstage
|
|
# `ww` orchestrator swapping ONLY the frontend (WW_W6C = w6c vs w6c_ww) and
|
|
# asserts every per-package <pkg>.s (incl the synth-main __root.s) is
|
|
# byte-identical cs-vs-ww. This is the rule-10 stage-symmetry gate that
|
|
# test/runww.ww:9-15 reserves ("T2"); strictly more sensitive than re-running
|
|
# behavior. .s-ONLY by design: .o/.wwi are the assembler's surface (gated by
|
|
# 991/992) — diffing them here would false-attribute an assembler bug to cgen.
|
|
# WW_W6A/WW_W6L are pinned to the NON-_ww binaries on BOTH legs: the .s is the
|
|
# frontend's product (the assembler runs after), so the SOLE variable is
|
|
# WW_W6C. Distinct WW_PKGCACHE per leg is mandatory — a shared cache lets the
|
|
# ww leg HIT the cs-built package and never run w6c_ww (false GREEN). Depends
|
|
# on `all` so both frontends are at HEAD (stale-binary is the #1 false-pass).
|
|
# Pre-push (`make test`) ONLY — never test-commit/test-unit (byte-id is being
|
|
# demoted to pre-push; a content-keyed T2 would defeat that demotion).
|
|
#
|
|
# The recipe is parameterized over an input-class = (file-list, build-verb);
|
|
# only the test/lang class ships now. SEAM for fold-6: add a second class
|
|
# (`ww build --sep` over selfhost/data) plus //ww:error reject-routing (assert
|
|
# both legs fail) — no reject cases exist in test/lang today.
|
|
LANGBYTEID_DIR = $(OUT)/langbyteid
|
|
LANGBYTEID_FILES = $(filter-out %_runonly_test.ww,$(wildcard test/lang/*_test.ww))
|
|
LANGBYTEID_VERB = test -c
|
|
LANGBYTEID_EXPECTED_MIN = 151
|
|
$(if $(LANGBYTEID_FILES),,$(error test-lang-byteid: empty corpus))
|
|
test-lang-byteid: all
|
|
@set -e; \
|
|
mkdir -p $(LANGBYTEID_DIR); \
|
|
n=0; \
|
|
for f in $(LANGBYTEID_FILES); do \
|
|
base=$(LANGBYTEID_DIR)/`basename $$f .ww`; \
|
|
rm -rf $$base.cs.sepwork $$base.ww.sepwork $$base.cs.cache $$base.ww.cache; \
|
|
WW_W6C=$(BIN)/w6c WW_W6A=$(BIN)/w6a WW_W6L=$(BIN)/w6l \
|
|
WW_PKGCACHE=$$base.cs.cache \
|
|
$(BIN)/ww $(LANGBYTEID_VERB) -o $$base.cs $$f; \
|
|
WW_W6C=$(BIN)/w6c_ww WW_W6A=$(BIN)/w6a WW_W6L=$(BIN)/w6l \
|
|
WW_PKGCACHE=$$base.ww.cache \
|
|
$(BIN)/ww $(LANGBYTEID_VERB) -o $$base.ww $$f; \
|
|
cs_set=`cd $$base.cs.sepwork && ls *.s | sort`; \
|
|
ww_set=`cd $$base.ww.sepwork && ls *.s | sort`; \
|
|
if [ "$$cs_set" != "$$ww_set" ]; then \
|
|
echo "test-lang-byteid: FAIL $$f: .s set differs cs-vs-ww"; \
|
|
echo " cs: $$cs_set"; echo " ww: $$ww_set"; exit 1; \
|
|
fi; \
|
|
echo "$$cs_set" | grep -qx __root.s || { \
|
|
echo "test-lang-byteid: FAIL $$f: no __root.s emitted"; exit 1; }; \
|
|
ns=0; \
|
|
for s in $$cs_set; do \
|
|
cmp -s $$base.cs.sepwork/$$s $$base.ww.sepwork/$$s || { \
|
|
echo "test-lang-byteid: FAIL $$f: $$s differs cs-vs-ww (rule-10)"; \
|
|
exit 1; }; \
|
|
ns=`expr $$ns + 1`; \
|
|
done; \
|
|
test $$ns -ge 1 || { echo "test-lang-byteid: FAIL $$f: 0 .s compared"; exit 1; }; \
|
|
echo "ww test-byteid $$f ($$ns .s cs==ww)"; \
|
|
n=`expr $$n + 1`; \
|
|
done; \
|
|
test $$n -ge $(LANGBYTEID_EXPECTED_MIN) || { \
|
|
echo "test-lang-byteid: corpus shrank ($$n < $(LANGBYTEID_EXPECTED_MIN))"; exit 1; }; \
|
|
echo "test-lang-byteid: $$n files cs==ww"
|
|
|
|
# ---- test-commit: per-commit default (task #10 T1) ---------------------
|
|
# Full suite, but content-key-SKIPS the expensive wwstage byte-id /
|
|
# self-compile gates (950/989_lib_byteid/990-997) when their input set is
|
|
# byte-identical to the last green run — reported as `cached`, never a
|
|
# silent skip. NOT a substitute for the push bar: `make test` stays the
|
|
# no-skip bootstrap gate. Cache lives in out/.testcache (gitignored, wiped
|
|
# by `make clean`); a green `make test` primes it. See test/run.
|
|
test-commit: all sizelint peellint $(TESTS) test-lang
|
|
@WW=$(BIN)/ww BIN=$(BIN) COMMIT=1 sh test/run
|
|
|
|
# ---- smoke: inner-loop cross-stage byte-id check on a SMALL input ------
|
|
# Compiles one self-contained fixture through cstage w6c AND wwstage
|
|
# w6c_ww and diffs the emitted .s. Catches a cs!=ww emission divergence
|
|
# (rule 10) in seconds — the per-fold inner-loop check Rob's cadence
|
|
# calls for. NOT a substitute for the full 990-997 byte-id gate, which
|
|
# self-compiles the tools via `--sep`: ALWAYS run `make test` before landing
|
|
# a cgen/ABI/compiler-lib fold. w6c consumes a flat unit (no import
|
|
# resolution), so FIXTURE must be import-free or a pre-resolved sep unit
|
|
# (<stem>.sepwork/__root.unit.ww).
|
|
# make smoke # default: rt/malloc.ww
|
|
# make smoke FIXTURE=rt/ensure.ww # any self-contained .ww
|
|
FIXTURE ?= rt/malloc.ww
|
|
smoke: $(BIN)/w6c $(BIN)/w6c_ww
|
|
@$(BIN)/w6c $(FIXTURE) > $(OUT)/smoke.cs.s || { echo "smoke: cstage w6c failed on $(FIXTURE)"; exit 1; }
|
|
@$(BIN)/w6c_ww $(FIXTURE) > $(OUT)/smoke.ww.s || { echo "smoke: wwstage w6c_ww failed on $(FIXTURE)"; exit 1; }
|
|
@if cmp -s $(OUT)/smoke.cs.s $(OUT)/smoke.ww.s; then \
|
|
echo "smoke OK: cs == ww .s for $(FIXTURE) (`wc -l < $(OUT)/smoke.cs.s` lines)"; \
|
|
else \
|
|
echo "smoke FAIL: cs != ww .s for $(FIXTURE)"; \
|
|
diff -u $(OUT)/smoke.cs.s $(OUT)/smoke.ww.s | head -40; \
|
|
exit 1; \
|
|
fi
|
|
|
|
install: all
|
|
mkdir -p $(PREFIX)/bin $(PREFIX)/lib
|
|
cp $(BIN)/ww $(PREFIX)/bin/
|
|
cp $(LIB)/libwcc.a $(PREFIX)/lib/
|
|
|
|
clean:
|
|
rm -rf $(OUT)
|
|
|
|
# ---- bootstrap (phase 10) ----------------------------------------------
|
|
# Four-stage self-host on the SEPARATE-COMPILATION path: Cstage (these C
|
|
# tools) builds the wwstage tools, then the wwstage compiler reproduces
|
|
# itself three times with cmp ww2 == ww3 == ww4.
|
|
#
|
|
# Orchestration vs. proof — drawn explicitly so this demo claims no more
|
|
# self-host than it delivers (#66):
|
|
# - The cstage `ww` driver runs the sep GLUE only: dep-discovery,
|
|
# per-package `w6c -c -I`, archiving, and the final link. It is a
|
|
# fixed C orchestrator and is NOT part of the fixed point.
|
|
# - The fixed point ww2 == ww3 == ww4 proves the wwstage COMPILER
|
|
# (w6c, genuinely chained — stage N's frontend is stage N-1's output,
|
|
# injected via WW_W6C) plus the wwstage ASSEMBLER (w6a_ww) and LINKER
|
|
# (w6l_ww) reach a byte-stable fixed point: the load-bearing
|
|
# compiler-reproduces-itself proof. wwdump is unchainable under sep
|
|
# (it takes no -o/-I and writes asm to stdout), so the chainable sep
|
|
# frontend w6c is the bootstrapped target (test 994 pins w6c ==
|
|
# wwdump -c).
|
|
# - The wwstage DRIVER (`ww_ww`) is NOT yet in this loop: it cannot
|
|
# swap its frontend (it hardcodes <selfdir>/w6c_ww and honors no
|
|
# WW_W6C override). Closing that — so `ww_ww` itself carries the
|
|
# glue — is task #66. Until then cstage `ww` orchestrates and this
|
|
# bootstrap does NOT claim a fully wwstage-driven self-host.
|
|
#
|
|
# Why a fourth stage? Stage 3 proves stage-1 w6c_ww and ww2 (which differ
|
|
# in how they were built) emit the same machine code. Stage 4 proves ww3 is
|
|
# byte-stable when used as a compiler — i.e. the fixed point is truly
|
|
# 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
|
|
bootstrap: all
|
|
@echo "=== stage 0 (Cstage): C-built tools ==="
|
|
@echo " $(BIN)/ww (sep orchestrator) $(BIN)/w6c $(BIN)/w6a $(BIN)/w6l"
|
|
@echo
|
|
@echo "=== stage 1: wwstage tools the fixed point chains ==="
|
|
@ls -l $(BIN)/w6c_ww $(BIN)/w6a_ww $(BIN)/w6l_ww
|
|
@rm -rf $(BS) && mkdir -p $(BS)
|
|
@echo
|
|
@echo "=== stage 2: ww2 = stage-1 w6c_ww sep-compiles w6c ==="
|
|
@WW_W6C=$(BIN)/w6c_ww WW_W6A=$(BIN)/w6a_ww WW_W6L=$(BIN)/w6l_ww \
|
|
WW_PKGCACHE=$(BS)/pc2 \
|
|
$(BIN)/ww build --sep -o $(BS)/ww2 $(W6CINC) $(W6CSRC)
|
|
@ls -l $(BS)/ww2
|
|
@echo
|
|
@echo "=== stage 3: ww3 = ww2 sep-compiles w6c ==="
|
|
@WW_W6C=$(BS)/ww2 WW_W6A=$(BIN)/w6a_ww WW_W6L=$(BIN)/w6l_ww \
|
|
WW_PKGCACHE=$(BS)/pc3 \
|
|
$(BIN)/ww build --sep -o $(BS)/ww3 $(W6CINC) $(W6CSRC)
|
|
@ls -l $(BS)/ww3
|
|
@echo
|
|
@echo "=== stage 4: ww4 = ww3 sep-compiles w6c ==="
|
|
@WW_W6C=$(BS)/ww3 WW_W6A=$(BIN)/w6a_ww WW_W6L=$(BIN)/w6l_ww \
|
|
WW_PKGCACHE=$(BS)/pc4 \
|
|
$(BIN)/ww build --sep -o $(BS)/ww4 $(W6CINC) $(W6CSRC)
|
|
@ls -l $(BS)/ww4
|
|
@echo
|
|
@echo "=== fixed-point gates ==="
|
|
@cmp $(BS)/ww2 $(BS)/ww3 && echo " ww2 == ww3 ✓ (byte-identical exe)"
|
|
@cmp $(BS)/ww3 $(BS)/ww4 && echo " ww3 == ww4 ✓ (byte-identical exe, ww3 is byte-stable as a compiler)"
|
|
@echo
|
|
@echo "BOOTSTRAP OK: ww-cgen (w6c) + w6a_ww + w6l_ww reach a fixed point that holds across two iterations (sep path)."
|
|
@echo
|
|
@echo "Phase 10 remaining work:"
|
|
@echo " - delete cmd/wcc/ cmd/w6c/ cmd/w6a/ cmd/w6l/ cmd/ww/ in the final commit"
|
|
@echo
|
|
@echo "Already in selfhost/:"
|
|
@echo " - cmd/wcc/ : ww-cgen (lex/parse/check/cgen) — bootstrap fixed point"
|
|
@echo " - cmd/w6c/ : ww-w6c (lex/parse/cgen front-end) — matches wwdump_ww -c (test 994)"
|
|
@echo " - cmd/w6a/ : ww-w6a (lex/parse/asm/obj) — byte-identical to C w6a (test 991)"
|
|
@echo " - cmd/w6l/ : ww-w6l (linker w/ archive support) — byte-identical to C w6l (test 992)"
|
|
@echo " - cmd/ww/ : ww-driver (build/run/version) — byte-identical to C ww (test 993)"
|
|
|
|
# ---- nocc: bootstrap from a checked-in stage-0 binary, no cc -----------
|
|
# A fresh-checkout flow that never invokes cc. Mirrors `make bootstrap`'s
|
|
# fixed-point check but uses `bootstrap/$(ARCH)/{ww,w6c,w6a,w6l}` as the
|
|
# starting point and lands in $(OUT)/nocc/ so the cstage build under
|
|
# $(OUT)/ stays untouched. See bootstrap/README.md and BOOTSTRAP.md.
|
|
#
|
|
# `make bootstrap-snapshot` populates bootstrap/$(ARCH)/ from the
|
|
# currently-built wwstage so you can verify locally before deciding
|
|
# to commit the binaries.
|
|
ARCH ?= amd64
|
|
STAGE0 = bootstrap/$(ARCH)
|
|
NOCC_OUT = $(OUT)/nocc
|
|
NOCC_BIN = $(NOCC_OUT)/bin
|
|
NOCC_LIB = $(NOCC_OUT)/lib
|
|
NOCC_OBJ = $(NOCC_OUT)/obj
|
|
|
|
bootstrap-snapshot: wwstage
|
|
@mkdir -p $(STAGE0)
|
|
@cp $(BIN)/ww_ww $(STAGE0)/ww
|
|
@cp $(BIN)/w6c_ww $(STAGE0)/w6c
|
|
@cp $(BIN)/w6a_ww $(STAGE0)/w6a
|
|
@cp $(BIN)/w6l_ww $(STAGE0)/w6l
|
|
@echo "snapshot: $(STAGE0)/{ww,w6c,w6a,w6l} populated from $(BIN)/*_ww"
|
|
@echo " (gitignored — 'git add -f bootstrap/$(ARCH)/*' to ship)"
|
|
|
|
nocc:
|
|
@for f in ww w6c w6a w6l; do \
|
|
test -x $(STAGE0)/$$f || { \
|
|
echo "$@: missing $(STAGE0)/$$f"; \
|
|
echo "$@: run 'make bootstrap-snapshot' first, or read bootstrap/README.md"; \
|
|
exit 1; \
|
|
}; \
|
|
done
|
|
@echo "=== nocc: starting from $(STAGE0) (no cc invoked) ==="
|
|
@rm -rf $(NOCC_OUT)
|
|
@mkdir -p $(NOCC_BIN) $(NOCC_LIB) $(NOCC_OBJ)
|
|
@# Stage 0: drop bootstrap binaries under both natural names and
|
|
@# the _ww-suffixed names the driver expects when shelling out.
|
|
@for f in ww w6c w6a w6l; do \
|
|
cp $(STAGE0)/$$f $(NOCC_BIN)/$$f; \
|
|
cp $(STAGE0)/$$f $(NOCC_BIN)/$${f}_ww; \
|
|
done
|
|
@# Assemble libwwrt.a using stage-0 w6a — the linker needs it for
|
|
@# every wwstage-built binary in the next stage. Member order
|
|
@# follows $(RT_S) so the embedded symbol table matches the
|
|
@# cstage-built libwwrt.a (cstage uses ar rcs $(RT_OBJ), same
|
|
@# order).
|
|
@objs=""; for s in $(RT_S); do \
|
|
b=`basename $$s .s`; \
|
|
$(NOCC_BIN)/w6a -o $(NOCC_OBJ)/$$b.o $$s; \
|
|
objs="$$objs $(NOCC_OBJ)/$$b.o"; \
|
|
done; $(AR) rcs $(NOCC_LIB)/libwwrt.a $$objs
|
|
@echo "=== stage 1: stage-0 rebuilds the wwstage tools from source ==="
|
|
@# The driver's default lib path is $self_dir/../../lib — under
|
|
@# $(NOCC_BIN) that resolves to $(NOCC_OUT)/lib (libwwrt only).
|
|
@# 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)/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)/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? ==="
|
|
@cmp $(NOCC_BIN)/w6c_ww1 $(STAGE0)/w6c && echo " w6c ✓"
|
|
@cmp $(NOCC_BIN)/w6a_ww1 $(STAGE0)/w6a && echo " w6a ✓"
|
|
@cmp $(NOCC_BIN)/w6l_ww1 $(STAGE0)/w6l && echo " w6l ✓"
|
|
@cmp $(NOCC_BIN)/ww_ww1 $(STAGE0)/ww && echo " ww ✓"
|
|
@echo
|
|
@echo "NOCC OK: $(STAGE0)/* reproduces itself from source. cc not invoked."
|
|
|
|
.PHONY: all cstage wwstage test test-unit test-commit test-run test-lang test-lang-byteid smoke sizelint peellint install clean bootstrap nocc bootstrap-snapshot
|