xref: /aosp_15_r20/external/libchrome-gestures/Makefile (revision aed3e5085e770be5b69ce25295ecf6ddf906af95)
1# Copyright 2012 The ChromiumOS Authors
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5OBJDIR = obj
6SRC=$(shell readlink -f .)
7
8# Objects for libgestures
9SO_OBJECTS=\
10	$(OBJDIR)/accel_filter_interpreter.o \
11	$(OBJDIR)/activity_log.o \
12	$(OBJDIR)/box_filter_interpreter.o \
13	$(OBJDIR)/click_wiggle_filter_interpreter.o \
14	$(OBJDIR)/file_util.o \
15	$(OBJDIR)/filter_interpreter.o \
16	$(OBJDIR)/finger_merge_filter_interpreter.o \
17	$(OBJDIR)/finger_metrics.o \
18	$(OBJDIR)/fling_stop_filter_interpreter.o \
19	$(OBJDIR)/gestures.o \
20	$(OBJDIR)/haptic_button_generator_filter_interpreter.o \
21	$(OBJDIR)/iir_filter_interpreter.o \
22	$(OBJDIR)/immediate_interpreter.o \
23	$(OBJDIR)/integral_gesture_filter_interpreter.o \
24	$(OBJDIR)/interpreter.o \
25	$(OBJDIR)/logging_filter_interpreter.o \
26	$(OBJDIR)/lookahead_filter_interpreter.o \
27	$(OBJDIR)/metrics_filter_interpreter.o \
28	$(OBJDIR)/mouse_interpreter.o \
29	$(OBJDIR)/multitouch_mouse_interpreter.o \
30	$(OBJDIR)/non_linearity_filter_interpreter.o \
31	$(OBJDIR)/palm_classifying_filter_interpreter.o \
32	$(OBJDIR)/prop_registry.o \
33	$(OBJDIR)/scaling_filter_interpreter.o \
34	$(OBJDIR)/sensor_jump_filter_interpreter.o \
35	$(OBJDIR)/split_correcting_filter_interpreter.o \
36	$(OBJDIR)/stationary_wiggle_filter_interpreter.o \
37	$(OBJDIR)/string_util.o \
38	$(OBJDIR)/stuck_button_inhibitor_filter_interpreter.o \
39	$(OBJDIR)/t5r2_correcting_filter_interpreter.o \
40	$(OBJDIR)/timestamp_filter_interpreter.o \
41	$(OBJDIR)/trace_marker.o \
42	$(OBJDIR)/tracer.o \
43	$(OBJDIR)/trend_classifying_filter_interpreter.o \
44
45# Objects for unittests
46TEST_OBJECTS=\
47	$(OBJDIR)/accel_filter_interpreter_unittest.o \
48	$(OBJDIR)/activity_log_unittest.o \
49	$(OBJDIR)/activity_replay_unittest.o \
50	$(OBJDIR)/box_filter_interpreter_unittest.o \
51	$(OBJDIR)/click_wiggle_filter_interpreter_unittest.o \
52	$(OBJDIR)/command_line.o \
53	$(OBJDIR)/filter_interpreter_unittest.o \
54	$(OBJDIR)/finger_merge_filter_interpreter_unittest.o \
55	$(OBJDIR)/finger_metrics_unittest.o \
56	$(OBJDIR)/fling_stop_filter_interpreter_unittest.o \
57	$(OBJDIR)/gestures_unittest.o \
58	$(OBJDIR)/haptic_button_generator_filter_interpreter_unittest.o \
59	$(OBJDIR)/iir_filter_interpreter_unittest.o \
60	$(OBJDIR)/immediate_interpreter_unittest.o \
61	$(OBJDIR)/integral_gesture_filter_interpreter_unittest.o \
62	$(OBJDIR)/interpreter_unittest.o \
63	$(OBJDIR)/logging_filter_interpreter_unittest.o \
64	$(OBJDIR)/lookahead_filter_interpreter_unittest.o \
65	$(OBJDIR)/non_linearity_filter_interpreter_unittest.o \
66	$(OBJDIR)/metrics_filter_interpreter_unittest.o \
67	$(OBJDIR)/mouse_interpreter_unittest.o \
68	$(OBJDIR)/multitouch_mouse_interpreter_unittest.o \
69	$(OBJDIR)/palm_classifying_filter_interpreter_unittest.o \
70	$(OBJDIR)/prop_registry_unittest.o \
71	$(OBJDIR)/scaling_filter_interpreter_unittest.o \
72	$(OBJDIR)/sensor_jump_filter_interpreter_unittest.o \
73	$(OBJDIR)/split_correcting_filter_interpreter_unittest.o \
74	$(OBJDIR)/stationary_wiggle_filter_interpreter_unittest.o \
75	$(OBJDIR)/string_util_unittest.o \
76	$(OBJDIR)/stuck_button_inhibitor_filter_interpreter_unittest.o \
77	$(OBJDIR)/t5r2_correcting_filter_interpreter_unittest.o \
78	$(OBJDIR)/timestamp_filter_interpreter_unittest.o \
79	$(OBJDIR)/trace_marker_unittest.o \
80	$(OBJDIR)/tracer_unittest.o \
81	$(OBJDIR)/trend_classifying_filter_interpreter_unittest.o \
82	$(OBJDIR)/unittest_util.o \
83	$(OBJDIR)/util_unittest.o \
84	$(OBJDIR)/vector_unittest.o
85
86# Objects that are neither unittests nor SO objects
87MISC_OBJECTS=\
88	$(OBJDIR)/activity_replay.o \
89
90TEST_MAIN=\
91	$(OBJDIR)/test_main.o
92
93TEST_EXE=test
94SONAME=$(OBJDIR)/libgestures.so.0
95
96ALL_OBJECTS=\
97	$(TEST_OBJECTS) \
98	$(TEST_MAIN) \
99	$(SO_OBJECTS) \
100	$(MISC_OBJECTS)
101
102ALL_OBJECT_FILES=\
103	$(SO_OBJECTS) \
104	$(MISC_OBJECTS) \
105	$(TEST_OBJECTS) \
106	$(TEST_MAIN)
107
108DEPDIR = .deps
109
110DESTDIR = .
111
112CXXFLAGS+=\
113	-g \
114	-std=gnu++20 \
115	-fno-exceptions \
116	-fno-strict-aliasing \
117	-fPIC \
118	-Wall \
119	-Wempty-body \
120	-Werror \
121	-Wignored-qualifiers \
122	-Wmissing-field-initializers \
123	-Wmissing-format-attribute \
124	-Wmissing-noreturn \
125	-Wsign-compare \
126	-Wtype-limits \
127	-D__STDC_FORMAT_MACROS=1 \
128	-D_FILE_OFFSET_BITS=64 \
129	-DGESTURES_INTERNAL=1 \
130	-I.
131
132ifeq (yes,$(SANITIZE_GESTURES))
133CXXFLAGS+=\
134	-fsanitize=address,undefined \
135	-fno-sanitize-recover=all
136LINK_FLAGS+=\
137	-fsanitize=address,undefined \
138	-fno-sanitize-recover=all
139endif
140
141# Local compilation needs these flags, esp for code coverage testing
142ifeq (g++,$(CXX))
143CXXFLAGS+=\
144	-O1 \
145	-DVCSID="\"1234 TESTVERSION\"" \
146	--coverage \
147	-ftest-coverage \
148	-fprofile-arcs
149LINK_FLAGS+=-lgcov
150endif
151
152PKG_CONFIG ?= pkg-config
153PC_CFLAGS := $(shell $(PKG_CONFIG) --cflags $(PC_DEPS))
154PC_LIBS := $(shell $(PKG_CONFIG) --libs $(PC_DEPS))
155
156CXXFLAGS += $(PC_CFLAGS) -I$(SYSROOT)/usr/include/jsoncpp
157LINK_FLAGS += $(PC_LIBS) -ljsoncpp
158
159LINK_FLAGS+=\
160	-lpthread \
161	-lrt
162
163TEST_LINK_FLAGS=\
164	-lgcov \
165	-lgtest
166
167all: $(SONAME)
168
169$(SONAME): $(SO_OBJECTS)
170	$(CXX) -shared -o $@ $(SO_OBJECTS) -Wl,-h$(SONAME:$(OBJDIR)/%=%) \
171		$(LINK_FLAGS)
172
173$(TEST_EXE): $(ALL_OBJECTS)
174	$(CXX) -o $@ $(CXXFLAGS) $(ALL_OBJECTS) $(LINK_FLAGS) $(TEST_LINK_FLAGS)
175
176$(OBJDIR)/%.o : src/%.cc
177	mkdir -p $(OBJDIR) $(DEPDIR) || true
178	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -MMD -c -o $@ $<
179	@mv $(@:$.o=$.d) $(DEPDIR)
180
181LIBDIR = /usr/lib
182
183install: $(SONAME)
184	install -D -m 0755 $(SONAME) \
185		$(DESTDIR)$(LIBDIR)/$(SONAME:$(OBJDIR)/%=%)
186	ln -s $(SONAME:$(OBJDIR)/%=%) \
187		$(DESTDIR)$(LIBDIR)/$(SONAME:$(OBJDIR)/%.0=%)
188	install -D -m 0644 libgestures.pc \
189		$(DESTDIR)$(LIBDIR)/pkgconfig/libgestures.pc
190	install -D -m 0644 \
191		include/gestures.h $(DESTDIR)/usr/include/gestures/gestures.h
192
193clean:
194	rm -rf $(OBJDIR) $(DEPDIR) $(TEST_EXE) html app.info app.info.orig
195
196setup-in-place:
197	sudo emerge -v1 dev-libs/jsoncpp
198	mkdir -p $(SRC)/in-place/gestures || true
199	ln -sf $(SRC)/include/gestures.h $(SRC)/in-place/gestures/gestures.h
200	ln -sf $(SRC)/$(SONAME) $(SRC)/in-place/$(SONAME:$(OBJDIR)/%.0=%)
201	ln -sf $(SRC)/$(SONAME) $(SRC)/in-place/$(SONAME:$(OBJDIR)/%=%)
202
203in-place: CXXFLAGS+=-DGESTURES_LARGE_LOGGING_BUFFER
204in-place: $(SONAME)
205
206clean-in-place: clean
207
208# Unittest coverage
209
210LCOV_EXE=/usr/bin/lcov
211
212$(LCOV_EXE):
213	sudo emerge -DNuv1 dev-util/lcov
214
215cov: $(TEST_EXE) $(LCOV_EXE)
216	lcov -d . --zerocounters
217	./$(TEST_EXE)
218	lcov --directory . --capture --output-file $(OBJDIR)/app.info
219	sed -i.orig 's|/obj/src/|/src/|g' $(OBJDIR)/app.info
220	sed -i.orig 's|/gestures/gestures/|/gestures/|g' $(OBJDIR)/app.info
221	genhtml --no-function-coverage -o html $(OBJDIR)/app.info || \
222		genhtml -o html $(OBJDIR)/app.info
223	./tools/local_coverage_rate.sh $(OBJDIR)/app.info
224
225.PHONY : clean cov all
226
227-include $(ALL_OBJECT_FILES:$(OBJDIR)/%.o=$(DEPDIR)/%.d)
228