blob: 051a4371d8dc3dfe0d31a013beef6dfe9b828ac8 [file] [log] [blame]
Roman Stratiienkocef5c772021-12-22 16:22:24 +02001
Roman Stratiienko0fea1882024-10-17 00:02:10 +03002BASE_DIR:=../aospless
Roman Stratiienko2a93e4c2022-12-19 18:24:47 +02003
Roman Stratiienkocef5c772021-12-22 16:22:24 +02004SYSTEM_INCLUDE_DIRS := /usr/include/libdrm
5
Roman Stratiienko57ba08a2024-10-17 01:48:10 +03006CLANG := clang++-19
7CLANG_TIDY := clang-tidy-19
Roman Stratiienko5741bbd2021-12-30 18:12:26 +02008OUT_DIR := /tmp/drm_hwcomposer/build
Roman Stratiienkocef5c772021-12-22 16:22:24 +02009SRC_DIR := .
10
Roman Stratiienko57ba08a2024-10-17 01:48:10 +030011CXXFLAGS := -Wall -Wextra -Werror -Wno-missing-designated-field-initializers
Roman Stratiienkocef5c772021-12-22 16:22:24 +020012CXXFLAGS += -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS
13CXXFLAGS += -fvisibility-inlines-hidden -std=gnu++17 -DHWC2_USE_CPP11 -DHWC2_INCLUDE_STRINGIFICATION -fno-rtti
14
Roman Stratiienko6e5c82e2024-10-16 23:05:25 +030015CXXARGS := $(shell cat $(BASE_DIR)/toolchain_wrapper/sharedlib.cppflags)
Roman Stratiienko2a93e4c2022-12-19 18:24:47 +020016CXXARGS := $(subst [BASE_DIR],$(BASE_DIR),$(CXXARGS))
17# clang-tidy doesn't like -mcpu=xxx flag
18CXXARGS := $(patsubst -mcpu=%,,$(CXXARGS))
19# TODO: build aospless with gtest enabled and remove line below
20CXXARGS := $(subst -nostdlibinc,,$(CXXARGS))
21CXXARGS += -I. -I./tests/test_include $(CXXFLAGS)
Roman Stratiienkocef5c772021-12-22 16:22:24 +020022
Roman Stratiienko5741bbd2021-12-30 18:12:26 +020023TIDY_FILES_OVERRIDE := \
Roman Stratiienko5741bbd2021-12-30 18:12:26 +020024 bufferinfo/legacy/BufferInfoImagination.cpp:COARSE \
25 bufferinfo/legacy/BufferInfoLibdrm.cpp:COARSE \
26 bufferinfo/legacy/BufferInfoMaliHisi.cpp:COARSE \
27 bufferinfo/legacy/BufferInfoMaliMediatek.cpp:COARSE \
28 bufferinfo/legacy/BufferInfoMaliMeson.cpp:COARSE \
29 bufferinfo/legacy/BufferInfoMinigbm.cpp:COARSE \
Roman Stratiienko5741bbd2021-12-30 18:12:26 +020030 drm/DrmFbImporter.h:FINE \
Roman Stratiienko5741bbd2021-12-30 18:12:26 +020031 drm/DrmUnique.h:FINE \
Roman Stratiienko3e168902022-01-04 16:13:12 +020032 hwc2_device/DrmHwcTwo.cpp:COARSE \
33 hwc2_device/DrmHwcTwo.h:COARSE \
Roman Stratiienko3627beb2022-01-04 16:02:55 +020034 hwc2_device/HwcDisplay.cpp:COARSE \
35 hwc2_device/HwcDisplay.h:COARSE \
Roman Stratiienko5741bbd2021-12-30 18:12:26 +020036 utils/log.h:FINE \
37 utils/properties.h:FINE \
Roman Stratiienkocef5c772021-12-22 16:22:24 +020038
Roman Stratiienkoc46896d2022-01-04 11:10:22 +020039TIDY_CHECKS_FINE := * \
40 -llvmlibc* -fuchsia-* -altera-* \
41 -llvm-header-guard \
42 -cppcoreguidelines-pro-type-vararg \
Drew Davenport6abf8192024-08-30 15:29:15 -060043 -google-readability-todo \
Roman Stratiienkoc46896d2022-01-04 11:10:22 +020044 -hicpp-vararg \
45 -hicpp-signed-bitwise \
Drew Davenport8ac53ef2024-09-05 13:31:14 -060046 -misc-const-correctness \
Roman Stratiienkocf80b9b2022-04-28 15:42:36 +030047 -readability-identifier-length \
Roman Stratiienko57ba08a2024-10-17 01:48:10 +030048 -misc-include-cleaner \
49 -performance-enum-size \
50 -misc-use-anonymous-namespace \
51 -boost-use-ranges \
52 -cppcoreguidelines-avoid-do-while \
53 -modernize-min-max-use-initializer-list \
54 -cppcoreguidelines-owning-memory \
55 -readability-redundant-member-init \
56 -cppcoreguidelines-avoid-const-or-ref-data-members \
57 -cert-err33-c \
58 -readability-math-missing-parentheses \
59 -readability-avoid-unconditional-preprocessor-if \
60 -modernize-type-traits \
61 -clang-analyzer-optin.core.EnumCastOutOfRange \
62 -performance-inefficient-vector-operation \
63 -readability-static-accessed-through-instance \
64 -misc-use-internal-linkage \
65 -performance-avoid-endl \
Roman Stratiienkoc46896d2022-01-04 11:10:22 +020066
67TIDY_CHECKS_NORMAL := \
68 $(TIDY_CHECKS_FINE) \
69 -hicpp* \
Roman Stratiienko780f7da2022-01-10 16:04:15 +020070 -bugprone-easily-swappable-parameters \
Roman Stratiienko24a7fc42021-12-23 16:25:20 +020071 -cppcoreguidelines-special-member-functions \
Roman Stratiienko24a7fc42021-12-23 16:25:20 +020072 -cppcoreguidelines-avoid-c-arrays \
Roman Stratiienkofc014f52021-12-23 19:04:29 +020073 -cppcoreguidelines-pro-bounds-array-to-pointer-decay \
74 -cppcoreguidelines-pro-bounds-constant-array-index \
75 -cppcoreguidelines-avoid-magic-numbers \
Roman Stratiienko24a7fc42021-12-23 16:25:20 +020076 -google-readability-braces-around-statements \
77 -google-readability-casting \
78 -misc-non-private-member-variables-in-classes \
79 -modernize-avoid-c-arrays \
Roman Stratiienkofc014f52021-12-23 19:04:29 +020080 -modernize-use-nodiscard \
Roman Stratiienko24a7fc42021-12-23 16:25:20 +020081 -modernize-use-trailing-return-type \
82 -readability-braces-around-statements \
Roman Stratiienko24a7fc42021-12-23 16:25:20 +020083
84TIDY_CHECKS_COARSE := \
85 $(TIDY_CHECKS_NORMAL) \
Roman Stratiienkoe78235c2021-12-23 17:36:12 +020086 -cppcoreguidelines-non-private-member-variables-in-classes \
Roman Stratiienkocef5c772021-12-22 16:22:24 +020087 -cppcoreguidelines-pro-bounds-pointer-arithmetic \
88 -cppcoreguidelines-pro-type-cstyle-cast \
Roman Stratiienkoe78235c2021-12-23 17:36:12 +020089 -cppcoreguidelines-pro-type-reinterpret-cast \
90 -cppcoreguidelines-pro-type-static-cast-downcast \
Roman Stratiienkocef5c772021-12-22 16:22:24 +020091 -cppcoreguidelines-pro-type-union-access \
Roman Stratiienkocef5c772021-12-22 16:22:24 +020092 -cppcoreguidelines-macro-usage \
Roman Stratiienkocef5c772021-12-22 16:22:24 +020093 -readability-convert-member-functions-to-static \
94 -readability-implicit-bool-conversion \
95 -readability-identifier-naming \
96 -readability-magic-numbers \
Roman Stratiienkocef5c772021-12-22 16:22:24 +020097
Roman Stratiienko5741bbd2021-12-30 18:12:26 +020098.PHONY: all build tidy clean
Roman Stratiienko24a7fc42021-12-23 16:25:20 +020099
Roman Stratiienko5741bbd2021-12-30 18:12:26 +0200100all: build tidy
Roman Stratiienkocef5c772021-12-22 16:22:24 +0200101
102clean:
103 rm -rf $(OUT_DIR)/
104
Roman Stratiienko5741bbd2021-12-30 18:12:26 +0200105# Build
106
Roman Stratiienkobd973172022-02-18 16:51:53 +0200107BUILD_FILES_AUTO := $(shell find -L $(SRC_DIR) -not -path '*/\.*' -not -path '*/tests/test_include/*' -path '*.cpp')
Roman Stratiienko5741bbd2021-12-30 18:12:26 +0200108SKIP_FILES_path := $(foreach file,$(SKIP_FILES),$(SRC_DIR)/$(file))
109
110BUILD_FILES := $(subst ./,,$(filter-out $(SKIP_FILES_path),$(BUILD_FILES_AUTO)))
111
Roman Stratiienkocef5c772021-12-22 16:22:24 +0200112_OBJ := $(BUILD_FILES:.cpp=.o)
113OBJ := $(patsubst %,$(OUT_DIR)/%,$(_OBJ))
114
Roman Stratiienkocef5c772021-12-22 16:22:24 +0200115DEPS := $(patsubst %.cpp,$(OUT_DIR)/%.d,$(BUILD_FILES))
116
117build: $(OBJ)
118
Roman Stratiienkocef5c772021-12-22 16:22:24 +0200119$(OUT_DIR)/%.o: $(SRC_DIR)/%.cpp
Roman Stratiienko2a93e4c2022-12-19 18:24:47 +0200120 @mkdir -p $(dir $@)
121 @echo "CC $<"
122 @$(CLANG) $< $(CXXARGS) -c -o $@
Roman Stratiienkocef5c772021-12-22 16:22:24 +0200123
124$(OUT_DIR)/%.d: $(SRC_DIR)/%.cpp
Roman Stratiienko2a93e4c2022-12-19 18:24:47 +0200125 @mkdir -p $(dir $@)
126 @$(CLANG) $(CXXARGS) $< -MM -MT $(OUT_DIR)/$(patsubst %.cpp,%.o,$<) -o $@
Roman Stratiienkocef5c772021-12-22 16:22:24 +0200127
Roman Stratiienko24a7fc42021-12-23 16:25:20 +0200128# TIDY
Roman Stratiienkobd973172022-02-18 16:51:53 +0200129TIDY_FILES_AUTO := $(shell find -L $(SRC_DIR) -not -path '*/\.*' -not -path '*/tests/test_include/*' \( -path '*.cpp' -o -path '*.h' \))
Roman Stratiienko5741bbd2021-12-30 18:12:26 +0200130
131TIDY_FILES_AUTO_filtered := $(filter-out $(SKIP_FILES_path),$(TIDY_FILES_AUTO))
132
133TIDY_FILES_OVERRIDE_path := $(foreach pair,$(TIDY_FILES_OVERRIDE),$(SRC_DIR)/$(pair))
134
135TIDY_FILES_OVERRIDE_name_only := $(foreach pair,$(TIDY_FILES_OVERRIDE_path),$(word 1, $(subst :, ,$(pair))))
136
137TIDY_FILES := $(sort $(TIDY_FILES_AUTO_filtered) $(TIDY_FILES_OVERRIDE_name_only))
138
Roman Stratiienkocef5c772021-12-22 16:22:24 +0200139space := $(subst ,, )
140comma := ,
141
Roman Stratiienko24a7fc42021-12-23 16:25:20 +0200142TIDY_ARGS_NONE := --checks="-*,llvm-include-order"
143TIDY_ARGS_ := --checks="-*,llvm-include-order"
Roman Stratiienkoc46896d2022-01-04 11:10:22 +0200144TIDY_ARGS_FINE := --checks="$(subst $(space),$(comma),$(strip $(TIDY_CHECKS_FINE)))"
Roman Stratiienko24a7fc42021-12-23 16:25:20 +0200145TIDY_ARGS_NORMAL := --checks="$(subst $(space),$(comma),$(strip $(TIDY_CHECKS_NORMAL)))"
146TIDY_ARGS_COARSE := --checks="$(subst $(space),$(comma),$(strip $(TIDY_CHECKS_COARSE)))"
147
148define process-tidy
149
150_TARG := $(OUT_DIR)/$1.tidy.ts
Roman Stratiienko2a93e4c2022-12-19 18:24:47 +0200151_DEP := $1
Roman Stratiienko24a7fc42021-12-23 16:25:20 +0200152
153TIDY_DEPS += $(_TARG)
154
Roman Stratiienko5741bbd2021-12-30 18:12:26 +0200155TIDY_LEVEL_1 := $$(strip $$(foreach pair,$$(TIDY_FILES_OVERRIDE_path),$$(if $$(filter $$(word 1, $$(subst :, ,$$(pair))),$1),$$(word 2, $$(subst :, ,$$(pair))),)))
Roman Stratiienko24a7fc42021-12-23 16:25:20 +0200156
Roman Stratiienko5741bbd2021-12-30 18:12:26 +0200157TIDY_LEVEL_2 := $$(if $$(TIDY_LEVEL_1),$$(TIDY_LEVEL_1),NORMAL)
158
159TIDY_ARGS := $$(TIDY_ARGS_$$(TIDY_LEVEL_2))
160
161$$(_TARG): _DEP := $$(_DEP)
162$$(_TARG): _TARG := $$(_TARG)
163$$(_TARG): TIDY_ARGS := $$(TIDY_ARGS)
164$$(_TARG): $$(_DEP)
Roman Stratiienko2a93e4c2022-12-19 18:24:47 +0200165 @mkdir -p $$(dir $$(_TARG))
166 @echo "TIDY $$<"
167 @$$(CLANG_TIDY) $$(_DEP) $$(TIDY_ARGS) --quiet -- -x c++ $$(CXXARGS) -Wno-pragma-once-outside-header
168 @touch $$(_TARG)
Roman Stratiienko24a7fc42021-12-23 16:25:20 +0200169
Roman Stratiienkocef5c772021-12-22 16:22:24 +0200170endef
171
Roman Stratiienko5741bbd2021-12-30 18:12:26 +0200172$(foreach file,$(TIDY_FILES),$(eval $(call process-tidy,$(file))))
Roman Stratiienkocef5c772021-12-22 16:22:24 +0200173
Roman Stratiienko24a7fc42021-12-23 16:25:20 +0200174tidy: $(TIDY_DEPS)
Roman Stratiienkocef5c772021-12-22 16:22:24 +0200175
176ifneq ($(MAKECMDGOALS), clean)
177-include $(DEPS)
178endif