# compiler
CC=gcc

DEFINES = 
DDEFINES = 

CFLAGS = -c -O3 -Wall -fmessage-length=0 $(DEFINES)
CFLAGS_D = -c -O0 -g3 -Wall -fmessage-length=0 $(DDEFINES)

INCDIR = 

LFLAGS = -static-libgcc -s
LFLAGS_D = -static-libgcc

LIBS = -lwinmm
LIBS_D = -lwinmm

OBJ_DIR = obj
ROBJ_DIR = $(OBJ_DIR)/Release
DOBJ_DIR = $(OBJ_DIR)/Debug

BIN_DIR = bin

OBJS=	mididemo.o \
	example1.o \
	example2.o \
	example3.o \
	example4.o \
	example5.o \
	example6.o \
	example7.o \
	example8.o \
	example9.o

ROBJS = $(OBJS:%.o=$(ROBJ_DIR)/%.o)
DOBJS = $(OBJS:%.o=$(DOBJ_DIR)/%.o)

# targets
DIST = mididemo.zip
BIN = $(BIN_DIR)/mididemo.exe
BIN_D = $(BIN_DIR)/mididemod.exe

default: release

release: $(BIN)

debug: $(BIN_D)

$(BIN): $(ROBJS)
	mkdir -p $(BIN_DIR)
	$(CC) -o $@ $(LFLAGS) $^ $(LIBS)
	cp *.mid $(BIN_DIR)

$(BIN_D): $(DOBJS)
	mkdir -p $(BIN_DIR)
	$(CC) -o $@ $(LFLAGS_D) $^ $(LIBS_D)
	cp *.mid $(BIN_DIR)

$(ROBJ_DIR)/%.o: %.c %.h
	$(CC) -o $@ $(CFLAGS) $(INCDIR) $<

$(ROBJ_DIR)/%.o: %.c
	$(CC) -o $@ $(CFLAGS) $(INCDIR) $<

$(DOBJ_DIR)/%.o: %.c %.h
	$(CC) -o $@ $(CFLAGS_D) $(INCDIR) $<

$(DOBJ_DIR)/%.o: %.c
	$(CC) -o $@ $(CFLAGS_D) $(INCDIR) $<

$(ROBJS): | $(ROBJ_DIR)

$(DOBJS): | $(DOBJ_DIR)

$(ROBJ_DIR): | $(OBJ_DIR)
	mkdir -p $(ROBJ_DIR)

$(DOBJ_DIR): | $(OBJ_DIR)
	mkdir -p $(DOBJ_DIR)

$(OBJ_DIR):
	mkdir -p $(OBJ_DIR)

dist: release
	zip -j $(DIST) $(BIN) *.c *.mid Makefile

clean:
	rm -rf $(OBJ_DIR)

clobber: clean
	rm -rf $(BIN_DIR) $(DIST) 

