CC ?= cc
CFLAGS ?= -O2 -g
CFLAGS += -std=c11 -Wall -Wextra -Wpedantic -Wno-unused-function -Wno-logical-op-parentheses
LDLIBS += -lm

COMMON_OBJECTS = parser.o typecheck.o probe.o compiler.o platform.o

ifeq ($(OS),Windows_NT)
EXEEXT := .exe
else
EXEEXT :=
endif

.PHONY: all test clean debug

all: vedit$(EXEEXT)

vedit$(EXEEXT): main.o $(COMMON_OBJECTS)
	$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS)

tests$(EXEEXT): tests.o $(COMMON_OBJECTS)
	$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS)

test: tests$(EXEEXT)
	./tests$(EXEEXT)

debug: CFLAGS := -std=c23 -O0 -g3 -Wall -Wextra -Wpedantic -Wno-unused-function \
	-Wno-logical-op-parentheses -fsanitize=address,undefined
debug: clean tests$(EXEEXT)
	./tests$(EXEEXT)

clean:
	$(RM) vedit vedit.exe tests tests.exe *.o