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