export ROOT_DIR := $(CURDIR)

export BUILD_ROOT := $(ROOT_DIR)/build

export CC = gcc
export LDFLAGS = -lstdc++

BUILD_TYPE ?= Release

ifeq ($(BUILD_TYPE),Debug)
	export CFLAGS = -std=c++23 -Wall -Wextra -Werror -Wpedantic -g -O0
else ifeq ($(BUILD_TYPE),Release)
	export CFLAGS = -std=c++23 -Wall -Wextra -Werror -Wpedantic -O2
else
	$(error Unknown BUILD_TYPE: $(BUILD_TYPE))
endif


.PHONY: all clean build run test rebuild

all:
ifndef PROBLEM_ID
	$(error PROBLEM_ID is not set)
endif
	$(MAKE) -C $(PROBLEM_ID)

clean:
	rm -rf $(BUILD_ROOT)

# NOTE: Examples
# make build PROBLEM_ID=3518 BUILD_TYPE=Debug
# make build PROBLEM_ID=3518
build:
	mkdir -p $(BUILD_ROOT)/$(PROBLEM_ID)
	$(MAKE) -C $(PROBLEM_ID) build

run:
	$(MAKE) -C $(PROBLEM_ID) run

test:
	$(MAKE) -C $(PROBLEM_ID) test

rebuild:
	$(MAKE) -C $(PROBLEM_ID) clean
	$(MAKE) -C $(PROBLEM_ID) build
