#-*- mode: makefile; indent-tabs-mode: t; coding: utf-8; show-trailing-whitespace: t -*-
# Makefile
# Copyright 2022 Angelo Rossi <angelo.rossi.homelab@gmail.com>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
#    this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
#    this list of conditions and the following disclaimer in the documentation
#    and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors
#    may be used to endorse or promote products derived from this software
#    without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.

# Some utilities
OS=${shell uname -s}

# Debug enabled
DEBUG=1

# Defines verbose
VERBOSE=

# Defines the target name.
TARGET=gemtp++

# Linker script name.
LINKER_SCRIPT=

# Is a toolchain defined?
ifndef TOOLCHAIN
	TOOLCHAIN=gnu
endif

# The base directory for ST libraries.
ROOT=..

# Where to find source files that do not live in this directory.
SOURCES_PATH=${ROOT}/sources

# Where to find header files that do not live in the source directory.
INCLUDES_PATH=${ROOT}/includes

# Libraries path
LIBRARIES_PATH=${ROOT}/libraries

# Scripts path
SCRIPTS_PATH=${ROOT}/scripts

# Project definitions
WITH_OVER1=1
WITH_OVER20=1
WITH_OVER51=1

# Include common Makefile definitions.
include ${ROOT}/Makefile.global

# The default rule, which causes the Vibro Application to be built.
all: ${TOOLCHAIN}
all: ${TOOLCHAIN}/${TARGET}

# List rule
lst: all
lst: ${TOOLCHAIN}/${TARGET}.lst

# The rule to clean out all the build products.
clean:
	@if [ 'x${VERBOSE}' = x ];                            	\
	then                                                 	\
	     echo " [ CLEAN ] ${<}";				\
	else                                                 	\
	     echo "rm -rf ${TOOLCHAIN} ${wildcard *~} ${<}";	\
	fi
	@rm -rf ${TOOLCHAIN} ${wildcard *~} ${<}

# The rule which creates the .o and executable directory.
${TOOLCHAIN}:
	@if [ 'x${VERBOSE}' = x ];		\
	then					\
		echo " [ MKDIR ] ${TOOLCHAIN}";	\
	else					\
		echo "mkdir -p ${TOOLCHAIN}";	\
	fi
	@mkdir -p ${TOOLCHAIN}

# Rules for building the system code.
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/utilities.o
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/volt45.o
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/blkcom.o
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/dekspy.o
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/dekplt.o
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/tacsar.o
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/comlock.o
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/time.o
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/strcom.o
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/freedom.o
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/movecopy.o
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/location.o
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/algebra.o
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/random.o
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/labcom.o
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/newmods.o
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/umdeck.o
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/labl02.o
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/plot.o

ifdef WITH_OVER1
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/over1.o
endif

ifdef WITH_OVER20
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/over20.o
endif

ifdef WITH_OVER51
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/over51.o
endif


${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/datain.o
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/emtp.o
${TOOLCHAIN}/${TARGET}: ${TOOLCHAIN}/main.o

# Include the automatically generated dependency files.
ifneq (${MAKECMDGOALS},clean)
-include ${wildcard ${TOOLCHAIN}/*.d} __dummy__
endif
# DO NOT DELETE