CXX := gcc

CXXFLAGS := -std=c++17 \
            -Wall \
            -Wextra \
            -Werror \
            -Icore/include \
            -Ilogger/include \
            -Itests/helpers

LDFLAGS := -lstdc++

BUILD_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 := tests/app/core/result_test.cpp
LOGGER_TEST_SRC := tests/app/core/logger_test.cpp
SCOPED_FILE_TEST_SRC := tests/helpers/scoped_file_test.cpp

LOGGER_SRC := logger/src/logger.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)
