# Makefile
# Copyright (c) 2018 Justin Hanekom <justin_hanekom@yahoo.com>

rm		:= rm --recursive --force
mkdir	:= mkdir --parents

ada_version			:= gnat2012

src_dir				:= src
main_src_dir		:= $(src_dir)/main/ada
test_src_dir		:= $(src_dir)/test/ada
target_dir			:= target
main_target_dir		:= $(target_dir)/main/ada
test_target_dir		:= $(target_dir)/test/ada
docs_dir			:= $(target_dir)/docs

shared_or_static	:= shared
optimization_level	:= 2

src_file	:= main.adb
main_app	:= fizzbuzz
test_file	:= test_runner.adb
test_app	:= test_fizzbuzz

BASE_MAKE_FLAGS := $(BASE_MAKE_FLAGS) -$(ada_version) -$(shared_or_static) \
	-I$(main_src_dir) -C -E -gnata -gnatF -gnatn -gnatwae -gnatwl -gnaty-o \
	-k -m -s
MAKE_FLAGS	:= $(MAKE_FLAGS) $(BASE_MAKE_FLAGS) -D $(main_target_dir) \
	-O$(optimization_level) -fstack-check -funroll-loops \
	-gnatyx3abcefhiIklL5M78nprStux
TEST_MAKE_FLAGS	:= $(DEBUG_FLAGS) $(BASE_MAKE_FLAGS) -D $(test_target_dir) \
	-I$(test_src_dir) -aI/usr/include/aunit -aI/GNAT/2018/include/aunit \
	-aL/usr/lib/aunit -aL/GNAT/2018/lib/aunit -g

.DEFAULT: all
.PHONY : all
all: main

.PHONY : main
main : init_dirs
	gnatmake $(MAKE_FLAGS) -o $(target_dir)/$(main_app) $(src_file)

.PHONY : test
test : main init_dirs
	gnatmake $(TEST_MAKE_FLAGS) -o $(target_dir)/$(test_app) $(test_file)

.PHONY : docs
docs : main init_dirs

.PHONY : clean
clean :
	-@$(rm) $(main_target_dir)/*
	-@$(rm) $(test_target_dir)/*
	-@$(rm) GNAT-TEMP-*

.PHONY : clobber
clobber : clean
	-@$(rm) target

.PHONY : init_dirs
init_dirs :
	-@$(mkdir) $(main_src_dir)
	-@$(mkdir) $(test_src_dir)
	-@$(mkdir) $(main_target_dir)
	-@$(mkdir) $(test_target_dir)
	-@$(mkdir) $(docs_dir)