CXX := g++
CXXFLAGS := -O2 -std=c++17 -Wall -Wextra -pedantic
TARGET := lab3
OUT_DIR := out

.PHONY: all clean run test bench timelines pack

all: $(TARGET)

$(TARGET): main.cpp
	$(CXX) $(CXXFLAGS) main.cpp -o $(TARGET)

run: $(TARGET)
	./$(TARGET) --size 100000 --depth 2 --min-size 4096

test: $(TARGET)
	python3 test_lab3.py
	./$(TARGET) --size 0 --depth 3 --min-size 1 >/dev/null
	./$(TARGET) --size 1 --depth 3 --min-size 1 >/dev/null
	./$(TARGET) --size 10000 --depth 0 --min-size 1 >/dev/null
	./$(TARGET) --size 10000 --depth 2 --min-size 128 >/dev/null
	./$(TARGET) --size 10000 --depth 3 --min-size 256 --seed 2026 >/dev/null
	./$(TARGET) --size 12345 --depth 4 --min-size 257 --seed 777 >/dev/null

bench: $(TARGET)
	python3 benchmark.py

timelines: $(TARGET)
	mkdir -p $(OUT_DIR)/logs $(OUT_DIR)/pics
	./$(TARGET) --size 2048 --depth 2 --min-size 64 --log > $(OUT_DIR)/logs/depth2.log 2>$(OUT_DIR)/logs/depth2.stat
	./$(TARGET) --size 4096 --depth 3 --min-size 64 --log > $(OUT_DIR)/logs/depth3.log 2>$(OUT_DIR)/logs/depth3.stat
	python3 exporter.py $(OUT_DIR)/logs/depth2.log $(OUT_DIR)/pics
	python3 exporter.py $(OUT_DIR)/logs/depth3.log $(OUT_DIR)/pics

pack: clean
	zip -r lab3_process_pipes.zip main.cpp Makefile benchmark.py exporter.py test_lab3.py README.md

clean:
	rm -f $(TARGET) lab3_process_pipes.zip
	rm -rf $(OUT_DIR) __pycache__
