91 lines
3.0 KiB
Makefile
91 lines
3.0 KiB
Makefile
|
|
CC = gcc
|
|
OUT_DIR = ./build
|
|
TARGET = ./bin/proxmon
|
|
SRC_DIRS = ./src
|
|
|
|
# Collect all C source files in the current directory
|
|
SRCS := $(shell find $(SRC_DIRS) -name '*.c')
|
|
|
|
# Generate object files in the build directory
|
|
OBJS := $(patsubst $(SRC_DIRS)/%.c, $(OUT_DIR)/%.o, $(SRCS))
|
|
|
|
INC_DIRS := $(shell find $(SRC_DIRS) -type d) $(INC_DIRS)
|
|
INC_FLAGS := $(addprefix -I,$(INC_DIRS))
|
|
|
|
CCFLAGS := $(INC_FLAGS)
|
|
|
|
.PHONY: build clean install install-services uninstall-services create-services reinstall-services
|
|
|
|
install: build create-services install-services ## Full installation. Builds the proxmon executable, generates service files, installs and starts services
|
|
|
|
build: $(TARGET) create-services ## Build the proxmon executable, and generates service files for editing
|
|
|
|
clean: ## Remove all build artifacts including generated service files (does not uninstall service files)
|
|
@rm -rf bin/ $(OUT_DIR) $(SERVICE_DIR)
|
|
|
|
./bin:
|
|
@mkdir -p ./bin
|
|
@cp ./dist/* ./bin
|
|
|
|
$(OUT_DIR)/%.o: $(SRC_DIRS)/%.c
|
|
@mkdir -p $(dir $@)
|
|
$(CC) $(CCFLAGS) -c $< -o $@
|
|
|
|
$(TARGET): $(OBJS) | ./bin
|
|
$(CC) $(CCFLAGS) $(OBJS) -o $@
|
|
|
|
|
|
TEMPLATE_DIR ?= ./template
|
|
SERVICE_DIR ?= ./systemd
|
|
INSTALL_DIR ?= /etc/systemd/system
|
|
WORKDIR := $(shell pwd)
|
|
|
|
# Collect all template service files
|
|
TEMPLATES := $(shell find $(TEMPLATE_DIR) -name '*.service.in')
|
|
|
|
# Generate names of service files that will have paths substituted
|
|
SERVICES := $(patsubst $(TEMPLATE_DIR)/%.service.in, $(SERVICE_DIR)/%.service, $(TEMPLATES))
|
|
|
|
# Generate names of installed service files
|
|
INSTALLED := $(patsubst $(SERVICE_DIR)/%, $(INSTALL_DIR)/%, $(SERVICES))
|
|
|
|
# Create services directory
|
|
$(SERVICE_DIR):
|
|
@mkdir -p $@
|
|
|
|
# Convert template service into actual service file
|
|
$(SERVICE_DIR)/%.service: $(TEMPLATE_DIR)/%.service.in | $(SERVICE_DIR)
|
|
sed 's|@WORKDIR@|$(WORKDIR)|g' $< > $@
|
|
|
|
create-services: $(SERVICES) ## Generate service files from templates into the systemd/ directory
|
|
|
|
# install a service into systemd
|
|
$(INSTALL_DIR)/%.service: $(SERVICE_DIR)/%.service
|
|
install -m 644 $< $(INSTALL_DIR)/
|
|
|
|
|
|
install-services: create-services $(INSTALLED) ## Installs all service files in the systemd/ directory into /etc/systemd/system
|
|
systemctl daemon-reload
|
|
@for srv in $(SERVICES); do \
|
|
echo "Installing and starting service $$srv..."; \
|
|
name=$$(basename $$srv); \
|
|
systemctl enable $$name; \
|
|
systemctl start $$name; \
|
|
done
|
|
|
|
uninstall-services: ## Stops and uninstalls all services associated with ProxMon
|
|
@for srv in $(INSTALLED); do \
|
|
name=$$(basename $$srv); \
|
|
echo "Stopping and uninstalling $$name..."; \
|
|
systemctl stop $$name || true; \
|
|
systemctl disable $$name || true; \
|
|
if [ -f $$srv ]; then rm -f $$srv; fi; \
|
|
done
|
|
systemctl daemon-reload
|
|
|
|
reinstall-services: uninstall-services install-services ## Uninstalls and reinstalls ProxMon services
|
|
|
|
help: ## Show help message
|
|
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[$$()% a-zA-Z_-]+:.*?##/ { printf " \033[36m%-18s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
|