BUILD := $(shell date -u +%Y%m%d-%H%M%S)
OS := $(shell uname -s)

PREFIX = $(DESTDIR)/opt/TellusAgent
TOOLKIT = ../..

DIRECTORIES = \
  $(TOOLKIT)/Common \
  $(TOOLKIT)/Rewind

ifeq ($(CI_PIPELINE_CREATED_AT), )
	VERSION := $(shell date -u +%Y%m%d-%H%M%S)
else
	VERSION := $(shell date -u -d "$(CI_PIPELINE_CREATED_AT)" +%Y%m%d-%H%M%S)
endif

ifeq ($(OS), Linux)
  BUILD        := $(VERSION)-$(shell lsb_release -i -s | tr '[:upper:]' '[:lower:]')$(shell lsb_release -r -s)
  ARCHITECTURE ?= $(shell $(CC) -dumpmachine | grep -o -E '^[^-]+')
ifeq ($(ARCHITECTURE), aarch64)
	FLAGS += -march=armv8-a
endif
ifeq ($(ARCHITECTURE), x86_64)
	FLAGS += -fPIC
endif
  FLAGS += -rdynamic
endif

ifeq ($(OS), Darwin)
  FLAGS += -Wno-deprecated-declarations
endif

OBJECTS = \
  TellusAgent.o

FLAGS += -g -fno-omit-frame-pointer -O3 -MMD \
	-DVERSION=\"$(VERSION)\" \
	$(foreach directory, $(DIRECTORIES), -I$(directory)) -DBUILD=\"$(BUILD)\"

LIBS += $(foreach library, $(LIBRARIES), -l$(library))

CC = gcc
CFLAGS += $(FLAGS) -std=gnu99

ifneq ($(strip $(DEPENDENCIES)),)
  FLAGS += $(shell pkg-config --cflags $(DEPENDENCIES))
  LIBS += $(shell pkg-config --libs $(DEPENDENCIES))
endif

all: build

build: $(PREREQUISITES) $(OBJECTS)
	$(CC) $(OBJECTS) $(FLAGS) $(LIBS) -o tellusagent

install:
	install -D -d $(PREFIX)
	install -o root -g root tellusagent $(PREFIX)
	install -o root -g root tellusagent.sh $(PREFIX)
	install -o root -g root tellusagent.conf $(PREFIX)
	install -D -d $(DESTDIR)/lib/systemd/system/
ifeq ($(OS), Linux)
	install -o root -g root systemd/tellusagent.service $(DESTDIR)/lib/systemd/system/
	install -o root -g root systemd/tellusagent\@.service $(DESTDIR)/lib/systemd/system/
	install -D -d $(DESTDIR)/lib/systemd/system-generators/
	install -o root -g root systemd/tellusagent-generator $(DESTDIR)/lib/systemd/system-generators/
endif
ifeq ($(OS), Darwin)
#	install -m 644 -o root -g root tellusagent.plist $(DESTDIR)/Library/LaunchDaemons
endif

clean:
	rm -f $(PREREQUISITES) $(OBJECTS) tellusagent
	rm -f *.d $(TOOLKIT)/*/*.d

debian-package:
	./UpdateLog.sh tellusagent "Artem Prilutskiy <cyanide.burnout@gmail.com>" $(BUILD) > debian/changelog
ifdef ARCH
	dpkg-buildpackage -b -a$(ARCH) -tc
else
	dpkg-buildpackage -b -tc
endif

docker-image: debian-package
	DISTRIBUTION=$(shell echo ${ARCHITECTURE} | sed s/aarch64/arm64/ | sed s/x86_64/amd64/)
	docker buildx build -t tellusagent:$(VERSION) --platform linux/$(DISTRIBUTION) -o type=tar,dest=- . | gzip > build/tellusagent_$(VERSION)-$(DISTRIBUTION).tar.gz

macos-archive: build
	zip ../TellusAgent-macOS.zip tellusagent tellusagent.sh tellusagent.conf tellusagent.plist

.PHONY: all build clean install