CC=g++
PROJECT_NAME=projekt_zespolowy
SOURCES=./src/ball.cpp ./src/graphics.cpp ./src/sounds.cpp ./src/main.cpp ./src/game.cpp ./src/background.cpp
HEADERS=./src/include.h
COMPILE_TARGETS=$(SOURCES)
STRICT_OUTPUT_FILE=strict
RELEASE_OUTPUT_FILE=release
DEBUG_OUTPUT_FILE=debug
COVERAGE_OUTPUT_FILE=coverage
PROFILE_OUTPUT_FILE=profile
STRICT_CFLAGS=-Wshadow -Wpointer-arith -Wunused -Wformat=2 -Wconversion -Wunreachable-code
RELEASE_CFLAGS=-O3 -march=athlon-xp -mfpmath=sse -fprefetch-loop-arrays -ffast-math  -fomit-frame-pointer -DNDEBUG -Wdisabled-optimization
DEBUG_CFLAGS=-ggdb3
COVERAGE_CFLAGS=-ftest-coverage -fprofile-arcs
PROFILE_CFLAGS=-pg
COMMON_CFLAGS=`sdl-config --cflags` -Wall -W -pedantic -lSDL_mixer
LIBS=`sdl-config --libs`
LDFLAGS=-s
RM=/bin/rm -f

default:
	@echo 'Prawidowe opcje wywoa make:'
	@echo 'make release'
	@echo '  tworzy program o nazwie $(RELEASE_OUTPUT_FILE) z nastpujcymi flagami:'
	@echo '  $(RELEASE_CFLAGS) $(COMMON_CFLAGS)'
	@echo 'make $(PROJECT_NAME)'
	@echo '  j.w'
	@echo 'make strict'
	@echo '  tworzy program o nazwie $(STRICT_OUTPUT_FILE) z nastpujcymi flagami:'
	@echo '  $(STRICT_CFLAGS) $(COMMON_CFLAGS)'
	@echo 'make debug'
	@echo '  tworzy program o nazwie $(DEBUG_OUTPUT_FILE) z nastpujcymi flagami:'
	@echo '  $(DEBUG_CFLAGS) $(COMMON_CFLAGS)'
	@echo 'make coverage'
	@echo '  tworzy program o nazwie $(COVERAGE_OUTPUT_FILE) z nastpujcymi flagami:'
	@echo '  $(COVERAGE_CFLAGS) $(COMMON_CFLAGS)'
	@echo 'make profile'
	@echo '  tworzy program o nazwie $(PROFILE_OUTPUT_FILE) z nastpujcymi flagami:'
	@echo '  $(PROFILE_CFLAGS) $(COMMON_CFLAGS)'
	@echo 'make all'
	@echo '  tworzy wszystkie powysze'
	@echo 'make clean'
	@echo '  usuwa wszystkie powysze, a take inne pliki powstae przy kompilacji, oraz podczas uzycia gprof i gcov'
	@echo
	@echo 'Biblioteki:'
	@echo '  $(LIBS)'
	@echo 'Opcje linkera:'
	@echo '  $(LDFLAGS)'
	@echo
	@echo 'Ustaw flagi tak, aby odpowiaday twojemu systemowi!'

strict: $(SOURCES) $(HEADERS)
	$(CC) $(COMPILE_TARGETS) -o $(STRICT_OUTPUT_FILE) \
$(LDFLAGS) $(LIBS) $(STRICT_CFLAGS) $(COMMON_CFLAGS)

release: $(SOURCES) $(HEADERS)
	$(CC) $(COMPILE_TARGETS) -o $(RELEASE_OUTPUT_FILE) \
$(LDFLAGS) $(LIBS) $(RELEASE_CFLAGS) $(COMMON_CFLAGS)

$(PROJECT_NAME): $(SOURCES) $(HEADERS)
	$(CC) $(COMPILE_TARGETS) -o $(RELEASE_OUTPUT_FILE) \
$(LDFLAGS) $(LIBS) $(RELEASE_CFLAGS) $(COMMON_CFLAGS)

coverage: $(SOURCES) $(HEADERS)
	$(CC) $(COMPILE_TARGETS) -o $(COVERAGE_OUTPUT_FILE) \
$(LDFLAGS) $(LIBS) $(COVERAGE_CFLAGS) $(COMMON_CFLAGS)

debug: $(SOURCES) $(HEADERS)
	$(CC) $(COMPILE_TARGETS) -o $(DEBUG_OUTPUT_FILE) \
$(LDFLAGS) $(LIBS) $(DEBUG_CFLAGS) $(COMMON_CFLAGS)

profile: $(SOURCES) $(HEADERS)
	$(CC) $(COMPILE_TARGETS) -o $(PROFILE_OUTPUT_FILE) \
$(LDFLAGS) $(LIBS) $(PROFILE_CFLAGS) $(COMMON_CFLAGS)

all:	release debug coverage profile strict

clean:
	$(RM) $(DEBUG_OUTPUT_FILE) $(COVERAGE_OUTPUT_FILE) $(RELEASE_OUTPUT_FILE) \
$(PROFILE_OUTPUT_FILE) $(STRICT_OUTPUT_FILE) $(PROJECT_NAME).bbg \
$(PROJECT_NAME).bb $(PROJECT_NAME).c.gcov $(PROJECT_NAME).da \
gmon.out

#(c)boniek da bos :>
