INC := -I include
CFLAGS := -Wall
CFLAGS += -Wextra
CFLAGS += -Wpointer-arith
CFLAGS += -Wcast-align
CFLAGS += -Wwrite-strings
CFLAGS += -Wswitch-default
CFLAGS += -Wunreachable-code
CFLAGS += -Winit-self
CFLAGS += -Wmissing-field-initializers
CFLAGS += -Wno-unknown-pragmas
CFLAGS += -Wundef
CFLAGS += -Wold-style-definition

all: compile link

compile:
	gcc $(CFLAGS) $(INC) -c -o build/main.o src/main.c
	gcc $(CFLAGS) $(INC) -c -o build/Common.o src/Common.c
	gcc $(CFLAGS) $(INC) -c -o build/Integrated.o src/Integrated.c
	gcc $(CFLAGS) $(INC) -c -o build/Pish.o src/Pish.c

link:
	gcc -o bin/pish.out build/*.o

exec: compile link
	./bin/pish.out

debug: clean debugCompile debugLink

debugCompile:
	gcc $(CFLAGS) $(INC) -g -c -o build/main.o src/main.c
	gcc $(CFLAGS) $(INC) -g -c -o build/Integrated.o src/Integrated.c
	gcc $(CFLAGS) $(INC) -g -c -o build/Common.o src/Common.c
	gcc $(CFLAGS) $(INC) -g -c -o build/Pish.o src/Pish.c

debugLink:
	gcc -g -o bin/pish.out build/*.o

clean:
	rm build/*.o
	rm bin/*.out