CXX      = g++
CXXFLAGS = -std=c++14 -Wall -Wextra -O3 -fpermissive
LDFLAGS  = -lboost_thread -lboost_system -lboost_chrono -lpthread

# --------------------------------------------------------------------
# Source files — THREADS ONLY
# --------------------------------------------------------------------

# Core: row, affinity helper, CPU-utilization monitor (used by AIMD).
CORE_SRC = \
    row.cpp \
    scheduler_iface.cpp \
    utilization_monitor.cpp

# Thread schedulers.
THREAD_SRC = \
    static_scheduler.cpp \
    dynamic_scheduler.cpp \
    chunk_scheduler.cpp \
    chunk_steal_scheduler.cpp \
    guided_scheduler.cpp \
    adaptive_scheduler.cpp \
    aimd.cpp

ALL_SRC = $(CORE_SRC) $(THREAD_SRC)
ALL_OBJ = $(ALL_SRC:.cpp=.o)

# --------------------------------------------------------------------
all: shm_generator shm_benchmark

shm_generator: shm_generator.cpp shm_keys.hpp
	$(CXX) $(CXXFLAGS) shm_generator.cpp -o $@ -lpthread

shm_benchmark: shm_benchmark.o $(ALL_OBJ)
	$(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)

%.o: %.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@

clean:
	rm -f *.o shm_generator shm_benchmark

.PHONY: all clean
