[dpdk-dev] [PATCH 00/20] ensure headers have correct includes
Bruce Richardson
bruce.richardson at intel.com
Thu Jan 14 12:05:46 CET 2021
As a general principle, each header file should include any other
headers it needs to provide data type definitions or macros. For
example, any header using the uintX_t types in structures or function
prototypes should include "stdint.h" to provide those type definitions.
In practice, while many, but not all, headers in DPDK did include all
necessary headers, it was never actually checked that each header could
be included in a C file and compiled without having any compiler errors
about missing definitions. This patchset fixes any missing includes in
public headers from the DPDK "lib" folder and then adds a "chkincs" app.
to verify this on an ongoing basis.
This chkincs app does nothing when run, it's for build-time checking
only. Its source code consists of one C file per public DPDK header,
where that C file contains nothing except an include for that header.
Therefore, if any header is added to the lib folder which fails to
compile when included alone, the build of chkincs will fail with a
suitable error message. Since this compile checking is not needed on
most builds of DPDK, the building of chkincs is disabled by default, but
can be enabled by the "test_includes" meson option. To catch errors with
patch submissions, the final patch of this series enables it for a
single build in test-meson-builds script.
Future work could involve doing similar checks on headers for C++ compatibility,
for example.
Bruce Richardson (20):
eal: fix missing header inclusion
telemetry: fix missing header include
ethdev: fix missing header include
ring: fix missing includes for c11 model header
net: fix missing header include
mbuf: fix missing header include
bitratestats: fix missing header include
rib: fix missing header includes
vhost: fix missing header includes
ipsec: fix missing header include
fib: fix missing header includes
table: fix missing header include
pipeline: fix missing header includes
metrics: fix variable declaration in header
node: fix missing header include
app: fix extra include paths for app builds
app/chkincs: add chkincs app to verify headers
eal: add missing include to mcslock
eal/x86: add architecture-specific headers to chkincs
test-meson-builds: add includes check to default x86 build
app/chkincs/gen_c_file_for_header.py | 53 ++++++++++++++++++++
app/chkincs/main.c | 4 ++
app/chkincs/meson.build | 28 +++++++++++
app/meson.build | 2 +
devtools/test-meson-builds.sh | 2 +-
lib/librte_bitratestats/rte_bitrate.h | 1 +
lib/librte_eal/include/generic/rte_mcslock.h | 1 +
lib/librte_eal/include/rte_reciprocal.h | 1 +
lib/librte_eal/x86/include/meson.build | 1 +
lib/librte_ethdev/rte_eth_ctrl.h | 1 +
lib/librte_fib/rte_fib.h | 1 +
lib/librte_fib/rte_fib6.h | 1 +
lib/librte_ipsec/rte_ipsec_sad.h | 1 +
lib/librte_mbuf/rte_mbuf_core.h | 1 +
lib/librte_mbuf/rte_mbuf_dyn.h | 3 ++
lib/librte_metrics/rte_metrics_telemetry.c | 2 +
lib/librte_metrics/rte_metrics_telemetry.h | 2 -
lib/librte_net/rte_geneve.h | 1 +
lib/librte_node/rte_node_ip4_api.h | 1 +
lib/librte_pipeline/rte_swx_ctl.h | 1 +
lib/librte_pipeline/rte_swx_pipeline.h | 1 +
lib/librte_rib/rte_rib.h | 2 +
lib/librte_ring/rte_ring_c11_mem.h | 4 ++
lib/librte_table/rte_lru_x86.h | 1 +
lib/librte_telemetry/rte_telemetry.h | 1 +
lib/librte_vhost/rte_vdpa.h | 2 +
lib/librte_vhost/rte_vdpa_dev.h | 1 +
lib/librte_vhost/rte_vhost_crypto.h | 7 +++
lib/meson.build | 1 +
meson.build | 1 +
meson_options.txt | 2 +
31 files changed, 128 insertions(+), 3 deletions(-)
create mode 100755 app/chkincs/gen_c_file_for_header.py
create mode 100644 app/chkincs/main.c
create mode 100644 app/chkincs/meson.build
--
2.27.0
More information about the dev
mailing list