-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
141 lines (106 loc) · 4.17 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
# SPDX-FileCopyrightText: 2024 Geoffrey D. Bennett <[email protected]>
# SPDX-License-Identifier: GPL-3.0-or-later
# Credit to Tom Tromey and Paul D. Smith:
# http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/
VERSION := $(shell \
git describe --abbrev=4 --dirty --always --tags 2>/dev/null || \
echo $${APP_VERSION:-Unknown} \
)
# Installation paths
ifeq ($(PREFIX),)
PREFIX := /usr/local
endif
BINDIR := $(DESTDIR)$(PREFIX)/bin
SYSTEMD_DIR := $(DESTDIR)$(PREFIX)/lib/systemd/system
UDEV_DIR := $(DESTDIR)$(PREFIX)/lib/udev/rules.d
DATADIR_PATH := $(PREFIX)/share/fcp-server
DATADIR := $(DESTDIR)$(DATADIR_PATH)
DEPDIR := .deps
DEPFLAGS = -MT $@ -MMD -MP -MF $(DEPDIR)/$(*D)/$(*F).d
CFLAGS := -Wall -Werror -ggdb -fno-omit-frame-pointer -O2 -D_FORTIFY_SOURCE=2
CFLAGS += -DVERSION=\"$(VERSION)\"
CFLAGS += -DDATADIR=\"$(DATADIR_PATH)\"
PKG_CONFIG=pkg-config
CFLAGS += $(shell $(PKG_CONFIG) --cflags alsa)
LDFLAGS += $(shell $(PKG_CONFIG) --libs alsa)
LDFLAGS += $(shell $(PKG_CONFIG) --libs libcrypto)
LDFLAGS += $(shell $(PKG_CONFIG) --libs zlib)
LDFLAGS += $(shell $(PKG_CONFIG) --libs json-c)
LDFLAGS += -lm
SERVER_CFLAGS := $(shell $(PKG_CONFIG) --cflags libsystemd)
SERVER_LDFLAGS := $(shell $(PKG_CONFIG) --libs libsystemd)
COMPILE.c = $(CC) $(DEPFLAGS) $(CFLAGS) -c
# Define source files for each target
CLIENT_SRCS := $(sort $(wildcard client/*.c))
SERVER_SRCS := $(sort $(wildcard server/*.c))
SHARED_SRCS := $(sort $(wildcard shared/*.c))
# Define object files
CLIENT_OBJS := $(patsubst %.c,%.o,$(CLIENT_SRCS))
SERVER_OBJS := $(patsubst %.c,%.o,$(SERVER_SRCS))
SHARED_OBJS := $(patsubst %.c,%.o,$(SHARED_SRCS))
# Define dependency directories needed
CLIENT_DEPDIRS := $(addprefix $(DEPDIR)/,$(dir $(CLIENT_SRCS)))
SERVER_DEPDIRS := $(addprefix $(DEPDIR)/,$(dir $(SERVER_SRCS)))
SHARED_DEPDIRS := $(addprefix $(DEPDIR)/,$(dir $(SHARED_SRCS)))
DEPDIRS := $(sort $(CLIENT_DEPDIRS) $(SERVER_DEPDIRS) $(SHARED_DEPDIRS))
# Define targets
TARGETS := fcp-tool fcp-server systemd/[email protected]
all: $(TARGETS)
# Create all dependency directories
$(DEPDIRS):
mkdir -p $@
# Define dependency files
CLIENT_DEPS := $(CLIENT_SRCS:%.c=$(DEPDIR)/%.d)
SERVER_DEPS := $(SERVER_SRCS:%.c=$(DEPDIR)/%.d)
SHARED_DEPS := $(SHARED_SRCS:%.c=$(DEPDIR)/%.d)
# Update COMPILE.c for server files
$(SERVER_OBJS): COMPILE.c = $(CC) $(DEPFLAGS) $(CFLAGS) $(SERVER_CFLAGS) -c
# Pattern rule for object files
%.o: %.c | $(DEPDIRS)
$(COMPILE.c) $(OUTPUT_OPTION) $<
$(CLIENT_DEPS):
$(SERVER_DEPS):
$(SHARED_DEPS):
-include $(wildcard $(CLIENT_DEPS))
-include $(wildcard $(SERVER_DEPS))
-include $(wildcard $(SHARED_DEPS))
fcp-tool: $(CLIENT_OBJS) $(SHARED_OBJS)
cc -o $@ $(CLIENT_OBJS) $(SHARED_OBJS) ${LDFLAGS}
fcp-server: $(SERVER_OBJS)
cc -o $@ $(SERVER_OBJS) ${LDFLAGS} ${SERVER_LDFLAGS}
clean: depclean
rm -f $(TARGETS) $(CLIENT_OBJS) $(SERVER_OBJS) $(SHARED_OBJS) systemd/[email protected]
depclean:
rm -rf $(DEPDIR)
systemd/[email protected]: systemd/[email protected]
sed 's|@PREFIX@|$(PREFIX)|g' $< > $@
install: all install-bin install-service install-rules install-data
install-bin:
install -d $(BINDIR)
install -m 755 fcp-tool $(BINDIR)
install -m 755 fcp-server $(BINDIR)
install-service: systemd/[email protected]
install -D -m 644 $< $(SYSTEMD_DIR)/[email protected]
@echo "Run 'sudo systemctl daemon-reload' to reload systemd"
install-rules:
install -D -m 644 udev/99-fcp.rules $(UDEV_DIR)/99-fcp.rules
@echo "Run 'sudo udevadm control --reload-rules' to reload udev rules"
install-data:
install -d $(DATADIR)
install -m 644 data/fcp-alsa-map-*.json $(DATADIR)/
uninstall:
rm -f $(BINDIR)/fcp-tool
rm -f $(BINDIR)/fcp-server
rm -f $(SYSTEMD_DIR)/[email protected]
rm -f $(UDEV_DIR)/99-fcp.rules
rm -rf $(DATADIR)
help:
@echo "fcp-support"
@echo
@echo "This Makefile knows about:"
@echo " make - build fcp-server and fcp-tool"
@echo " make install - install everything (binaries, service, rules, data)"
@echo " make uninstall - uninstall everything"
@echo " make clean - remove build files"
@echo " make depclean - remove dependency files"
.PHONY: all clean depclean install uninstall help install-bin install-service install-rules install-data