# Compiler
CC = gcc
CFLAGS = -Wall -Wextra -Wpedantic -Wno-type-limits -std=c99 -m64 -fPIC -g
LDFLAGS = -shared

# List of source files
SRC = factorial.c main.c
OBJ = $(patsubst %.c,%.o,$(SRC))
BIN = main
LIB = factorial.so
PROGRAM_ARGS =

# PHONY targets
.PHONY: clean all default

# Targets
all: $(BIN) $(LIB)

$(BIN): $(OBJ)
	@echo "[Creating program executable: $(BIN)]"
	$(CC) -o $@ $^
	@echo

%.o: %.c
	@echo "[Creating object file: $@]"
	$(CC) $(CFLAGS) -c $< -o $@
	@echo

$(LIB): factorial.o
	@echo "[Creating shared library file for EXTPROC: $@]"
	$(CC) $(LDFLAGS) -o $@ $^
	@echo

run: $(BIN)
	@echo "[Running project: $(BIN)]"
	$(BIN) ${PROGRAM_ARGS}
	@echo

clean:
	@echo "[Cleaning build area]"
	rm -f $(OBJ) $(BIN) $(LIB) *~ core
	@echo
