# chlang v3 — pure C
CC = gcc
CFLAGS = -O2 -Wall
LIBS = -lm

all: chlang chlang_arch board_builder state_ledger chlang_teach

chlang: chlang.c capability_table.c board_builder.c board_config.c ../c_library/20_state/state_ledger.c ../c_library/24_doc/common_doc.c ../c_library/23_agent/consume_check.c ../c_library/23_agent/raman_chat.c
	$(CC) $(CFLAGS) -DDOC_ENGINE_LINK -DCONSUME_ENGINE_LINK -DCHAT_ENGINE_LINK -o chlang chlang.c capability_table.c board_builder.c board_config.c ../c_library/20_state/state_ledger.c ../c_library/24_doc/common_doc.c ../c_library/23_agent/consume_check.c ../c_library/23_agent/raman_chat.c

capability_table: capability_table.c
	$(CC) $(CFLAGS) -DTABLE_MAIN -o capability_table capability_table.c

chlang_arch: chlang_arch.c
	$(CC) $(CFLAGS) -o chlang_arch chlang_arch.c $(LIBS)

board_builder: board_builder.c board_config.c
	$(CC) $(CFLAGS) -DBOARD_BUILDER_STANDALONE -o board_builder board_builder.c board_config.c

state_ledger: ../c_library/20_state/state_ledger.c
	$(CC) $(CFLAGS) -DSTATE_STANDALONE -o state_ledger ../c_library/20_state/state_ledger.c

chlang_teach: teach.c
	$(CC) $(CFLAGS) -o chlang_teach teach.c

# LIB RULE audit: every library script must compile. Run from setup/.
audit:
	@fail=0; total=0; \
	for f in ../c_library/*_*/*.c ../c_library/13_skills/*/*.c; do \
	  total=$$((total+1)); \
	  gcc -c "$$f" -o /tmp/chlang_audit.o 2>/dev/null || { echo "FAIL: $$f"; fail=$$((fail+1)); }; \
	done; \
	rm -f /tmp/chlang_audit.o; \
	echo "audit: $$total scripts compiled, $$fail failures"; \
	[ $$fail -eq 0 ] || exit 1

install: all audit
	./chlang_teach

clean:
	rm -f chlang chlang_arch board_builder chlang_teach state_ledger
