CC = gcc
CPP = cpp
CFLAGS = -g -O1 -m32

all: main.s main.d main.d.data swap.s swap.d swap.d.data prog.d prog.d.data\
	c1-init.E c1-noinit.E c-noinit c-init

main.s: main.c
	$(CC) $(CFLAGS) -S main.c

swap.s: swap.c
	$(CC) $(CFLAGS) -S swap.c

main.d: main.c
	$(CC) $(CFLAGS) -c main.c
	objdump -d -r main.o > main.d

main.d.data: main.c
	$(CC) $(CFLAGS) -c main.c
	objdump -j .data -d main.o > main.d.data

swap.d: swap.c
	$(CC) $(CFLAGS) -c swap.c
	objdump -d -r swap.o > swap.d

swap.d.data: swap.c
	$(CC) $(CFLAGS) -c swap.c
	objdump -j .data -d -r swap.o > swap.d.data

prog.d: main.c swap.c
	$(CC) $(CFLAGS) main.c swap.c -o prog
	objdump -d -r prog > prog.d

prog.d.data: main.c swap.c
	$(CC) $(CFLAGS) main.c swap.c -o prog
	objdump -j .data -d -r prog > prog.d.data

c1-init.E: c1.c global.h
	$(CPP) -g -m32 -P -DINITIALIZE c1.c -o c1-init.E

c1-noinit.E: c1.c global.h
	$(CPP) -g -m32 -P c1.c -o c1-noinit.E

c-noinit: c1.c c2.c global.h
	$(CC) -g -m32 -o c-noinit c1.c c2.c

# This one should cause a linking error because strong g appears twice
c-init: c1.c c2.c global.h
	$(CC) -g -m32 -DINITIALIZE -o c-init c1.c c2.c

simple: simple.c
	$(CC) $(CFLAGS) -o simple simple.c  -lm

clean:
	rm -f *.o *.s *.d prog c-init c-noinit *.E *.data

