## ********************************************************************
# 	Makefile for Mini-Othello
#
#	Type "make" for using GCC or "make bcc" for using Borland C++.
#	(Assuming the compiler(s) have been properly installed)
# *********************************************************************

CC = g++
CFLAGS = -Wall -O2
PROGRAM_NAME = othello


$(PROGRAM_NAME): othello.o game.o minimax.o board.o
	$(CC) $(CFLAGS) -o $(PROGRAM_NAME) othello.o game.o minimax.o board.o

# ---------------------------------------------
# Swap the following block with the previous one (i.e. uncomment one and 
# comment out the other) to enable external endgame solver.
# -- Must have endgamecx.c and endgamecx.h
# ---------------------------------------------

# $(PROGRAM_NAME): othello.o game.o minimax.o board.o endgamecx.o
#	$(CC) $(CFLAGS) -o $(PROGRAM_NAME) othello.o game.o minimax.o board.o endgamecx.o


othello.o: othello.cpp othello.hpp
	$(CC) $(CFLAGS) -c -o othello.o othello.cpp
game.o: game.cpp game.hpp
	$(CC) $(CFLAGS) -c -o game.o game.cpp
board.o: board.cpp board.hpp
	$(CC) $(CFLAGS) -c -o board.o board.cpp
minimax.o: minimax.cpp minimax.hpp
	$(CC) $(CFLAGS) -c -o minimax.o minimax.cpp
endgamecx.o: endgamecx.c endgamecx.h
	$(CC) $(CFLAGS) -c -o endgamecx.o endgamecx.c

clean:
	rm -f *.o *.obj *~ core $(PROGRAM_NAME).tds

ca:
	rm -f *.o *.obj *~ $(PROGRAM_NAME) $(PROGRAM_NAME).exe $(PROGRAM_NAME).tds

cls: 
	del /q *.o *.obj *~ $(PROGRAM_NAME).tds

cleangcc:
	rm -f *.o *~ core

upx:
	upx -9 -q $(PROGRAM_NAME).exe

gccupx:
	make
	upx -9 -q $(PROGRAM_NAME).exe



## ------- For compile using Borland C++ Compiler ----------

### Options for Borland C++ Compiler 
BCC = bcc32
# -w-xxxx for suppress some not too useful warnings
BCC_FLAGS = -O2 -w-8008 -w-8066 -w-8057 -w-8004 -w-8027


bcc: othello.obj game.obj board.obj minimax.obj
	$(BCC) $(BCC_FLAGS) -e$(PROGRAM_NAME) othello.obj game.obj board.obj minimax.obj

othello.obj: othello.cpp othello.hpp
	$(BCC) $(BCC_FLAGS) -c -oothello.obj othello.cpp
game.obj: game.cpp game.hpp
	$(BCC) $(BCC_FLAGS) -c -ogame.obj game.cpp
board.obj: board.cpp board.hpp
	$(BCC) $(BCC_FLAGS) -c -oboard.obj board.cpp
minimax.obj: minimax.cpp minimax.hpp
	$(BCC) $(BCC_FLAGS) -c -ominimax.obj minimax.cpp

bccupx:
	make bcc
	upx -9 -q $(PROGRAM_NAME).exe

cleanbcc:
	rm -f *.obj *~ $(PROGRAM_NAME).tds
