#---*- Makefile -*-------------------------------------------------------
#$Author: saulius $
#$Date: 2020-11-29 15:37:57 +0000 (Sun, 29 Nov 2020) $
#$Revision: 8266 $
#$URL: file:///home/saulius/svn-repositories/paskaitos/VU/kompiuteri%C5%B3-architekt%C5%ABra/skaidr%C4%97s/examples/floating-point/Makefile $
#------------------------------------------------------------------------

#*
# Compile C files and produc assembler outputs.
#**

MAKEFILE_DIRS = . makefiles/enabled
MAKEFILE_WCARDS = $(addsuffix /Makelocal*, ${MAKEFILE_DIRS})
MAKECONF_WCARDS = $(addsuffix /Makeconf*, ${MAKEFILE_DIRS})

MAKECONF_FILES = $(filter-out %.example, \
	$(filter-out %~, $(wildcard ${MAKECONF_WCARDS}) \
))

ifneq ("${MAKECONF_FILES}","")
include ${MAKECONF_FILES}
endif

BIN_DIR = bin/
PROG_DIR = programs/

CFLAGS ?= -O3 --omit-frame-pointer

CC ?= gcc

ARGS ?=

#------------------------------------------------------------------------------

PROGS  = $(wildcard ${PROG_DIR}*.c)
CFILES = $(wildcard *.c)
OFILES = ${CFILES:%.c=%.o}
EFILES = ${PROGS:${PROG_DIR}%.c=${BIN_DIR}%}
AFILES = ${CFILES:%.c=%.asm} ${PROGS:%.c=%.asm}

.PHONY: all static test run opt optimised
.PHONY: clean distclean mostlyclean cleanAll 

all: ${AFILES}

#------------------------------------------------------------------------------

MAKELOCAL_FILES = ${filter-out %~, ${wildcard ${MAKEFILE_WCARDS}}}

ifneq ("${MAKELOCAL_FILES}","")
include ${MAKELOCAL_FILES}
endif

#------------------------------------------------------------------------------

run: ${EFILES}
	set -x; for i in $^; do ./$$i ${ARGS}; done

static:
	${MAKE} CFLAGS="-static ${CFLAGS}" CC=${CC}

opt optimised:
	${MAKE} CFLAGS="-O3 ${CFLAGS}" CC=${CC}

${BIN_DIR}%: ${PROG_DIR}%.c ${OFILES}
	${CC} ${CFLAGS} -o $@ $< ${OFILES}

%.asm: %.c
	${CC} -c ${CFLAGS} -S -o $@ $<

clean:
	rm -f ${OFILES}
	rm -f ${AFILES}

distclean mostlyclean cleanAll: clean
	rm -f ${EFILES}
