1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
# Copyright 2022 Alejandro Colomar <alx@kernel.org>
# SPDX-License-Identifier: LGPL-3.0-or-later WITH LGPL-3.0-linking-exception
ifndef LIB_LINT_C_MK_
LIB_LINT_C_MK_ := 1
include $(srcdir)/lib/build.mk
include $(srcdir)/lib/build-lib.mk
include $(srcdir)/lib/src.mk
include $(srcdir)/lib/version.mk
DEFAULT_CLANGFLAGS := -Weverything
DEFAULT_CLANGFLAGS += -Wno-empty-translation-unit
DEFAULT_CLANGFLAGS += -Wno-format-nonliteral
DEFAULT_CLANGFLAGS += -Wno-nullability-extension
DEFAULT_CLANGFLAGS += -Wno-pointer-arith
DEFAULT_CLANGFLAGS += -Wno-sign-conversion
DEFAULT_CLANGFLAGS += -Wno-unused-command-line-argument
DEFAULT_CLANGFLAGS += -Wno-unused-macros
DEFAULT_CLANGFLAGS += -Wno-zero-length-array
EXTRA_CLANGFLAGS :=
CLANGFLAGS := $(DEFAULT_CLANGFLAGS) $(EXTRA_CLANGFLAGS)
CHECKPATCH_CONF := $(srcdir)/etc/checkpatch/checkpatch.conf
DEFAULT_CHECKPATCHFLAGS :=
EXTRA_CHECKPATCHFLAGS :=
CHECKPATCHFLAGS := $(DEFAULT_CHECKPATCHFLAGS) $(EXTRA_CHECKPATCHFLAGS)
CHECKPATCH := checkpatch
CLANG-TIDY_CONF := $(srcdir)/etc/clang-tidy/config.yaml
DEFAULT_CLANG-TIDYFLAGS := --config-file=$(CLANG-TIDY_CONF)
DEFAULT_CLANG-TIDYFLAGS += --quiet
DEFAULT_CLANG-TIDYFLAGS += --use-color
EXTRA_CLANG-TIDYFLAGS :=
CLANG-TIDYFLAGS := $(DEFAULT_CLANG-TIDYFLAGS) $(EXTRA_CLANG-TIDYFLAGS)
CLANG-TIDY := clang-tidy
CPPLINT_CONF := $(srcdir)/etc/cpplint/cpplint.cfg
DEFAULT_CPPLINTFLAGS :=
EXTRA_CPPLINTFLAGS :=
CPPLINTFLAGS := $(DEFAULT_CPPLINTFLAGS) $(EXTRA_CPPLINTFLAGS)
CPPLINT := cpplint
CPPCHECK_CONF := $(srcdir)/etc/cppcheck/cppcheck.suppress
DEFAULT_CPPCHECKFLAGS := --enable=all
DEFAULT_CPPCHECKFLAGS += --error-exitcode=2
DEFAULT_CPPCHECKFLAGS += --inconclusive
DEFAULT_CPPCHECKFLAGS += --quiet
DEFAULT_CPPCHECKFLAGS += --suppressions-list=$(CPPCHECK_CONF)
DEFAULT_CPPCHECKFLAGS += -Uc_unlikely
DEFAULT_CPPCHECKFLAGS += -Uc_unreachable
EXTRA_CPPCHECKFLAGS :=
CPPCHECKFLAGS := $(DEFAULT_CPPCHECKFLAGS) $(EXTRA_CPPCHECKFLAGS)
CPPCHECK := cppcheck
DEFAULT_IWYUFLAGS := -Xiwyu --no_fwd_decls
DEFAULT_IWYUFLAGS += -Xiwyu --error
EXTRA_IWYUFLAGS :=
IWYUFLAGS := $(DEFAULT_IWYUFLAGS) $(EXTRA_IWYUFLAGS)
IWYU := iwyu
_TU_h_ckp := $(addsuffix .lint-c.checkpatch.touch,$(_TU_h))
_TU_c_ckp := $(addsuffix .lint-c.checkpatch.touch,$(_TU_c))
_TU_ckp := $(_TU_h_ckp) $(_TU_c_ckp)
_TU_h_ct := $(addsuffix .lint-c.clang-tidy.touch,$(_TU_h))
_TU_c_ct := $(addsuffix .lint-c.clang-tidy.touch,$(_TU_c))
_TU_ct := $(_TU_h_ct) $(_TU_c_ct)
_TU_h_cck := $(addsuffix .lint-c.cppcheck.touch,$(_TU_h))
_TU_c_cck := $(addsuffix .lint-c.cppcheck.touch,$(_TU_c))
_TU_cck := $(_TU_h_cck) $(_TU_c_cck)
_TU_h_cpl := $(addsuffix .lint-c.cpplint.touch,$(_TU_h))
_TU_c_cpl := $(addsuffix .lint-c.cpplint.touch,$(_TU_c))
_TU_cpl := $(_TU_h_cpl) $(_TU_c_cpl)
_TU_h_iwyu := $(addsuffix .lint-c.iwyu.touch,$(_TU_h))
_TU_c_iwyu := $(addsuffix .lint-c.iwyu.touch,$(_TU_c))
_TU_iwyu := $(_TU_h_iwyu) $(_TU_c_iwyu)
_LIB_cck := $(builddir)/$(libname).lint-c.cppcheck.touch
$(_TU_ckp): %.lint-c.checkpatch.touch: % $(CHECKPATCH_CONF) $(mk) | %.d $$(@D)/
$(info LINT (checkpatch) $@)
$(CHECKPATCH) $(CHECKPATCHFLAGS) -f $<
$(TOUCH) $@
$(_TU_ct): %.lint-c.clang-tidy.touch: % $(CLANG-TIDY_CONF) $(mk) | %.d $$(@D)/
$(info LINT (clang-tidy) $@)
$(CLANG-TIDY) $(CLANG-TIDYFLAGS) $< -- \
$(CPPFLAGS) $(CFLAGS) $(CLANGFLAGS) 2>&1 \
| $(SED) '/generated\.$$/d'
$(TOUCH) $@
$(_TU_cck): %.lint-c.cppcheck.touch: % $(CPPCHECK_CONF) $(mk) | %.d $$(@D)/
$(info LINT (cppcheck) $@)
$(CPPCHECK) $(CPPCHECKFLAGS) -I $(INCLUDEDIR) $<
$(TOUCH) $@
$(_LIB_cck): %.lint-c.cppcheck.touch: $(_TU_c) $(_TU_h) $(CPPCHECK_CONF) $(mk) | $$(@D)/
$(info LINT (cppcheck) $@)
$(CPPCHECK) $(CPPCHECKFLAGS) -I $(INCLUDEDIR) $(_TU_c) $(_TU_h)
$(TOUCH) $@
$(_TU_cpl): %.lint-c.cpplint.touch: % $(CPPLINT_CONF) $(mk) | %.d $$(@D)/
$(info LINT (cpplint) $@)
$(CPPLINT) $(CPPLINTFLAGS) $< >/dev/null
$(TOUCH) $@
$(_TU_iwyu): %.lint-c.iwyu.touch: % $(mk) | %.d $$(@D)/
$(info LINT (iwyu) $@)
$(IWYU) $(IWYUFLAGS) $(CPPFLAGS) $(CFLAGS) $(CLANGFLAGS) $< 2>&1 \
| $(TAC) \
| $(SED) '/correct/{N;d}' \
| $(TAC)
$(TOUCH) $@
linters_c := checkpatch clang-tidy cppcheck cpplint iwyu
lint_c := $(foreach x,$(linters_c),lint-c-$(x))
.PHONY: lint-c-checkpatch
lint-c-checkpatch: $(_TU_ckp)
@:
.PHONY: lint-c-clang-tidy
lint-c-clang-tidy: $(_TU_ct)
@:
.PHONY: lint-c-cppcheck
lint-c-cppcheck: $(_TU_cck) $(_LIB_cck)
@:
.PHONY: lint-c-cpplint
lint-c-cpplint: $(_TU_cpl)
@:
.PHONY: lint-c-iwyu
lint-c-iwyu: $(_TU_iwyu)
@:
.PHONY: lint-c
lint-c: $(lint_c)
@:
endif # include guard
|