-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile
148 lines (109 loc) · 8.47 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
BANNER = \n\033[38;5;196m██\033[38;5;242m╗\033[0m \033[38;5;196m███████\033[38;5;242m╗\033[0m \033[38;5;196m██████\033[38;5;242m╗\033[0m \033[38;5;196m██\033[38;5;242m╗\033[0m \033[38;5;196m██████\033[38;5;242m╗\033[0m \033[38;5;196m███\033[38;5;242m╗\033[0m \033[38;5;196m██\033[38;5;242m╗\n\033[38;5;160m██\033[38;5;241m║\033[0m \033[38;5;160m██\033[38;5;241m╔════╝\033[38;5;160m██\033[38;5;241m╔════╝\033[0m \033[38;5;160m██\033[38;5;241m║\033[38;5;160m██\033[38;5;241m╔═══\033[38;5;160m██\033[38;5;241m╗\033[38;5;160m████\033[38;5;241m╗\033[0m \033[38;5;160m██\033[38;5;241m║\n\033[38;5;124m██\033[38;5;240m║\033[0m \033[38;5;124m█████\033[38;5;240m╗\033[0m \033[38;5;124m██\033[38;5;240m║\033[0m \033[38;5;124m███\033[38;5;240m╗\033[38;5;124m██\033[38;5;240m║\033[38;5;124m██\033[38;5;240m║\033[0m \033[38;5;124m██\033[38;5;240m║\033[38;5;124m██\033[38;5;240m╔\033[38;5;124m██\033[38;5;240m╗\033[0m \033[38;5;124m██\033[38;5;240m║\n\033[38;5;88m██\033[38;5;239m║\033[0m \033[38;5;88m██\033[38;5;239m╔══╝\033[0m \033[38;5;88m██\033[38;5;239m║\033[0m \033[38;5;88m██\033[38;5;239m║\033[38;5;88m██\033[38;5;239m║\033[38;5;88m██\033[38;5;239m║\033[0m \033[38;5;88m██\033[38;5;239m║\033[38;5;88m██\033[38;5;239m║╚\033[38;5;88m██\033[38;5;239m╗\033[38;5;88m██\033[38;5;239m║\n\033[38;5;52m███████\033[38;5;238m╗\033[38;5;52m███████\033[38;5;238m╗╚\033[38;5;52m██████\033[38;5;238m╔╝\033[38;5;52m██\033[38;5;238m║╚\033[38;5;52m██████\033[38;5;238m╔╝\033[38;5;52m██\033[38;5;238m║\033[0m \033[38;5;238m╚\033[38;5;52m████\033[38;5;238m║\n\033[38;5;237m╚══════╝╚══════╝\033[0m \033[38;5;237m╚═════╝\033[0m \033[38;5;237m╚═╝\033[0m \033[38;5;237m╚═════╝\033[0m \033[38;5;237m╚═╝\033[0m \033[38;5;237m╚═══╝\n \033[38;5;236m\n\033[38;5;196m██\033[38;5;242m╗\033[0m \033[38;5;196m██\033[38;5;242m╗\033[38;5;196m███████\033[38;5;242m╗\033[38;5;196m██████\033[38;5;242m╗\033[0m \033[38;5;196m██████\033[38;5;242m╗\033[0m \033[38;5;196m██\033[38;5;242m╗\033[0m \033[38;5;196m██\033[38;5;242m╗\033[38;5;196m██████\033[38;5;242m╗\033[0m \033[38;5;196m██████\033[38;5;242m╗\033[0m \033[38;5;242m\n\033[38;5;241m╚\033[38;5;160m██\033[38;5;241m╗\033[0m \033[38;5;160m██\033[38;5;241m╔╝╚════\033[38;5;160m██\033[38;5;241m║╚════\033[38;5;160m██\033[38;5;241m╗\033[38;5;160m██\033[38;5;241m╔═\033[38;5;160m████\033[38;5;241m╗\033[0m \033[38;5;160m██\033[38;5;241m║\033[0m \033[38;5;160m██\033[38;5;241m╔╝\033[38;5;160m██\033[38;5;241m╔══\033[38;5;160m██\033[38;5;241m╗\033[38;5;160m██\033[38;5;241m╔══\033[38;5;160m██\033[38;5;241m╗\n \033[38;5;240m╚\033[38;5;124m████\033[38;5;240m╔╝\033[0m \033[38;5;124m██\033[38;5;240m╔╝\033[0m \033[38;5;124m█████\033[38;5;240m╔╝\033[38;5;124m██\033[38;5;240m║\033[38;5;124m██\033[38;5;240m╔\033[38;5;124m██\033[38;5;240m║\033[0m \033[38;5;124m█████\033[38;5;240m╔╝\033[0m \033[38;5;124m██████\033[38;5;240m╔╝\033[38;5;124m██\033[38;5;240m║\033[0m \033[38;5;124m██\033[38;5;240m║\n \033[38;5;239m╚\033[38;5;88m██\033[38;5;239m╔╝\033[0m \033[38;5;88m██\033[38;5;239m╔╝\033[0m \033[38;5;88m██\033[38;5;239m╔═══╝\033[0m \033[38;5;88m████\033[38;5;239m╔╝\033[38;5;88m██\033[38;5;239m║\033[0m \033[38;5;88m██\033[38;5;239m╔═\033[38;5;88m██\033[38;5;239m╗\033[0m \033[38;5;88m██\033[38;5;239m╔══\033[38;5;88m██\033[38;5;239m╗\033[38;5;88m██\033[38;5;239m║\033[0m \033[38;5;88m██\033[38;5;239m║\n \033[38;5;52m██\033[38;5;238m║\033[0m \033[38;5;52m██\033[38;5;238m║\033[0m \033[38;5;52m███████\033[38;5;238m╗╚\033[38;5;52m██████\033[38;5;238m╔╝\033[0m \033[38;5;52m██\033[38;5;238m║\033[0m \033[38;5;52m██\033[38;5;238m╗\033[38;5;52m██████\033[38;5;238m╔╝\033[38;5;52m██████\033[38;5;238m╔╝\n \033[38;5;237m╚═╝\033[0m \033[38;5;237m╚═╝\033[0m \033[38;5;237m╚══════╝\033[0m \033[38;5;237m╚═════╝\033[0m \033[38;5;237m╚═╝\033[0m \033[38;5;237m╚═╝╚═════╝\033[0m \033[38;5;237m╚═════╝\033[0m \033[38;5;237m\n \033[38;5;236m\033[0m\n
# ----------------- #
NAME := kbd-backlight
PREFIX ?= /usr/local
# ----------------- #
BUILDDIR := build
# ----------------- #
TOOLCHAIN_PREFIX ?=
CC ?= gcc
C := $(TOOLCHAIN_PREFIX)$(CC)
# CMake Build Type ("Debug" or "Release")
BUILD ?= Debug
# Release flags
RFLAGS ?= -D_FORTIFY_SOURCE=2 -fstack-clash-protection -fstack-protector -O2
# Debug flags
DFLAGS ?= -Wall -Wextra
# Linker flags
LFLAGS ?=
CFLAGS :=
ifeq ($(BUILD),Release)
override CFLAGS += $(RFLAGS)
else ifeq ($(BUILD),Debug)
override CFLAGS += $(DFLAGS)
endif
ifeq ($(STATIC),y)
override CFLAGS += -static -static-libgcc
endif
# ----------------- #
all: banner info build
banner:
@printf "$(BANNER)\n"
info:
@printf " CC │ $(C)\n"
@printf " TOOLCHAIN │ $(TOOLCHAIN_PREFIX)\n"
@printf " RFLAGS │ $(RFLAGS)\n"
@printf " DFLAGS │ $(DFLAGS)\n"
@printf " OFLAGS │ $(OFLAGS)\n"
@printf " LFLAGS │ $(LFLAGS)\n"
@printf " CFLAGS │ $(CFLAGS)\n"
help: banner
@printf "Usage: make {variables} [recipe]\n"
@printf "\n"
@printf "Recipes:\n"
@printf " all │ clean && build release\n"
@printf " build | Build (Set BUILD for debug or release)\n"
@printf " clean │ Remove built object files\n"
@printf " distclean │ Remove built object files & binaries\n"
@printf " install │ Install the binary into \$$DESTDIR/\$$PREFIX\n"
@printf " uninstall │ Uninstall from \$$DESTDIR/\$$PREFIX\n"
@printf " postinstall │ Post-installation stuff\n"
setup:
@mkdir -p $(BUILDDIR)
.ONESHELL:
build: setup
@cd $(BUILDDIR)
@export CC="$(C)"
@export CFLAGS="$(CFLAGS)"
@export LDFLAGS="$(LFLAGS)"
cmake .. -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON -DCMAKE_BUILD_TYPE="$(BUILD)"
@make
clean:
@printf "Cleaning build directory...\n"
cd $(BUILDDIR) && make clean
distclean:
@printf "Removing build directory...\n"
@rm -rf $(BUILDDIR)
install:
@printf "Installing binary to: $(DESTDIR)$(PREFIX)/bin/$(NAME)\n"
@install -Dm0755 $(BUILDDIR)/$(NAME) $(DESTDIR)$(PREFIX)/bin/$(NAME)
@printf "Installing config to: $(DESTDIR)/etc/$(NAME)/backlight.conf\n"
@install -Dm0644 files/backlight.conf $(DESTDIR)/etc/$(NAME)/backlight.conf
@printf "Installing default config to: $(DESTDIR)$(PREFIX)/share/$(NAME)/backlight.conf.default\n"
@install -Dm0644 files/backlight.conf $(DESTDIR)$(PREFIX)/share/$(NAME)/backlight.conf.default
uninstall:
@printf "Removing: $(DESTDIR)$(PREFIX)/bin/$(NAME)\n"
@rm -rf $(DESTDIR)$(PREFIX)/bin/$(NAME)
@printf "Removing: $(DESTDIR)/etc/$(NAME)\n"
@rm -rf $(DESTDIR)/etc/$(NAME)
@printf "Removing: $(DESTDIR)$(PREFIX)/share/$(NAME)\n"
@rm -rf $(DESTDIR)$(PREFIX)/share/$(NAME)
@printf "Removing: $(DESTDIR)/etc/apparmor.d/$(NAME)\n"
@-rm -rf $(DESTDIR)/etc/apparmor.d/$(NAME)
postinstall: install
@printf "Adding capability: cap_dac_override\n"
@setcap cap_dac_override+eip $(DESTDIR)$(PREFIX)/bin/$(NAME)
@printf "Adding group: $(NAME)\n"
@-groupadd -r "$(NAME)"
apparmor:
@printf "Installing AppArmor profile...\n"
@install -Dm644 files/apparmor.profile $(DESTDIR)/etc/apparmor.d/$(NAME)
# Build the deb package
# make V="x.x.x" deb
deb:
docker build -t $(NAME)-deb packages/deb
docker run --rm -it \
-v $$PWD:/repo \
-e v=$(V) \
$(NAME)-deb
# Build the rpm src and bin packages
# make V="x.x.x" rpm
rpm:
docker build -t $(NAME)-rpm packages/rpm
docker run --rm -it \
-v $$PWD:/repo \
-e v=$(V) \
$(NAME)-rpm
clean_docker:
docker rmi $(NAME)-deb $(NAME)-rpm
.PHONY: all banner info help setup build clean distclean install uninstall postinstall apparmor deb rpm