# Makefile for Satsuma project

# Compiler settings
CXX = g++
CXXFLAGS = -O3 -Wall -march=native -DNDEBUG

# C++ standards
CXX_STANDARD_SATSUMA = -std=c++17
CXX_STANDARD_DEJAVU = -std=c++14

# Dejavu specific flags
DEJAVU_CXXFLAGS = -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

# Directories
DEJAVU_DIR = dejavu

# Targets
TARGETS = satsuma $(DEJAVU_DIR)/dejavu

# Source files
SATSUMA_SOURCES = satsuma.cpp
DEJAVU_SOURCES = $(DEJAVU_DIR)/dejavu.cpp

# Object files
SATSUMA_OBJS = $(SATSUMA_SOURCES:.cpp=.o)
DEJAVU_OBJS = $(DEJAVU_SOURCES:.cpp=.o)

# Default target
all: $(TARGETS)

# Build satsuma
satsuma: $(SATSUMA_OBJS)
	$(CXX) $(CXXFLAGS) $(CXX_STANDARD_SATSUMA) -o $@ $^

# Build dejavu
$(DEJAVU_DIR)/dejavu: $(DEJAVU_OBJS)
	$(CXX) $(CXXFLAGS) $(CXX_STANDARD_DEJAVU) $(DEJAVU_CXXFLAGS) -o $@ $^

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

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

# Clean target
clean:
	rm -f $(SATSUMA_OBJS) $(DEJAVU_OBJS) $(TARGETS)

# Test target (if needed)
test:
	@echo "Test target not implemented in Makefile"
	@echo "To run tests, use CMake with TEST=ON"

.PHONY: all clean test