1.DEFAULT_GOAL := all
2SHELL := /bin/bash
3
4BUILD_DIR := $(CURDIR)/builds
5SWAY_DIR := $(CURDIR)/swaylock-mod
6WDU_DIR := $(CURDIR)/wdu
7TPLINKCTL_DIR := $(CURDIR)/tplinkctl
8INSTALL_DIR := $(HOME)/.wraith/bin
9
10SWAY_BIN := swaylock
11WDU_BIN := wdu
12TPLINKCTL_BIN := tplinkctl
13
14GREEN := \033[0;32m
15YELLOW := \033[0;33m
16RED := \033[0;31m
17BLUE := \033[0;34m
18BOLD := \033[1m
19RESET := \033[0m
20
21# ---------------------------------------------------------
22# ๐ Dependency Checks
23# ---------------------------------------------------------
24define require
25 @command -v $(1) >/dev/null 2>&1 || { \
26 echo -e "$(RED)โ Missing dependency: $(1)$(RESET)"; \
27 echo -e " โ Please install $(1) and retry."; \
28 exit 1; \
29 }
30endef
31
32# ---------------------------------------------------------
33# Help
34# ---------------------------------------------------------
35help:
36 @echo -e "$(BLUE)Usage:$(RESET)"
37 @echo " make <target>\n"
38 @echo -e "$(BLUE)Available targets:$(RESET)"
39 @echo " help Show this help menu"
40 @echo " all Build all components"
41 @echo " swaylock Build swaylock"
42 @echo " wdu Build wdu"
43 @echo " tplinkctl Build tplinkctl"
44 @echo " install Build and install binaries"
45 @echo " clean Remove all build artifacts\n"
46
47# ---------------------------------------------------------
48# Targets
49# ---------------------------------------------------------
50all: swaylock wdu tplinkctl
51 @echo -e "\n$(GREEN)All builds completed$(RESET)"
52 @echo -e "$(BOLD)Artifacts in $(BUILD_DIR)$(RESET)"
53
54prepare:
55 @mkdir -p $(BUILD_DIR)
56
57swaylock: prepare
58 @echo -e "\n$(BOLD)Building Swaylock$(RESET)"
59 $(call require,meson)
60 $(call require,ninja)
61
62 @if [ ! -d "$(SWAY_DIR)/build" ]; then \
63 echo -e "$(YELLOW)Configuring Meson$(RESET)"; \
64 cd $(SWAY_DIR) && meson setup build; \
65 fi
66
67 @cd $(SWAY_DIR) && meson compile -C build
68 @cp $(SWAY_DIR)/build/$(SWAY_BIN) $(BUILD_DIR)/$(SWAY_BIN)
69 @echo -e "$(GREEN)Swaylock built successfully$(RESET)"
70
71wdu: prepare
72 @echo -e "\n$(BOLD)Building WDU$(RESET)"
73 $(call require,go)
74
75 @cd $(WDU_DIR) && go build -o $(BUILD_DIR)/$(WDU_BIN)
76 @echo -e "$(GREEN)WDU built successfully$(RESET)"
77
78tplinkctl: prepare
79 @echo -e "\n$(BOLD)Building tplinkctl$(RESET)"
80 $(call require,go)
81
82 @cd $(TPLINKCTL_DIR) && go build -o $(BUILD_DIR)/$(TPLINKCTL_BIN)
83 @echo -e "$(GREEN)tplinkctl built successfully$(RESET)"
84
85install: all
86 @echo -e "\n$(BOLD)Installing binaries$(RESET)"
87 @mkdir -p $(INSTALL_DIR)
88 @cp $(BUILD_DIR)/$(SWAY_BIN) $(INSTALL_DIR)/
89 @cp $(BUILD_DIR)/$(WDU_BIN) $(INSTALL_DIR)/
90 @cp $(BUILD_DIR)/$(TPLINKCTL_BIN) $(INSTALL_DIR)/
91 @echo -e "$(GREEN)Installed to $(INSTALL_DIR)$(RESET)"
92
93clean:
94 @echo -e "\n$(YELLOW)Cleaning build artifacts$(RESET)"
95 @rm -rf $(BUILD_DIR)
96 @rm -rf $(SWAY_DIR)/build
97 @rm -rf $(WDU_DIR)/$(WDU_BIN)
98 @rm -rf $(TPLINKCTL_DIR)/$(TPLINKCTL_BIN)
99 @echo -e "$(GREEN)Clean complete$(RESET)\n"