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

all: shm_generator shm_benchmark shm_print

shm_generator: shm_generator.o
	$(CXX) $(CXXFLAGS) shm_generator.o -o shm_generator $(LDFLAGS)

shm_benchmark: shm_benchmark.o row.o bounded_prolific_scheduler.o bounded_collective_scheduler.o bounded_collective_scheduler_log.o chunk_stealing_scheduler.o
	$(CXX) $(CXXFLAGS) shm_benchmark.o row.o bounded_prolific_scheduler.o bounded_collective_scheduler.o bounded_collective_scheduler_log.o chunk_stealing_scheduler.o -o shm_benchmark $(LDFLAGS)

shm_print: shm_print.o
	$(CXX) $(CXXFLAGS) shm_print.o -o shm_print $(LDFLAGS)

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

shm_benchmark.o: shm_benchmark.cpp shm_keys.hpp row.hpp sort_algorithms.hpp bounded_prolific_scheduler.hpp bounded_collective_scheduler.hpp bounded_collective_scheduler_log.hpp chunk_stealing_scheduler.hpp
	$(CXX) $(CXXFLAGS) -c shm_benchmark.cpp -o shm_benchmark.o

shm_print.o: shm_print.cpp shm_keys.hpp
	$(CXX) $(CXXFLAGS) -c shm_print.cpp -o shm_print.o

row.o: row.cpp row.hpp
	$(CXX) $(CXXFLAGS) -c row.cpp -o row.o

bounded_prolific_scheduler.o: bounded_prolific_scheduler.cpp bounded_prolific_scheduler.hpp
	$(CXX) $(CXXFLAGS) -c bounded_prolific_scheduler.cpp -o bounded_prolific_scheduler.o

bounded_collective_scheduler.o: bounded_collective_scheduler.cpp bounded_collective_scheduler.hpp
	$(CXX) $(CXXFLAGS) -c bounded_collective_scheduler.cpp -o bounded_collective_scheduler.o

bounded_collective_scheduler_log.o: bounded_collective_scheduler_log.cpp bounded_collective_scheduler_log.hpp bounded_collective_scheduler.hpp
	$(CXX) $(CXXFLAGS) -c bounded_collective_scheduler_log.cpp -o bounded_collective_scheduler_log.o

chunk_stealing_scheduler.o: chunk_stealing_scheduler.cpp chunk_stealing_scheduler.hpp row.hpp sort_algorithms.hpp
	$(CXX) $(CXXFLAGS) -c chunk_stealing_scheduler.cpp -o chunk_stealing_scheduler.o

clean:
	rm -f *.o shm_generator shm_benchmark shm_print