CXXFLAGS=-O3 -Wall -Wextra -pedantic -march=native -g -DNDEBUG -std=c++14
CXX=g++
OBJDUMP=objdump
OBJDUMPFLAGS=-d -S --no-show-raw-insn
RM=rm -rf

SOURCES=main.cpp solver.cpp
OBJECTS=$(SOURCES:.cpp=.o)

.PHONY: perf check clean

nq: $(OBJECTS)
	$(CXX) $(CXXFLAGS) -o $@ $^
	$(OBJDUMP) $(OBJDUMPFLAGS) $@ > $@.S 2>/dev/null

clean:
	$(RM) $(OBJECTS) nq

perf: nq
	perf stat -e cycles -e instructions -e branch-misses -e L1-dcache-load-misses -e LLC-load-misses ./nq 7

check: nq
	./nq 5 | grep -Fx "10"

%.o: %.cpp
	$(CXX) $(CXXFLAGS) -c -o $@ $^
	$(OBJDUMP) $(OBJDUMPFLAGS) $@ > $@.S 2>/dev/null
