# Project: catool

OPTIONS=-D_USE_PTHREADS
LIBS=-lpthread -lm

# Profiling
#OPTIONS+=-pg
#LIBS+=-pg

# Optimisation
OPTIONS+=-O3 -fomit-frame-pointer -Wformat -Wformat-security -fstack-protector-all
# Target processor
OPTIONS+=-march=native

# SAFE_MEMORY: Enable this option to check array boundaries when
#              setting and retrieving channel data.
#
#              For development use only.  This adds approx. 20%
#              time penalty and is not required if the software
#              is bug free.
#
#OPTIONS+=-D_SAFE_MEMORY

# SAFE_ANALYSIS: Generate prerequisite input data if necessary
#
#                Unnecessary and adds overhead to each calculation
#
#OPTIONS+=-D_SAFE_ANALYSIS

# FILE_OFFSET_BITS=64: Enable handling of files >2Gb
OPTIONS+=-D_FILE_OFFSET_BITS=64

#OPTIONS+=-Weverything -Wno-padded
#OPTIONS+=-fsanitize=address

CPP=g++
#CC=gcc -m32
CC=gcc
#CC=clang
STRIP=strip
UPX=upx
RES=
OBJ=abscissa.o analysis.o atimat.o cat.o catool.o csvfile.o fftpack.o filedata.o fileprocessor.o filter.o ifile.o matfile.o maths.o plugin.o sdf.o utils.o $(RES)
LINKOBJ =abscissa.o analysis.o atimat.o cat.o catool.o csvfile.o fftpack.o filedata.o fileprocessor.o filter.o ifile.o matfile.o maths.o plugin.o sdf.o utils.o $(RES)
BIN=catool
CXXFLAGS=-Wall -Wsign-compare -Wconversion -Wfloat-equal -Wextra -g $(OPTIONS)
CFLAGS=-Wall -Wsign-compare -Wfloat-equal -Wextra -g $(OPTIONS)
RM=rm -f

.PHONY: all clean

all:	$(BIN)

clean:
	${RM} $(OBJ) $(BIN)

production: $(BIN)
	$(STRIP) $(BIN) --strip-all
	$(UPX) $(BIN)

$(BIN): $(OBJ)
	$(CC) $(LINKOBJ) -o $(BIN) $(LIBS)

abscissa.o: abscissa.c
	$(CC) -c abscissa.c -o abscissa.o $(CFLAGS)
	
analysis.o: analysis.c
	$(CC) -c analysis.c -o analysis.o $(CFLAGS)

atimat.o: atimat.c
	$(CC) -c atimat.c -o atimat.o $(CFLAGS)

cat.o: cat.c
	$(CC) -c cat.c -o cat.o $(CFLAGS)

catool.o: catool.c
	$(CC) -c catool.c -o catool.o $(CFLAGS)

csvfile.o: csvfile.c
	$(CC) -c csvfile.c -o csvfile.o $(CFLAGS)

fftpack.o: fftpack.c
	$(CC) -c fftpack.c -o fftpack.o $(CFLAGS)

filedata.o: filedata.c
	$(CC) -c filedata.c -o filedata.o $(CFLAGS)
	
fileprocessor.o: fileprocessor.c
	$(CC) -c fileprocessor.c -o fileprocessor.o $(CFLAGS)

filter.o: filter.c
	$(CC) -c filter.c -o filter.o $(CFLAGS)
	
ifile.o: ifile.c
	$(CC) -c ifile.c -o ifile.o $(CFLAGS)

matfile.o: matfile.c
	$(CC) -c matfile.c -o matfile.o $(CFLAGS)

maths.o: maths.c
	$(CC) -c maths.c -o maths.o $(CFLAGS)

plugin.o: plugin.c
	$(CC) -c plugin.c -o plugin.o $(CFLAGS)
	
sdf.o: sdf.c
	$(CC) -c sdf.c -o sdf.o $(CFLAGS)

utils.o: utils.c
	$(CC) -c utils.c -o utils.o $(CFLAGS)

