CXX = g++
CC = gcc
LD = g++
AR = ar qf 
CFLAGS = -Iinclude -Iinclude/dui -DALLEGRO_STATICLINK -W -Wall -Wno-unused-function
LIBS = 

OBJDIR = obj

ifndef NAME
	NAME := dui
endif

ifdef DEBUG
	CFLAGS += -Werror -g -ggdb3 -DDEBUGMODE -DDEBUG
	LIBS += -g -ggdb3 -lalld_s
	OBJDIR = obj/debug
	NAME := $(NAME)_debug
	SUBDIRPARM = DEBUG=1
else
	CFLAGS += -O2 -s
	LIBS += -mwindows -O2 -s -lalleg_s
	OBJDIR = obj/release
	SUBDIRPARM = 
endif

LIBS += -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lole32 -ldinput -lddraw -ldxguid -lwinmm -ldsound

RM = del /q
BIN = $(NAME).a
WINDOWS = 1

OBJ_CPP := $(addprefix $(OBJDIR)/, $(subst src/,,$(patsubst %.cpp,%.o,$(wildcard src/*.cpp))))
OBJ_C := $(addprefix $(OBJDIR)/, $(subst src/,,$(patsubst %.c,%.o,$(wildcard src/*.c))))

all: dolib examples

$(OBJDIR)/%.o: src/%.c
	$(CC) $(CFLAGS) -o $@ -c $<

$(OBJDIR)/%.o: src/%.cpp
	$(CXX) $(CFLAGS) -o $@ -c $<

dolib: $(OBJ_C) $(OBJ_CPP)
	-$(RM) $(BIN)
	$(AR) $(BIN) $(OBJ_C) $(OBJ_CPP)
	make $(SUBDIRPARM) -C examples

clean:
ifdef WINDOWS
ifneq ($(OBJ_C),)
	-$(RM) $(subst /,\,$(OBJ_C))
	make $(SUBDIRPARM) -C examples clean
endif
ifneq ($(OBJ_CPP),)
	-$(RM) $(subst /,\,$(OBJ_CPP))
	make $(SUBDIRPARM) -C examples clean
endif
else
ifneq ($(OBJ_C),)
	-$(RM) $(OBJ_C)
	make $(SUBDIRPARM) -C examples clean
endif
ifneq ($(OBJ_CPP),)
	-$(RM) $(OBJ_CPP)
	make $(SUBDIRPARM) -C examples clean
endif
endif

veryclean: clean
	-$(RM) $(BIN)
