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

PROGRAMS = 
PROGRAMS_OG = exchange looper hello
PROGRAMS_O3 = scale

all:: $(PROGRAMS) $(PROGRAMS_OG) $(PROGRAMS_O3)

CC = gcc
CFLAGS = -g -O0 -std=gnu99 -Wall $$warnflags
CFLAGS_OG = -g -Og -std=gnu99 -Wall $$warnflags
CFLAGS_O3 = -g -O3 -std=gnu99 -Wall $$warnflags

export warnflags = -Wfloat-equal -Wtype-limits -Wpointer-arith -Wlogical-op -Wshadow -fno-diagnostics-show-option
LDFLAGS =
LDLIBS =

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

$(PROGRAMS_OG): %:%.c
	$(CC) -S $(CFLAGS_OG) $(LDFLAGS) $^ $(LDLIBS) -o $@.s
	$(CC) $(CFLAGS_OG) $(LDFLAGS) $^ $(LDLIBS) -o $@ 

$(PROGRAMS_O3): %:%.c
	$(CC) -S $(CFLAGS_O3) $(LDFLAGS) $^ $(LDLIBS) -o $@.s
	$(CC) $(CFLAGS_O3) $(LDFLAGS) $^ $(LDLIBS) -o $@ 

clean::
	rm -f $(PROGRAMS) $(PROGRAMS_OG) $(PROGRAMS_O3) *.o *.s

.PHONY: clean all
