CXX := g++
CXXFLAGS := -std=c++17 -O2 -Wall -Wextra -fstack-protector-strong -D_FORTIFY_SOURCE=2 -fPIE -Iinclude
LDFLAGS := -Wl,-z,relro,-z,now -pie
LDLIBS := -lsodium -lcurl -ljsoncpp -lsystemd -pthread -lmysqlclient -lseccomp -latomic

SRCDIR := src
BUILDDIR := build
BINDIR := bin
TARGET := $(BINDIR)/sysd-engine

SOURCES := $(wildcard $(SRCDIR)/*.cpp)
OBJECTS := $(patsubst $(SRCDIR)/%.cpp,$(BUILDDIR)/%.o,$(SOURCES))

.PHONY: all clean install dirs

all: dirs $(TARGET)

dirs:
	@mkdir -p $(BUILDDIR) $(BINDIR)

$(TARGET): $(OBJECTS)
	$(CXX) $(CXXFLAGS) $^ -o $@ $(LDFLAGS) $(LDLIBS)

$(BUILDDIR)/%.o: $(SRCDIR)/%.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@

install: all
	install -Dm 0755 $(TARGET) /usr/local/sbin/sysd-engine
	install -d -m 0755 /opt/sysc/engine/scripts /opt/sysc/engine/scripts/.enc
	install -d -m 0755 /opt/sysc/engine/watch /opt/sysc/engine/config /opt/sysc/engine/firmware
	install -d -m 0750 /var/lib/sysc-engine
	install -d -m 0755 /var/log/sysc-engine /run/sysc-engine
	@echo "Install complete."

clean:
	@rm -rf $(BUILDDIR) $(BINDIR)
