ROOT_DIR := $(abspath ..)

CXX := gcc

CXXFLAGS := -std=c++17 \
            -Wall \
            -Wextra \
            -Werror \
            -I$(ROOT_DIR)/core/include \
            -I$(ROOT_DIR)/logger/include \
            -Ihelpers

LDFLAGS := -lstdc++

BUILD_DIR := $(ROOT_DIR)/build


RESULT_TEST_BIN := $(BUILD_DIR)/result_test
LOGGER_TEST_BIN := $(BUILD_DIR)/logger_test
SCOPED_FILE_TEST_BIN := $(BUILD_DIR)/scoped_file_test


RESULT_TEST_SRC := core/result_test.cpp
LOGGER_TEST_SRC := core/logger_test.cpp
SCOPED_FILE_TEST_SRC := helpers/scoped_file_test.cpp


LOGGER_SRC := $(ROOT_DIR)/logger/src/logger.cpp \
              $(ROOT_DIR)/logger/src/time_utils.cpp


.PHONY: all test clean


all: test


test: $(RESULT_TEST_BIN) \
      $(LOGGER_TEST_BIN) \
      $(SCOPED_FILE_TEST_BIN)
	$(RESULT_TEST_BIN)
	$(LOGGER_TEST_BIN)
	$(SCOPED_FILE_TEST_BIN)


$(RESULT_TEST_BIN): $(RESULT_TEST_SRC)
	@mkdir -p $(BUILD_DIR)
	$(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS)


$(LOGGER_TEST_BIN): $(LOGGER_TEST_SRC) $(LOGGER_SRC)
	@mkdir -p $(BUILD_DIR)
	$(CXX) $(CXXFLAGS) $^ -o $@ $(LDFLAGS)


$(SCOPED_FILE_TEST_BIN): $(SCOPED_FILE_TEST_SRC)
	@mkdir -p $(BUILD_DIR)
	$(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS)


clean:
	rm -rf $(BUILD_DIR)
