CASES := \
	case00_boot_scalar \
	case01_scalar_spawn \
	case02_tensor_spawn_stop \
	case03_dual_fetch_issue \
	case04_scalar_barrier \
	case05_tensor_barrier \
	case06_masked_barrier \
	case07_tensor_csr_tmc \
	case08_tensor_lsu_optional \
	case09_scalar_tmem_ldst \
	case10_tensor_scalar_tmem_handoff \
	case11_scalar_tmem_softmax_stage \
	case12_flash_pv_accum \
	case12_1_scalar_tmem_cb_probe \
	case12_2_flash_pv_p_probe \
	case12_3_scalar_tmem_lane_store \
	case13_flash_pv_two_warps \
	case14_flash_pv_k64 \
	case15_flash_softmax_pv_stage \
	case16_flash_full_pipeline \
	case17_flash_exp_softmax_probe \
	case18_scalar_fexp \
	case20_flash_bwd_fused \
	case21_moe_gating \
	case22_gemm_silu \
	case23_softmax_only \
	case24_flash_sw_pipeline

SMOKE_CASES := \
	case00_boot_scalar \
	case01_scalar_spawn \
	case02_tensor_spawn_stop \
	case03_dual_fetch_issue

BARRIER_CASES := \
	case04_scalar_barrier \
	case05_tensor_barrier \
	case06_masked_barrier

.PHONY: all smoke barriers full clean clean-all $(CASES)

all: full

smoke: $(SMOKE_CASES)

barriers: $(BARRIER_CASES)

full: $(CASES)

$(CASES):
	$(MAKE) -C $@

clean:
	set -e; for dir in $(CASES); do $(MAKE) -C $$dir clean; done

clean-all:
	set -e; for dir in $(CASES); do $(MAKE) -C $$dir clean-all; done
