# g++ and clang++ both have pretty garbage errors
CXX=g++
FLAGS=-std=c++17 -g
CXX_FLAGS=$(FLAGS) -c
L_FLAGS=$(FLAGS)
LIBS=-lsodium

bmc: bmc_main.o base64.o expiring_signature.o receiver.o sender.o signing_key.o sodium_helpers.o string_helpers.o time_helpers.o
	$(CXX) -o $@ $^ $(L_FLAGS) $(LIBS)

bmc_main.o: bmc_main.cpp expiring_signature.h receiver.h sender.h signing_key.h sodium_helpers.h string_helpers.h time_helpers.h
	$(CXX) -o $@ $(CXX_FLAGS) $<

base64.o: cpp-base64/base64.cpp cpp-base64/base64.h
	$(CXX) -o $@ $(CXX_FLAGS) $<

expiring_signature.o: expiring_signature.cpp expiring_signature.h time_helpers.h
	$(CXX) -o $@ $(CXX_FLAGS) $<

receiver.o: receiver.cpp receiver.h expiring_signature.h sodium_helpers.h string_helpers.h time_helpers.h
	$(CXX) -o $@ $(CXX_FLAGS) $<

sender.o: sender.cpp sender.h expiring_signature.h signing_key.h sodium_helpers.h time_helpers.h
	$(CXX) -o $@ $(CXX_FLAGS) $<

signing_key.o: signing_key.cpp signing_key.h expiring_signature.h sodium_helpers.h time_helpers.h
	$(CXX) -o $@ $(CXX_FLAGS) $<

sodium_helpers.o: sodium_helpers.cpp sodium_helpers.h
	$(CXX) -o $@ $(CXX_FLAGS) $<

string_helpers.o: string_helpers.cpp string_helpers.h cpp-base64/base64.h
	$(CXX) -o $@ $(CXX_FLAGS) $<

time_helpers.o: time_helpers.cpp time_helpers.h
	$(CXX) -o $@ $(CXX_FLAGS) $<

clean:
	rm -f bmc bmc_main.o base64.o expiring_signature.o receiver.o sender.o signing_key.o sodium_helpers.o string_helpers.o time_helpers.o