# This software is licensed by the MIT License, see LICENSE file
#                                Copyright © 2022 Gregory Lirent

########################################################################################################################

BUILD_PATH  ?= ./bin
LIB_NAME     = cjsonp

DEBUG_PATH   = $(BUILD_PATH)/debug
RELEASE_PATH = $(BUILD_PATH)/release

########################################################################################################################

CC    = clang
MKDIR = mkdir -p
RMRF  = rm -rf
AR    = ar crs
CP    = cp

$(DEBUG_PATH)/obj/%.o:   CFLAGS := $(CFLAGS) -DDEBUG  -O0 -fPIC -c -g3 -Wall
$(RELEASE_PATH)/obj/%.o: CFLAGS := $(CFLAGS) -DNDEBUG -O2 -fPIC -c

########################################################################################################################

debug:   ./modules/libcdsb/bin/debug/libcdsb.a   $(DEBUG_PATH)/lib$(LIB_NAME).a
release: ./modules/libcdsb/bin/release/libcdsb.a $(RELEASE_PATH)/lib$(LIB_NAME).a
examples: debug $(addprefix $(BUILD_PATH)/,$(notdir $(basename $(wildcard ./*.c))))

########################################################################################################################

c_objects = $(addsuffix .o,$(addprefix $(2),$(notdir $(basename $(wildcard $(1)*.c)))))
OBJECTS   = $(call c_objects,./src/,)

########################################################################################################################

$(DEBUG_PATH)/lib$(LIB_NAME).a:   $(addprefix $(DEBUG_PATH)/obj/,$(OBJECTS))   | $(DEBUG_PATH)/
$(RELEASE_PATH)/lib$(LIB_NAME).a: $(addprefix $(RELEASE_PATH)/obj/,$(OBJECTS)) | $(RELEASE_PATH)/

########################################################################################################################

$(DEBUG_PATH)/obj/%.o:    ./src/%.c | $(DEBUG_PATH)/obj/
	$(CC) $^ -o $@ $(CFLAGS)
$(RELEASE_PATH)/obj/%.o:  ./src/%.c | $(RELEASE_PATH)/obj/
	$(CC) $^ -o $@ $(CFLAGS)
$(BUILD_PATH)/%: ./%.c $(DEBUG_PATH)/lib$(LIB_NAME).a ./modules/libcdsb/bin/debug/libcdsb.a ./modules/libcdsb/modules/libunic/bin/libunic.a | $(BUILD_PATH)/
	$(CC) $^  -o $@ $(CFLAGS) -g3 -Wall


########################################################################################################################

$(BUILD_PATH)/:
	$(MKDIR) $@
$(DEBUG_PATH)/:       | $(BUILD_PATH)/
	$(MKDIR) $@
$(RELEASE_PATH)/:     | $(BUILD_PATH)/
	$(MKDIR) $@
$(DEBUG_PATH)/obj/:   | $(DEBUG_PATH)/
	$(MKDIR) $@
$(RELEASE_PATH)/obj/: | $(RELEASE_PATH)/
	$(MKDIR) $@

########################################################################################################################

clean:
	$(RMRF) ./bin/

%.a:
	$(AR) $@ $?

########################################################################################################################

FORCE:

./modules/libcdsb/bin/debug/libcdsb.a: FORCE
	cd ./modules/libcdsb && $(MAKE) debug

./modules/libcdsb/bin/release/libcdsb.a: FORCE
	cd ./modules/libcdsb && $(MAKE) release
