# Makefile for Satsuma project

# Compiler and flags
CXX = g++
CXXFLAGS = -std=c++17 -O3 -Wall -march=native -DNDEBUG

# Source files for satsuma
SATSUMA_SOURCES = satsuma.cpp cvec.cpp hashmap.cpp
SATSUMA_OBJECTS = $(SATSUMA_SOURCES:.cpp=.o)

# Source files for dejavu
DEJAVU_SOURCES = dejavu/dejavu.cpp
DEJAVU_OBJECTS = $(DEJAVU_SOURCES:.cpp=.o)
DEJAVU_CXXFLAGS = -std=c++14 -O3 -Wall -Wpointer-arith -Wcast-align -Wwrite-strings -Wshadow -Wredundant-decls -Wdisabled-optimization -Wnon-virtual-dtor -Wreorder -Woverloaded-virtual -Wsign-promo -Wsynth -Wcast-qual -Wno-long-long -Wno-unknown-pragmas -Wno-unused-parameter -Wno-strict-overflow -march=native -DNDEBUG

# Targets
all: satsuma dejavu

satsuma: $(SATSUMA_OBJECTS)
	$(CXX) $(CXXFLAGS) -o $@ $^

# Compile satsuma source files
%.o: %.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@

# Build dejavu
dejavu: $(DEJAVU_OBJECTS)
	$(CXX) $(DEJAVU_CXXFLAGS) -o dejavu/$@ $^

# Compile dejavu source files
dejavu/%.o: dejavu/%.cpp
	$(CXX) $(DEJAVU_CXXFLAGS) -c $< -o $@

# Clean
test_clean:
	rm -f satsuma dejavu/dejavu $(SATSUMA_OBJECTS) $(DEJAVU_OBJECTS)

clean: test_clean