-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
88 lines (67 loc) · 1.94 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
VERSION = 0.1
# toolchain
CC = cc
LD = cc
AR = ar
TAR = tar
TAG = etags
# vpath
VPATH = src:test
# include
INCLUDE = include
# build dir
BDIR = build
# Flags
CFLAGS = -Wall
CPPFLAGS = -DWLR_USE_UNSTABLE=1 -I/usr/include/libdrm -I/usr/include/pixman-1 -I$(INCLUDE)
LDFLAGS =
LDLIBS = -lwayland-server -lwlroots -lxkbcommon
# architecture
ARCH = -march=native
# build mode
ifneq ($(DEBUG), )
CFLAGS += -Wextra -Werror -g -O0 -fsanitize=address
CPPFLAGS += -DDEBUG -Wno-unused-variable -Wno-unused-function -Wno-unused-parameter
BDIR = build/debug
else
CFLAGS += -O3
CPPFLAGS += -DNDEBUG
BDIR = build/release
endif
all: $(patsubst protocol/%.xml, $(INCLUDE)/%.h, $(wildcard protocol/*.xml)) $(BDIR)/kurai
include/%.h: protocol/%.xml
wayland-scanner server-header $< $@
$(BDIR)/kurai: $(patsubst src/%.c,$(BDIR)/%.o,$(wildcard src/*.c))
$(LD) $(LDFLAGS) $(CFLAGS) $^ $(LDLIBS) -o $@
$(BDIR)/%.o: %.c $(BDIR)/%.d
@mkdir -p $(@D)
$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
$(BDIR)/%.d: %.c
@mkdir -p $(@D)
@set -e; rm -f $@; \
$(CC) -M $(CPPFLAGS) $< > $@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
.PRECIOUS: $(BDIR)/%.d
# alternatively supress errors with `-include`
include $(wildcard $(patsubst src/%.c, $(BDIR)/%.d, $(wildcard src/*.c)))
dist:
@mkdir kurai-$(VERSION)
@cp -r kurai -r man -r test Makefile README.md LICENSE kurai-$(VERSION)
@$(TAR) cvzf kurai-$(VERSION).tar.gz kurai-$(VERSION)
@rm -rf kurai-$(VERSION)
# TODO: use PREFIX instead of hardcoded path
install: $(BDIR)/kurai/kurai
@cp $(BDIR)/kurai/kurai /usr/local/bin/
@gzip < man/kurai.1 > /usr/local/man/man1/kurai.1.gz
dist-clean:
@rm -rf $(BDIR)
@rm -f kurai-$(VERSION).tar.gz
tags:
$(TAG) **/*.c **/*.h
format:
clang-format -i -style=file **/*.c **/*.h
clean:
@rm -f $(patsubst protocol/%.xml, $(INCLUDE)/%.h, $(wildcard protocol/*.xml))
@rm -rf build/*
.PHONY: all check dist install dist-clean tags clean