# A simple makefile for building a program composed of C source files.
# Refer to CS107 guide to Make for background info on makefiles

PROGRAMS = code mult sorts fact strs array twiddle vec tolower charsum constant_folding subexp dead_code strength limitations
OPT_PROGRAMS = $(PROGRAMS:%=%_opt)

all:: $(PROGRAMS) $(OPT_PROGRAMS)

CC = gcc
CFLAGS = -g -std=gnu99 -Wall -fno-inline $$warnflags
export warnflags = -Wfloat-equal -Wtype-limits -Wpointer-arith -Wlogical-op -Wshadow -fno-diagnostics-show-option
LDFLAGS =
LDLIBS = 

fcyc.o : fcyc.c
	$(CC) -O2 $(CFLAGS) -c $(LDFLAGS) $^ $(LDLIBS) -o $@

$(PROGRAMS): %:%.c fcyc.o
	$(CC) -O1 $(CFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@

$(OPT_PROGRAMS): %_opt:%.c fcyc.o
	$(CC) -O2 $(CFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@

vec: combine.c

vec_opt: combine.c

clean::
	rm -f $(PROGRAMS) $(OPT_PROGRAMS) *.o callgrind.out.* *.i *.s


.PHONY: clean all
