APPNAME=shm-container
VERSION=0.1.0
BUILDDIR=builddir
SELINUXDIR=policy
ARTIFACTSDIR=artifacts

ROOT_DIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST))))

clean:
	rm -rf $(BUILDDIR)
	rm -rf $(ARTIFACTSDIR)
	rm -rf ./rpmbuild
	rm -rf ./$(APPNAME)-$(VERSION)
	rm -rf ./out

build-artifacts: clean build-server build-client build-selinux

build-policy-only: clean build-selinux

build-rpm: build-policy-only
	mkdir -p rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
	mkdir -p $(APPNAME)-$(VERSION)
	cp -r src Makefile conf.selcraft.yaml systemd qm containers $(APPNAME).spec $(APPNAME)-$(VERSION)/
	tar czf rpmbuild/SOURCES/$(APPNAME)-$(VERSION).tar.gz $(APPNAME)-$(VERSION)
	cp $(APPNAME).spec rpmbuild/SPECS/
	rpmbuild --define "_topdir $(ROOT_DIR)/rpmbuild" -ba rpmbuild/SPECS/$(APPNAME).spec
	mkdir -p $(ARTIFACTSDIR)
	cp rpmbuild/RPMS/*/*.rpm $(ARTIFACTSDIR)/
	@echo "RPM created in $(ARTIFACTSDIR)/"

build: build-rpm

build-server:
	mkdir -p $(BUILDDIR)
	gcc -g -Wextra -Werror src/server.c -o $(BUILDDIR)/server
	chmod +x $(BUILDDIR)/server

build-client:
	mkdir -p $(BUILDDIR)
	gcc -g -Wextra -Werror src/client.c -o $(BUILDDIR)/client
	chmod +x $(BUILDDIR)/client

build-selinux:
	mkdir -p $(BUILDDIR)/$(SELINUXDIR)
	PYTHONPATH=../../../../ python3 -m selcraft.selcraft generate --config=conf.selcraft.yaml --output-dir=out
	cp out/* $(BUILDDIR)/$(SELINUXDIR)
	cd $(BUILDDIR)/$(SELINUXDIR) && make build

format:
	clang-format --sort-includes -i src/server.c
	clang-format --sort-includes -i src/client.c
	clang-format --sort-includes -i src/common.h

.PHONY: clean build build-server build-client build-selinux format
