
CC := gcc
CFLAGS := -Wall -Wextra -MMD
OPTFLAGS := -O3
LDFLAGS :=

CLANG_FORMAT := clang-format-14
FORMAT_ARGS := -i -style=file

SRC_DIRS := $(shell find src -type d)
C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c))
O_FILES := $(foreach f,$(C_FILES:.c=.o),build/$f)

DEP_FILES := $(foreach f,$(C_FILES:.c=.d),build/$f)

$(shell mkdir -p build $(foreach dir,$(SRC_DIRS),build/$(dir)))

.PHONY: all clean distclean format

all: sampleconv

clean:
	$(RM) -rf build sampleconv

distclean: clean

format:
	$(CLANG_FORMAT) $(FORMAT_ARGS) $(C_FILES) $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.h))

sampleconv: $(O_FILES)
	$(CC) $(LDFLAGS) $(O_FILES) -lm -o $@

build/src/%.o: src/%.c
	$(CC) -c $(CFLAGS) $(OPTFLAGS) $< -o $@

-include $(DEP_FILES)
