-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathMakefile
126 lines (100 loc) · 3.2 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
EXEC = wayst
INSTALL_DIR = /usr/local/bin
ARGS =
SRC_DIR = src
TST_DIR = tests/unit_tests
BLD_DIR = build
TGT_DIR = .
ifeq ($(shell uname -s),FreeBSD)
INCLUDES = -I/usr/local/include/freetype2/
INCLUDES += -I/usr/local/include
LDLIBS = -lfreetype -lfontconfig -lutil -L/usr/local/lib -lm
else
CC?= cc
INCLUDES = -I/usr/include/freetype2/
LDLIBS = -lfreetype -lfontconfig -lutil -L/usr/lib -lm
endif
ifeq ($(mode),sanitized)
CFLAGS = -std=c18 -MD -O0 -g3 -ffinite-math-only -fno-rounding-math -fshort-enums -fsanitize=address -fsanitize=undefined -DDEBUG
LDFLAGS = -fsanitize=address -fsanitize=undefined -fsanitize=unreachable
LDLIBS += -lGLU
else ifeq ($(mode),debug)
CFLAGS = -std=c18 -MD -g -O0 -fno-omit-frame-pointer -fshort-enums -DDEBUG
LDFLAGS = -O0 -g
LDLIBS += -lGLU
else ifeq ($(mode),profile)
CFLAGS = -std=c18 -O2 -mtune=generic -ffast-math -fshort-enums -pg -fno-omit-frame-pointer
LDFLAGS = -O2 -pg
else ifeq ($(mode),debugoptimized)
CFLAGS = -std=c18 -MD -g -O2 -fno-omit-frame-pointer -mtune=generic -ffast-math -fshort-enums -DDEBUG
LDFLAGS = -O2 -g
LDLIBS += -lGLU
else ifeq ($(mode),quick)
CFLAGS = -std=c18 -MD -fshort-enums
LDFLAGS =
else
CFLAGS = -std=c18 -MD -O2 -mtune=generic -ffast-math -fshort-enums -flto=auto
LDFLAGS = -O2 -flto=auto
endif
ifeq ($(libutf8proc),off)
$(info libutf8proc not found. Support for language-specific combining characters and unicode normalization will be disabled.)
CFLAGS += -DNOUTF8PROC
else
LDLIBS += -lutf8proc
endif
CCWNO = -Wall -Wextra -Wno-unused-parameter -Wno-unused-function -Werror=implicit-function-declaration
SRCS = $(wildcard $(SRC_DIR)/*.c wildcard $(SRC_DIR)/wcwidth/wcwidth.c)
SRCS_WLEXTS = $(wildcard $(SRC_DIR)/wl_exts/*.c)
XLDLIBS = -lX11 -lXrender -lXrandr
WLLDLIBS = -lwayland-client -lwayland-egl -lwayland-cursor -lxkbcommon -lEGL
ifeq ($(window_protocol), x11)
CFLAGS += -DNOWL
OBJ = $(SRCS:$(SRC_DIR)/%.c=$(BLD_DIR)/%.o)
LDLIBS += $(XLDLIBS)
else ifeq ($(window_protocol), wayland)
CFLAGS += -DNOX
OBJ = $(SRCS:$(SRC_DIR)/%.c=$(BLD_DIR)/%.o) $(SRCS_WLEXTS:$(SRC_DIR)/%.c=$(BLD_DIR)/%.o)
LDLIBS += $(WLLDLIBS)
else
OBJ = $(SRCS:$(SRC_DIR)/%.c=$(BLD_DIR)/%.o) $(SRCS_WLEXTS:$(SRC_DIR)/%.c=$(BLD_DIR)/%.o)
LDLIBS += $(XLDLIBS) $(WLLDLIBS)
endif
ifeq ($(renderer), gles20)
CFLAGS += -DGFX_GLES
LDLIBS += -lGLESv2
else
LDLIBS += -lGL
endif
$(EXEC): $(OBJ)
$(CC) $(OBJ) $(LDLIBS) -o $(TGT_DIR)/$(EXEC) $(LDFLAGS)
all: $(OBJ)
$(CC) $(OBJ) $(LDLIBS) -o $(TGT_DIR)/$(EXEC) $(LDFLAGS)
$(BLD_DIR)/%.o: $(SRC_DIR)/%.c
@mkdir -p $(BLD_DIR)
@mkdir -p $(BLD_DIR)/wcwidth
@mkdir -p $(BLD_DIR)/wl_exts
$(CC) -c $< $(CFLAGS) $(CCWNO) $(INCLUDES) -o $@
run:
./$(TGT_DIR)/$(EXEC) $(ARGS)
debug:
gdb --args ./$(TGT_DIR)/$(EXEC) $(ARGS)
clean:
$(RM) -f $(OBJ)
cleanall:
$(RM) -f $(EXEC) $(OBJ) $(OBJ:.o=.d)
install:
cp $(EXEC) $(INSTALL_DIR)/
uninstall:
$(RM) $(INSTALL_DIR)/$(EXEC)
-include $(OBJ:.o=.d)
.PHONY: shaders
.PHONY: test
.PHONY: graph
shaders:
./$(SRC_DIR)/pack_shaders.sh shaders_gl21 > $(SRC_DIR)/shaders_gl21.h
./$(SRC_DIR)/pack_shaders.sh shaders_gles20 > $(SRC_DIR)/shaders_gles20.h
test:
@chmod +x $(TST_DIR)/run_tests.sh
@./$(TST_DIR)/run_tests.sh
graph:
@gprof ./wayst | gprof2dot | dot -Tpng -o perf_graph.png