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