COMMON_SRCS	=	src/cli.c src/globals.c src/lex.c src/parse.c	\
			src/util.c src/codegen.c src/symbol_table.c
TARGET_SRCS	=	src/slang.c src/slang-format.c
COMMON_OBJS	=	$(COMMON_SRCS:src/%.c=obj/%.o)
TARGET_OBJS	=	$(TARGET_SRCS:src/%.c=obj/%.o)
ALL_OBJS	=	$(TARGET_OBJS) $(COMMON_OBJS)
DEPS		=	$(ALL_OBJS:obj/%.o=obj/%.d)
TARGETS		=	bin/slang bin/slang-format
CODEGEN_TESTS	=	$(wildcard tests/codegen*-tests/*.sh)
CFLAGS		:=	-Wall -Wextra -Iinclude -g -MMD -MP

.PHONY:	all clean test

all: $(TARGETS)

bin/slang:	obj/slang.o $(COMMON_OBJS)
	mkdir -p bin
	$(CC) $(CFLAGS) -o $@ $^

bin/slang-format:	obj/slang-format.o $(COMMON_OBJS)
	mkdir -p bin
	$(CC) $(CFLAGS) -o $@ $^

test: bin/slang
	@ for file in $(CODEGEN_TESTS); do bash $$file $< || exit 0; done

$(ALL_OBJS):	obj/%.o:	src/%.c
	mkdir -p obj
	$(CC)  $(CFLAGS) -c -o $@ $<

clean:
	rm -fr bin
	rm -fr obj

-include $(DEPS)
