• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1
2BASE_DIR:=../aospless
3
4SYSTEM_INCLUDE_DIRS := /usr/include/libdrm
5
6CLANG := clang++-19
7CLANG_TIDY := clang-tidy-19
8OUT_DIR := /tmp/drm_hwcomposer/build
9SRC_DIR := .
10
11CXXFLAGS := -Wall -Wextra -Werror -Wno-missing-designated-field-initializers
12CXXFLAGS += -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS -Wthread-safety
13CXXFLAGS += -fvisibility-inlines-hidden -std=gnu++17 -DHWC2_USE_CPP11 -DHWC2_INCLUDE_STRINGIFICATION -fno-rtti
14
15CXXARGS := $(shell cat $(BASE_DIR)/toolchain_wrapper/sharedlib.cppflags)
16CXXARGS := $(subst [BASE_DIR],$(BASE_DIR),$(CXXARGS))
17# clang-tidy doesn't like -mcpu=xxx flag
18CXXARGS := $(patsubst -mcpu=%,,$(CXXARGS))
19CXXARGS += -I. -I./tests/test_include $(CXXFLAGS)
20
21TIDY_FILES_OVERRIDE := \
22    bufferinfo/legacy/BufferInfoImagination.cpp:COARSE  \
23    bufferinfo/legacy/BufferInfoLibdrm.cpp:COARSE       \
24    bufferinfo/legacy/BufferInfoMaliHisi.cpp:COARSE     \
25    bufferinfo/legacy/BufferInfoMaliMediatek.cpp:COARSE \
26    bufferinfo/legacy/BufferInfoMaliMeson.cpp:COARSE    \
27    bufferinfo/legacy/BufferInfoMinigbm.cpp:COARSE      \
28    drm/DrmFbImporter.h:FINE                            \
29    drm/DrmUnique.h:FINE                                \
30    hwc2_device/DrmHwcTwo.cpp:COARSE                    \
31    hwc2_device/DrmHwcTwo.h:COARSE                      \
32    hwc2_device/HwcDisplay.cpp:COARSE                   \
33    hwc2_device/HwcDisplay.h:COARSE                     \
34    utils/log.h:FINE                                    \
35    utils/properties.h:FINE                             \
36
37TIDY_CHECKS_FINE := *                                   \
38    -llvmlibc* -fuchsia-* -altera-*                     \
39    -llvm-header-guard                                  \
40    -cppcoreguidelines-pro-type-vararg                  \
41    -google-readability-todo                            \
42    -hicpp-vararg                                       \
43    -hicpp-signed-bitwise                               \
44    -misc-const-correctness                             \
45    -readability-identifier-length                      \
46    -misc-include-cleaner                               \
47    -performance-enum-size                              \
48    -misc-use-anonymous-namespace                       \
49    -boost-use-ranges                                   \
50    -cppcoreguidelines-avoid-do-while                   \
51    -modernize-min-max-use-initializer-list             \
52    -cppcoreguidelines-owning-memory                    \
53    -readability-redundant-member-init                  \
54    -cppcoreguidelines-avoid-const-or-ref-data-members  \
55    -cert-err33-c                                       \
56
57TIDY_CHECKS_NORMAL :=                                   \
58    $(TIDY_CHECKS_FINE)                                 \
59    -hicpp*                                             \
60    -bugprone-easily-swappable-parameters               \
61    -cppcoreguidelines-special-member-functions \
62    -cppcoreguidelines-avoid-c-arrays \
63    -cppcoreguidelines-pro-bounds-array-to-pointer-decay \
64    -cppcoreguidelines-pro-bounds-constant-array-index \
65    -cppcoreguidelines-avoid-magic-numbers \
66    -google-readability-braces-around-statements \
67    -google-readability-casting \
68    -misc-non-private-member-variables-in-classes \
69    -modernize-avoid-c-arrays \
70    -modernize-use-nodiscard \
71    -modernize-use-trailing-return-type \
72    -readability-braces-around-statements \
73
74TIDY_CHECKS_COARSE := \
75    $(TIDY_CHECKS_NORMAL) \
76    -cppcoreguidelines-non-private-member-variables-in-classes \
77    -cppcoreguidelines-pro-bounds-pointer-arithmetic \
78    -cppcoreguidelines-pro-type-cstyle-cast \
79    -cppcoreguidelines-pro-type-reinterpret-cast \
80    -cppcoreguidelines-pro-type-static-cast-downcast \
81    -cppcoreguidelines-pro-type-union-access \
82    -cppcoreguidelines-macro-usage \
83    -readability-convert-member-functions-to-static \
84    -readability-implicit-bool-conversion \
85    -readability-identifier-naming \
86    -readability-magic-numbers \
87
88.PHONY: all build tidy clean
89
90all: build tidy
91
92clean:
93	rm -rf $(OUT_DIR)/
94
95# Build
96
97BUILD_FILES_AUTO := $(shell find -L $(SRC_DIR) -not -path '*/\.*' -not -path '*/tests/test_include/*' -path '*.cpp')
98SKIP_FILES_path := $(foreach file,$(SKIP_FILES),$(SRC_DIR)/$(file))
99
100BUILD_FILES := $(subst ./,,$(filter-out $(SKIP_FILES_path),$(BUILD_FILES_AUTO)))
101
102_OBJ := $(BUILD_FILES:.cpp=.o)
103OBJ  := $(patsubst %,$(OUT_DIR)/%,$(_OBJ))
104
105DEPS := $(patsubst %.cpp,$(OUT_DIR)/%.d,$(BUILD_FILES))
106
107build: $(OBJ)
108
109$(OUT_DIR)/%.o: $(SRC_DIR)/%.cpp
110	@mkdir -p $(dir $@)
111	@echo "CC $<"
112	@$(CLANG) $< $(CXXARGS) -c -o $@
113
114$(OUT_DIR)/%.d: $(SRC_DIR)/%.cpp
115	@mkdir -p $(dir $@)
116	@$(CLANG) $(CXXARGS) $< -MM -MT $(OUT_DIR)/$(patsubst %.cpp,%.o,$<) -o $@
117
118# TIDY
119TIDY_FILES_AUTO := $(shell find -L $(SRC_DIR) -not -path '*/\.*' -not -path '*/tests/test_include/*' \( -path '*.cpp' -o -path '*.h' \))
120
121TIDY_FILES_AUTO_filtered := $(filter-out $(SKIP_FILES_path),$(TIDY_FILES_AUTO))
122
123TIDY_FILES_OVERRIDE_path := $(foreach pair,$(TIDY_FILES_OVERRIDE),$(SRC_DIR)/$(pair))
124
125TIDY_FILES_OVERRIDE_name_only := $(foreach pair,$(TIDY_FILES_OVERRIDE_path),$(word 1, $(subst :, ,$(pair))))
126
127TIDY_FILES := $(sort $(TIDY_FILES_AUTO_filtered) $(TIDY_FILES_OVERRIDE_name_only))
128
129space := $(subst ,, )
130comma := ,
131
132TIDY_ARGS_NONE := --checks="-*,llvm-include-order"
133TIDY_ARGS_     := --checks="-*,llvm-include-order"
134TIDY_ARGS_FINE := --checks="$(subst $(space),$(comma),$(strip $(TIDY_CHECKS_FINE)))"
135TIDY_ARGS_NORMAL := --checks="$(subst $(space),$(comma),$(strip $(TIDY_CHECKS_NORMAL)))"
136TIDY_ARGS_COARSE := --checks="$(subst $(space),$(comma),$(strip $(TIDY_CHECKS_COARSE)))"
137
138define process-tidy
139
140_TARG := $(OUT_DIR)/$1.tidy.ts
141_DEP := $1
142
143TIDY_DEPS += $(_TARG)
144
145TIDY_LEVEL_1 := $$(strip $$(foreach pair,$$(TIDY_FILES_OVERRIDE_path),$$(if $$(filter $$(word 1, $$(subst :, ,$$(pair))),$1),$$(word 2, $$(subst :, ,$$(pair))),)))
146
147TIDY_LEVEL_2 := $$(if $$(TIDY_LEVEL_1),$$(TIDY_LEVEL_1),NORMAL)
148
149TIDY_ARGS := $$(TIDY_ARGS_$$(TIDY_LEVEL_2))
150
151$$(_TARG): _DEP := $$(_DEP)
152$$(_TARG): _TARG := $$(_TARG)
153$$(_TARG): TIDY_ARGS := $$(TIDY_ARGS)
154$$(_TARG): $$(_DEP)
155	@mkdir -p $$(dir $$(_TARG))
156	@echo "TIDY $$<"
157	@$$(CLANG_TIDY) $$(_DEP) $$(TIDY_ARGS) --quiet -- -x c++ $$(CXXARGS) -Wno-pragma-once-outside-header
158	@touch $$(_TARG)
159
160endef
161
162$(foreach file,$(TIDY_FILES),$(eval $(call process-tidy,$(file))))
163
164tidy: $(TIDY_DEPS)
165
166ifneq ($(MAKECMDGOALS), clean)
167-include $(DEPS)
168endif
169