blob: 9c82fca5035725e1c8492ddfa537ef3f1fbeb5a9 [file] [log] [blame]
Roman Stratiienkocef5c772021-12-22 16:22:24 +02001
2INCLUDE_DIRS := . ../libdrm/include/drm include ./.ci/android_headers ./tests/test_include
3SYSTEM_INCLUDE_DIRS := /usr/include/libdrm
4
Roman Stratiienkoa7913de2022-10-20 13:18:57 +03005CLANG := clang++-15
6CLANG_TIDY := clang-tidy-15
Roman Stratiienko5741bbd2021-12-30 18:12:26 +02007OUT_DIR := /tmp/drm_hwcomposer/build
Roman Stratiienkocef5c772021-12-22 16:22:24 +02008SRC_DIR := .
9
Roman Stratiienko6b405052022-12-10 19:09:10 +020010CXXFLAGS := -fPIC -Wall -Wextra -Werror -D__ANDROID_API__=31
Roman Stratiienkocef5c772021-12-22 16:22:24 +020011CXXFLAGS += -D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS
12CXXFLAGS += -fvisibility-inlines-hidden -std=gnu++17 -DHWC2_USE_CPP11 -DHWC2_INCLUDE_STRINGIFICATION -fno-rtti
13
Roman Stratiienko5741bbd2021-12-30 18:12:26 +020014SKIP_FILES := \
15 bufferinfo/BufferInfoMapperMetadata.cpp
Roman Stratiienkocef5c772021-12-22 16:22:24 +020016
Roman Stratiienko5741bbd2021-12-30 18:12:26 +020017TIDY_FILES_OVERRIDE := \
Roman Stratiienko5741bbd2021-12-30 18:12:26 +020018 bufferinfo/legacy/BufferInfoImagination.cpp:COARSE \
19 bufferinfo/legacy/BufferInfoLibdrm.cpp:COARSE \
20 bufferinfo/legacy/BufferInfoMaliHisi.cpp:COARSE \
21 bufferinfo/legacy/BufferInfoMaliMediatek.cpp:COARSE \
22 bufferinfo/legacy/BufferInfoMaliMeson.cpp:COARSE \
23 bufferinfo/legacy/BufferInfoMinigbm.cpp:COARSE \
Roman Stratiienko5741bbd2021-12-30 18:12:26 +020024 drm/DrmFbImporter.h:FINE \
Roman Stratiienko5741bbd2021-12-30 18:12:26 +020025 drm/DrmUnique.h:FINE \
Roman Stratiienko3e168902022-01-04 16:13:12 +020026 hwc2_device/DrmHwcTwo.cpp:COARSE \
27 hwc2_device/DrmHwcTwo.h:COARSE \
Roman Stratiienko3627beb2022-01-04 16:02:55 +020028 hwc2_device/HwcDisplay.cpp:COARSE \
29 hwc2_device/HwcDisplay.h:COARSE \
Roman Stratiienko5741bbd2021-12-30 18:12:26 +020030 utils/log.h:FINE \
31 utils/properties.h:FINE \
Roman Stratiienkocef5c772021-12-22 16:22:24 +020032
Roman Stratiienkoc46896d2022-01-04 11:10:22 +020033TIDY_CHECKS_FINE := * \
34 -llvmlibc* -fuchsia-* -altera-* \
35 -llvm-header-guard \
36 -cppcoreguidelines-pro-type-vararg \
37 -hicpp-vararg \
38 -hicpp-signed-bitwise \
Roman Stratiienkocf80b9b2022-04-28 15:42:36 +030039 -readability-identifier-length \
Roman Stratiienkoc46896d2022-01-04 11:10:22 +020040
41TIDY_CHECKS_NORMAL := \
42 $(TIDY_CHECKS_FINE) \
43 -hicpp* \
Roman Stratiienko780f7da2022-01-10 16:04:15 +020044 -bugprone-easily-swappable-parameters \
Roman Stratiienko24a7fc42021-12-23 16:25:20 +020045 -cppcoreguidelines-special-member-functions \
Roman Stratiienko24a7fc42021-12-23 16:25:20 +020046 -cppcoreguidelines-avoid-c-arrays \
Roman Stratiienkofc014f52021-12-23 19:04:29 +020047 -cppcoreguidelines-pro-bounds-array-to-pointer-decay \
48 -cppcoreguidelines-pro-bounds-constant-array-index \
49 -cppcoreguidelines-avoid-magic-numbers \
Roman Stratiienko24a7fc42021-12-23 16:25:20 +020050 -google-readability-braces-around-statements \
51 -google-readability-casting \
52 -misc-non-private-member-variables-in-classes \
53 -modernize-avoid-c-arrays \
Roman Stratiienkofc014f52021-12-23 19:04:29 +020054 -modernize-use-nodiscard \
Roman Stratiienko24a7fc42021-12-23 16:25:20 +020055 -modernize-use-trailing-return-type \
56 -readability-braces-around-statements \
Roman Stratiienko24a7fc42021-12-23 16:25:20 +020057
58TIDY_CHECKS_COARSE := \
59 $(TIDY_CHECKS_NORMAL) \
Roman Stratiienkoe78235c2021-12-23 17:36:12 +020060 -cppcoreguidelines-non-private-member-variables-in-classes \
Roman Stratiienkocef5c772021-12-22 16:22:24 +020061 -cppcoreguidelines-pro-bounds-pointer-arithmetic \
62 -cppcoreguidelines-pro-type-cstyle-cast \
Roman Stratiienkoe78235c2021-12-23 17:36:12 +020063 -cppcoreguidelines-pro-type-reinterpret-cast \
64 -cppcoreguidelines-pro-type-static-cast-downcast \
Roman Stratiienkocef5c772021-12-22 16:22:24 +020065 -cppcoreguidelines-pro-type-union-access \
Roman Stratiienkocef5c772021-12-22 16:22:24 +020066 -cppcoreguidelines-macro-usage \
Roman Stratiienkocef5c772021-12-22 16:22:24 +020067 -readability-convert-member-functions-to-static \
68 -readability-implicit-bool-conversion \
69 -readability-identifier-naming \
70 -readability-magic-numbers \
Roman Stratiienkocef5c772021-12-22 16:22:24 +020071
Roman Stratiienko5741bbd2021-12-30 18:12:26 +020072.PHONY: all build tidy clean
Roman Stratiienko24a7fc42021-12-23 16:25:20 +020073
Roman Stratiienko5741bbd2021-12-30 18:12:26 +020074all: build tidy
Roman Stratiienkocef5c772021-12-22 16:22:24 +020075
76clean:
77 rm -rf $(OUT_DIR)/
78
Roman Stratiienko5741bbd2021-12-30 18:12:26 +020079# Build
80
Roman Stratiienkobd973172022-02-18 16:51:53 +020081BUILD_FILES_AUTO := $(shell find -L $(SRC_DIR) -not -path '*/\.*' -not -path '*/tests/test_include/*' -path '*.cpp')
Roman Stratiienko5741bbd2021-12-30 18:12:26 +020082SKIP_FILES_path := $(foreach file,$(SKIP_FILES),$(SRC_DIR)/$(file))
83
84BUILD_FILES := $(subst ./,,$(filter-out $(SKIP_FILES_path),$(BUILD_FILES_AUTO)))
85
Roman Stratiienkocef5c772021-12-22 16:22:24 +020086_OBJ := $(BUILD_FILES:.cpp=.o)
87OBJ := $(patsubst %,$(OUT_DIR)/%,$(_OBJ))
88
Roman Stratiienkocef5c772021-12-22 16:22:24 +020089DEPS := $(patsubst %.cpp,$(OUT_DIR)/%.d,$(BUILD_FILES))
90
91build: $(OBJ)
92
Roman Stratiienkocef5c772021-12-22 16:22:24 +020093CXXARGS := $(foreach dir,$(INCLUDE_DIRS),-I$(SRC_DIR)/$(dir)) $(foreach dir,$(SYSTEM_INCLUDE_DIRS),-I$(dir)) $(CXXFLAGS)
94
95$(OUT_DIR)/%.o: $(SRC_DIR)/%.cpp
96 mkdir -p $(dir $@)
97 $(CLANG) $< $(CXXARGS) -c -o $@
98
99$(OUT_DIR)/%.d: $(SRC_DIR)/%.cpp
100 mkdir -p $(dir $@)
Roman Stratiienko35112732021-12-23 13:41:13 +0200101 $(CLANG) $(CXXARGS) $< -MM -MT $(OUT_DIR)/$(patsubst %.cpp,%.o,$<) -o $@
Roman Stratiienkocef5c772021-12-22 16:22:24 +0200102
Roman Stratiienko24a7fc42021-12-23 16:25:20 +0200103# TIDY
Roman Stratiienkobd973172022-02-18 16:51:53 +0200104TIDY_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 +0200105
106TIDY_FILES_AUTO_filtered := $(filter-out $(SKIP_FILES_path),$(TIDY_FILES_AUTO))
107
108TIDY_FILES_OVERRIDE_path := $(foreach pair,$(TIDY_FILES_OVERRIDE),$(SRC_DIR)/$(pair))
109
110TIDY_FILES_OVERRIDE_name_only := $(foreach pair,$(TIDY_FILES_OVERRIDE_path),$(word 1, $(subst :, ,$(pair))))
111
112TIDY_FILES := $(sort $(TIDY_FILES_AUTO_filtered) $(TIDY_FILES_OVERRIDE_name_only))
113
Roman Stratiienkocef5c772021-12-22 16:22:24 +0200114space := $(subst ,, )
115comma := ,
116
Roman Stratiienko24a7fc42021-12-23 16:25:20 +0200117TIDY_ARGS_NONE := --checks="-*,llvm-include-order"
118TIDY_ARGS_ := --checks="-*,llvm-include-order"
Roman Stratiienkoc46896d2022-01-04 11:10:22 +0200119TIDY_ARGS_FINE := --checks="$(subst $(space),$(comma),$(strip $(TIDY_CHECKS_FINE)))"
Roman Stratiienko24a7fc42021-12-23 16:25:20 +0200120TIDY_ARGS_NORMAL := --checks="$(subst $(space),$(comma),$(strip $(TIDY_CHECKS_NORMAL)))"
121TIDY_ARGS_COARSE := --checks="$(subst $(space),$(comma),$(strip $(TIDY_CHECKS_COARSE)))"
122
123define process-tidy
124
125_TARG := $(OUT_DIR)/$1.tidy.ts
126_DEP := $(SRC_DIR)/$1
127
128TIDY_DEPS += $(_TARG)
129
Roman Stratiienko5741bbd2021-12-30 18:12:26 +0200130TIDY_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 +0200131
Roman Stratiienko5741bbd2021-12-30 18:12:26 +0200132TIDY_LEVEL_2 := $$(if $$(TIDY_LEVEL_1),$$(TIDY_LEVEL_1),NORMAL)
133
134TIDY_ARGS := $$(TIDY_ARGS_$$(TIDY_LEVEL_2))
135
136$$(_TARG): _DEP := $$(_DEP)
137$$(_TARG): _TARG := $$(_TARG)
138$$(_TARG): TIDY_ARGS := $$(TIDY_ARGS)
139$$(_TARG): $$(_DEP)
140 mkdir -p $$(dir $$(_TARG))
Roman Stratiienkobd973172022-02-18 16:51:53 +0200141 $$(CLANG_TIDY) $$(_DEP) $$(TIDY_ARGS) -- -x c++ $$(CXXARGS) -Wno-pragma-once-outside-header
Roman Stratiienko5741bbd2021-12-30 18:12:26 +0200142 touch $$(_TARG)
Roman Stratiienko24a7fc42021-12-23 16:25:20 +0200143
Roman Stratiienkocef5c772021-12-22 16:22:24 +0200144endef
145
Roman Stratiienko5741bbd2021-12-30 18:12:26 +0200146$(foreach file,$(TIDY_FILES),$(eval $(call process-tidy,$(file))))
Roman Stratiienkocef5c772021-12-22 16:22:24 +0200147
Roman Stratiienko24a7fc42021-12-23 16:25:20 +0200148tidy: $(TIDY_DEPS)
Roman Stratiienkocef5c772021-12-22 16:22:24 +0200149
150ifneq ($(MAKECMDGOALS), clean)
151-include $(DEPS)
152endif