CXXFLAGS = -Wall -Wextra -std=c++2a -O3 -g
#CXXFLAGS = -Wall -Wextra -std=c++14 -O3 -g     für gcc10:  gnu++20
LDLIBS=-lpthread

# Set to 1 to test for memory limits, disables address sanitizer
# After changing this setting rebuild your player once via e.g. 'make clean && make'
MEMORY_LIMITS = 0

checkArg = $(shell echo 'int main(){}' | $(CXX) $(1) -o /dev/null -xc - &>/dev/null && echo $(1))

CXXFLAGS += $(call checkArg,-fsanitize=undefined)
LDLIBS += $(call checkArg,-lubsan)
ifneq ($(MEMORY_LIMITS),1)
    CXXFLAGS += $(call checkArg,-fsanitize=address)
    LDLIBS += $(call checkArg,-lasan)
else
    LIMITS = -m 1024 -M 1024
endif

TARGETS = keyboard_player my_player

.PHONY: all help demo black white fight clean

all: $(TARGETS) mcp.exe

my_player: my_player.cc

mcp.exe:
	$(MAKE) -C MCP all

.DEFAULT help:
	@echo "The following make commands are available:"
	@echo "  $(MAKE) all   - builds everything"
	@echo "  $(MAKE) demo  - runs two of the keyboard players against each other"
	@echo "  $(MAKE) black - runs your own player as black against the keyboard player"
	@echo "  $(MAKE) white - runs your own player as white against the keyboard player"
	@echo "  $(MAKE) fight - runs your player against itself with resource limits"
	@echo "  $(MAKE) clean - removes all created files"

demo: mcp.exe keyboard_player
	./MCP/mcp -I 0 -n 0 -I 1 -n 1 keyboard_player keyboard_player || true

black: mcp.exe keyboard_player my_player
	./MCP/mcp -I 1 -n 1 my_player keyboard_player || true

white: mcp.exe keyboard_player my_player
	./MCP/mcp -I 0 -n 0 keyboard_player my_player || true

fight: mcp.exe my_player
	./MCP/mcp -t 60 -T 61 $(LIMITS) my_player my_player || true

clean:
	rm -f $(TARGETS)
	$(MAKE) -C MCP clean
