From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9E8CEA052A; Wed, 27 Jan 2021 18:37:33 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 12BA4140FEB; Wed, 27 Jan 2021 18:37:32 +0100 (CET) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mails.dpdk.org (Postfix) with ESMTP id 12CD1140FEA for ; Wed, 27 Jan 2021 18:37:29 +0100 (CET) IronPort-SDR: s/ZUldlXLTN8S3UNHrflBZTIXjXPXB1cd0AJP5KQ2PLnDPcQr2Ut8FHK/pjWNotRqKBj1fT31k NQp3fFjcJGuQ== X-IronPort-AV: E=McAfee;i="6000,8403,9877"; a="180184390" X-IronPort-AV: E=Sophos;i="5.79,380,1602572400"; d="scan'208";a="180184390" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Jan 2021 09:37:29 -0800 IronPort-SDR: P8WGuInuoDGK7MJGdzIPpLS73PiRJsF8JBnK+bcb61KcXfJdvMfzjcK8yOnJJ0/WKZmmXuQuAT Y5gau5MxZsrw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.79,380,1602572400"; d="scan'208";a="362507817" Received: from silpixa00399126.ir.intel.com ([10.237.222.4]) by fmsmga008.fm.intel.com with ESMTP; 27 Jan 2021 09:37:28 -0800 From: Bruce Richardson To: dev@dpdk.org Cc: david.marchand@redhat.com, Bruce Richardson , Thomas Monjalon Date: Wed, 27 Jan 2021 17:33:28 +0000 Message-Id: <20210127173330.1671341-7-bruce.richardson@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210127173330.1671341-1-bruce.richardson@intel.com> References: <20210114110606.21142-1-bruce.richardson@intel.com> <20210127173330.1671341-1-bruce.richardson@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v6 6/8] buildtools/chkincs: add app to verify header includes X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" To verify that all DPDK headers are ok for inclusion directly in a C file, and are not missing any other pre-requisite headers, we can auto-generate for each header an empty C file that includes that header. Compiling these files will throw errors if any header has unmet dependencies. To ensure ongoing compliance, we enable this build test as part of the default x86 build in "test-meson-builds.sh". Signed-off-by: Bruce Richardson --- MAINTAINERS | 4 +++ buildtools/chkincs/gen_c_file_for_header.py | 12 +++++++ buildtools/chkincs/main.c | 4 +++ buildtools/chkincs/meson.build | 40 +++++++++++++++++++++ devtools/test-meson-builds.sh | 2 +- doc/guides/rel_notes/release_21_02.rst | 8 +++++ meson.build | 5 +++ 7 files changed, 74 insertions(+), 1 deletion(-) create mode 100755 buildtools/chkincs/gen_c_file_for_header.py create mode 100644 buildtools/chkincs/main.c create mode 100644 buildtools/chkincs/meson.build diff --git a/MAINTAINERS b/MAINTAINERS index 1a12916f56..d4f9ebe46d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1562,6 +1562,10 @@ F: app/test/test_resource.c F: app/test/virtual_pmd.c F: app/test/virtual_pmd.h +Header build sanity checking +M: Bruce Richardson +F: buildtools/chkincs/ + Sample packet helper functions for unit test M: Reshma Pattan F: app/test/sample_packet_forward.c diff --git a/buildtools/chkincs/gen_c_file_for_header.py b/buildtools/chkincs/gen_c_file_for_header.py new file mode 100755 index 0000000000..ed46948aea --- /dev/null +++ b/buildtools/chkincs/gen_c_file_for_header.py @@ -0,0 +1,12 @@ +#! /usr/bin/env python3 +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2021 Intel Corporation + +from sys import argv +from os.path import abspath + +(h_file, c_file) = argv[1:] + +contents = '#include "' + abspath(h_file) + '"' +with open(c_file, 'w') as cf: + cf.write(contents) diff --git a/buildtools/chkincs/main.c b/buildtools/chkincs/main.c new file mode 100644 index 0000000000..d25bb8852a --- /dev/null +++ b/buildtools/chkincs/main.c @@ -0,0 +1,4 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2021 Intel Corporation + */ +int main(void) { return 0; } diff --git a/buildtools/chkincs/meson.build b/buildtools/chkincs/meson.build new file mode 100644 index 0000000000..5dc43283e0 --- /dev/null +++ b/buildtools/chkincs/meson.build @@ -0,0 +1,40 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2021 Intel Corporation + +if not get_option('check_includes') + build = false + subdir_done() +endif + +if is_windows + # for windows, the shebang line in the script won't work. + error('option "check_includes" is not supported on windows') +endif + +gen_c_file_for_header = find_program('gen_c_file_for_header.py') +gen_c_files = generator(gen_c_file_for_header, + output: '@BASENAME@.c', + arguments: ['@INPUT@', '@OUTPUT@']) + +cflags = machine_args +cflags += '-Wno-unused-function' # needed if we include generic headers +cflags += '-DALLOW_EXPERIMENTAL_API' + +# some ethdev headers depend on bus headers +includes = include_directories('../../drivers/bus/pci', + '../../drivers/bus/vdev') + +sources = files('main.c') +sources += gen_c_files.process(dpdk_chkinc_headers) + +deps = [] +foreach l:enabled_libs + deps += get_variable('static_rte_' + l) +endforeach + +executable('chkincs', sources, + c_args: cflags, + include_directories: includes, + dependencies: deps, + link_whole: dpdk_static_libraries + dpdk_drivers, + install: false) diff --git a/devtools/test-meson-builds.sh b/devtools/test-meson-builds.sh index efa91e0e40..07b5e6aeca 100755 --- a/devtools/test-meson-builds.sh +++ b/devtools/test-meson-builds.sh @@ -227,7 +227,7 @@ default_machine='nehalem' if ! check_cc_flags "-march=$default_machine" ; then default_machine='corei7' fi -build build-x86-default cc skipABI \ +build build-x86-default cc skipABI -Dcheck_includes=true\ -Dlibdir=lib -Dmachine=$default_machine $use_shared # 32-bit with default compiler diff --git a/doc/guides/rel_notes/release_21_02.rst b/doc/guides/rel_notes/release_21_02.rst index 33bac4fff8..245d1a6473 100644 --- a/doc/guides/rel_notes/release_21_02.rst +++ b/doc/guides/rel_notes/release_21_02.rst @@ -122,6 +122,14 @@ New Features * Added support for aes-cbc sha256-128-hmac cipher combination in OCTEON TX2 crypto PMD lookaside protocol offload for IPsec. +* **Added support for build-time checking of header includes** + + A new build option ``check_includes`` has been added, which, when enabled, + will perform build-time checking on DPDK public header files, to ensure none + are missing dependent header includes. This feature, disabled by default, is + intended for use by developers contributing to the DPDK SDK itself, and is + integrated into the build scripts and automated CI for patch contributions. + Removed Items ------------- diff --git a/meson.build b/meson.build index e6e34d0a98..fcc4d4c900 100644 --- a/meson.build +++ b/meson.build @@ -68,6 +68,11 @@ if get_option('enable_kmods') subdir('kernel') endif +# check header includes if requested +if get_option('check_includes') + subdir('buildtools/chkincs') +endif + # write the build config build_cfg = 'rte_build_config.h' configure_file(output: build_cfg, -- 2.27.0