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 2F466A09E4; Thu, 28 Jan 2021 12:02:52 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1438E4067E; Thu, 28 Jan 2021 12:02:52 +0100 (CET) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mails.dpdk.org (Postfix) with ESMTP id EE4234067B for ; Thu, 28 Jan 2021 12:02:50 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1611831770; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=S1Bgd0rLtZayqB7IfBYfzSBWCDKrXnHJ6H6Bh8itHvc=; b=Ff8GEvGHLQ/ETNR+Opaw1VTFZGCVe4d7i9tp7DC7rybA/Wlls/eFpIB2mPJKPLqISPIgQN 8Jjzfvyjl4i9Y9oU8x/ZNrlAcOLbKUzHIRB3RLEmLlDSS6ekKMqNHiwV/8tstQXh6zn0IJ qFsvXXfQRaYB0THSQLE2PWe0O0XjJ54= Received: from mail-ua1-f70.google.com (mail-ua1-f70.google.com [209.85.222.70]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-399-ivftyzMBNcaKp8IxIdEAqQ-1; Thu, 28 Jan 2021 06:02:47 -0500 X-MC-Unique: ivftyzMBNcaKp8IxIdEAqQ-1 Received: by mail-ua1-f70.google.com with SMTP id y26so45707uap.19 for ; Thu, 28 Jan 2021 03:02:46 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=S1Bgd0rLtZayqB7IfBYfzSBWCDKrXnHJ6H6Bh8itHvc=; b=bCJhYOQTzZGGQ1gxB3Pcr1kGPx0MMnzzYfKkZyGHfbXefZTyAkvPYVdfuDP98+UQN5 16B7k21bvbn67i13kincE5HNCKfT2wGtNf1Z2UYO5z/O1CkqFPZSk0scOXlYYENyuv5R xtrfs5VmrdM1AP7SRJ/jsrPtzLdpQljgOmyaqjzsZ8zImQ6I+DVYN0Ad8+dvdT0XrUnM f3q8MH6LocoVpq86q+8CVA5DsM+TB690kRcNldtHYcEEXqb3nX5wRpXW57hr6ZgbPSO6 EdeOgj2ih2lcR6NevcW+1sTbD5rjT1b3VRaKmO7U6/Wh/s3QjvgDeI0PJPRjZ+Xx+Yua r2+A== X-Gm-Message-State: AOAM533By8nWOkkzK7ztTrzAd+BIynottYVnQxQaqC/FCadRWUCVjLQh StpD8HNzcqY53suL53CQ/gx3qQVzbddw2JLx5mrc1+la7r7gCLeH7A8tVnLZ/d76cEpF383RNI2 /rwl3g20oZcTFbOq8JrI= X-Received: by 2002:a67:ecd5:: with SMTP id i21mr10892181vsp.18.1611831766424; Thu, 28 Jan 2021 03:02:46 -0800 (PST) X-Google-Smtp-Source: ABdhPJw6giul2zWfMxmIUef2UzNy4TStSyDxvUNr+beqtyj5Dcbg1gwUmDKs3QawB0VvyjE/MTwM4Hy7aBTRKtQyEWY= X-Received: by 2002:a67:ecd5:: with SMTP id i21mr10892172vsp.18.1611831766194; Thu, 28 Jan 2021 03:02:46 -0800 (PST) MIME-Version: 1.0 References: <20210114110606.21142-1-bruce.richardson@intel.com> <20210127173330.1671341-1-bruce.richardson@intel.com> <20210127173330.1671341-7-bruce.richardson@intel.com> In-Reply-To: <20210127173330.1671341-7-bruce.richardson@intel.com> From: David Marchand Date: Thu, 28 Jan 2021 12:02:35 +0100 Message-ID: To: Bruce Richardson Cc: dev , Thomas Monjalon Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=dmarchan@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="UTF-8" Subject: Re: [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" On Wed, Jan 27, 2021 at 6:37 PM Bruce Richardson wrote: > > 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/ > + This can be squashed in the generic "Build System" block. > 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') ethdev headers are fine now, afaics. So this comment can be changed to a more vague "some driver headers depend on bus headers". > + > +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\ Space before \ to be consistent with the rest of the file. > -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. > + > Should be earlier in the new features list. > 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 > -- David Marchand