From patchwork Mon Jan 25 14:11:12 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruce Richardson X-Patchwork-Id: 87205 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 929B4A052A; Mon, 25 Jan 2021 15:11:35 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 115EC140EA7; Mon, 25 Jan 2021 15:11:35 +0100 (CET) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by mails.dpdk.org (Postfix) with ESMTP id 92DB5140DF1; Mon, 25 Jan 2021 15:11:33 +0100 (CET) IronPort-SDR: m7Nm0FIa/5l0qlcXkqpuxsiZpc6v/xzNXh9070I+Wxz5dDNIu2S/jzFcEn0f5tPpoCHAKbs+Wr tHEAE02xNv/w== X-IronPort-AV: E=McAfee;i="6000,8403,9874"; a="241266103" X-IronPort-AV: E=Sophos;i="5.79,373,1602572400"; d="scan'208";a="241266103" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jan 2021 06:11:31 -0800 IronPort-SDR: ngOKAE3kSsl9AOEMY8qeBP0Py4PSrewgwnRCaffHKo/033CPf6GEgvwiebEvTTg6MMYashVQzJ Y+ETesZ9R0ew== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.79,373,1602572400"; d="scan'208";a="504149207" Received: from silpixa00399126.ir.intel.com ([10.237.222.4]) by orsmga004.jf.intel.com with ESMTP; 25 Jan 2021 06:11:29 -0800 From: Bruce Richardson To: dev@dpdk.org Cc: david.marchand@redhat.com, thomas@monjalon.net, Bruce Richardson , stable@dpdk.org, Honnappa Nagarahalli , Steve Capper , Phil Yang , Gavin Hu Date: Mon, 25 Jan 2021 14:11:12 +0000 Message-Id: <20210125141115.573122-2-bruce.richardson@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210125141115.573122-1-bruce.richardson@intel.com> References: <20210114110606.21142-1-bruce.richardson@intel.com> <20210125141115.573122-1-bruce.richardson@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v3 1/4] eal: add missing include to mcslock 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" Include 'rte_branch_prediction.h' to get the likely/unlikely macro definitions. Fixes: 2173f3333b61 ("mcslock: add MCS queued lock implementation") Cc: stable@dpdk.org Signed-off-by: Bruce Richardson --- lib/librte_eal/include/generic/rte_mcslock.h | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/librte_eal/include/generic/rte_mcslock.h b/lib/librte_eal/include/generic/rte_mcslock.h index d370bef17a..9f323bd2a2 100644 --- a/lib/librte_eal/include/generic/rte_mcslock.h +++ b/lib/librte_eal/include/generic/rte_mcslock.h @@ -22,6 +22,7 @@ #include #include #include +#include /** * The rte_mcslock_t type. From patchwork Mon Jan 25 14:11:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruce Richardson X-Patchwork-Id: 87206 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id BC9DDA052A; Mon, 25 Jan 2021 15:11:43 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 30796140F34; Mon, 25 Jan 2021 15:11:43 +0100 (CET) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mails.dpdk.org (Postfix) with ESMTP id 35651140F2F for ; Mon, 25 Jan 2021 15:11:41 +0100 (CET) IronPort-SDR: tBvD3ROWKqo9L2GHKfptqaKvQ+mekii24SafFQLsV4odn8nvG0ivvlpQl5T+92CSNjQ6XWcTpf TWdo7G32ofgg== X-IronPort-AV: E=McAfee;i="6000,8403,9874"; a="179879771" X-IronPort-AV: E=Sophos;i="5.79,373,1602572400"; d="scan'208";a="179879771" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jan 2021 06:11:40 -0800 IronPort-SDR: wwShilVOy7/x/ejkEZAl0DlDFq/cofAAIpyvL3FRE55qgtm4DKqF2DgRD6F2MAtcF5y8jSsK4a MGpMvSV/Bynw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.79,373,1602572400"; d="scan'208";a="504149269" Received: from silpixa00399126.ir.intel.com ([10.237.222.4]) by orsmga004.jf.intel.com with ESMTP; 25 Jan 2021 06:11:37 -0800 From: Bruce Richardson To: dev@dpdk.org Cc: david.marchand@redhat.com, thomas@monjalon.net, Bruce Richardson , Konstantin Ananyev , Ferruh Yigit , Andrew Rybchenko , Yipeng Wang , Sameh Gobriel , Bernard Iremonger , Vladimir Medvedkin , Ori Kam , Honnappa Nagarahalli , Olivier Matz , Cristian Dumitrescu Date: Mon, 25 Jan 2021 14:11:13 +0000 Message-Id: <20210125141115.573122-3-bruce.richardson@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210125141115.573122-1-bruce.richardson@intel.com> References: <20210114110606.21142-1-bruce.richardson@intel.com> <20210125141115.573122-1-bruce.richardson@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v3 2/4] build: separate out headers for include checking 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" For some libraries, there may be some header files which are not for direct inclusion, but rather are to be included via other header files. To allow later checking of these files for missing includes, we separate out the indirect include files from the direct ones. Signed-off-by: Bruce Richardson --- doc/guides/contributing/coding_style.rst | 12 ++++++++++++ lib/librte_eal/include/meson.build | 2 +- lib/librte_eal/x86/include/meson.build | 14 +++++++++----- lib/librte_ethdev/meson.build | 4 ++-- lib/librte_hash/meson.build | 4 ++-- lib/librte_ipsec/meson.build | 3 ++- lib/librte_lpm/meson.build | 2 +- lib/librte_regexdev/meson.build | 2 +- lib/librte_ring/meson.build | 4 +++- lib/librte_stack/meson.build | 4 +++- lib/librte_table/meson.build | 7 +++---- lib/meson.build | 3 +++ meson.build | 1 + meson_options.txt | 2 ++ 14 files changed, 45 insertions(+), 19 deletions(-) diff --git a/doc/guides/contributing/coding_style.rst b/doc/guides/contributing/coding_style.rst index bb3f3efcbc..dba4145228 100644 --- a/doc/guides/contributing/coding_style.rst +++ b/doc/guides/contributing/coding_style.rst @@ -891,6 +891,18 @@ headers installed to $PREFIX/include when ``ninja install`` is run. As with source files, these should be specified using the meson ``files()`` function. + When ``check_includes`` build option is set to ``true``, each header file + has additional checks performed on it, for example to ensure that it is + not missing any include statements for dependent headers. + For header files which are public, but only included indirectly in + applications, these checks can be skipped by using the ``headers_no_chkincs`` + variable rather than ``headers``. + +headers_no_chkincs + **Default Value = []**. + As with ``headers`` option above, except that the files are not checked + for all needed include files as part of a DPDK build when + ``check_includes`` is set to ``true``. includes: **Default Value = []**. diff --git a/lib/librte_eal/include/meson.build b/lib/librte_eal/include/meson.build index 0dea342e1d..449740e510 100644 --- a/lib/librte_eal/include/meson.build +++ b/lib/librte_eal/include/meson.build @@ -16,7 +16,6 @@ headers += files( 'rte_dev.h', 'rte_devargs.h', 'rte_eal.h', - 'rte_eal_interrupts.h', 'rte_eal_memconfig.h', 'rte_eal_trace.h', 'rte_errno.h', @@ -49,6 +48,7 @@ headers += files( 'rte_version.h', 'rte_vfio.h', ) +headers_no_chkincs += files('rte_eal_interrupts.h') # special case install the generic headers, since they go in a subdir generic_headers = files( diff --git a/lib/librte_eal/x86/include/meson.build b/lib/librte_eal/x86/include/meson.build index 549cc21a42..835ea22947 100644 --- a/lib/librte_eal/x86/include/meson.build +++ b/lib/librte_eal/x86/include/meson.build @@ -2,11 +2,7 @@ # Copyright(c) 2017 Intel Corporation arch_headers = files( - 'rte_atomic_32.h', - 'rte_atomic_64.h', 'rte_atomic.h', - 'rte_byteorder_32.h', - 'rte_byteorder_64.h', 'rte_byteorder.h', 'rte_cpuflags.h', 'rte_cycles.h', @@ -22,4 +18,12 @@ arch_headers = files( 'rte_ticketlock.h', 'rte_vect.h', ) -install_headers(arch_headers, subdir: get_option('include_subdir_arch')) +arch_headers_no_chkincs = files( + 'rte_atomic_32.h', + 'rte_atomic_64.h', + 'rte_byteorder_32.h', + 'rte_byteorder_64.h', +) +install_headers(arch_headers + arch_headers_no_chkincs, + subdir: get_option('include_subdir_arch')) +dpdk_chkinc_headers += arch_headers diff --git a/lib/librte_ethdev/meson.build b/lib/librte_ethdev/meson.build index e4b610246f..ab84869ea8 100644 --- a/lib/librte_ethdev/meson.build +++ b/lib/librte_ethdev/meson.build @@ -12,12 +12,10 @@ sources = files('ethdev_private.c', headers = files('rte_ethdev.h', 'rte_ethdev_driver.h', - 'rte_ethdev_core.h', 'rte_ethdev_pci.h', 'rte_ethdev_trace.h', 'rte_ethdev_trace_fp.h', 'rte_ethdev_vdev.h', - 'rte_eth_ctrl.h', 'rte_dev_info.h', 'rte_flow.h', 'rte_flow_driver.h', @@ -25,5 +23,7 @@ headers = files('rte_ethdev.h', 'rte_mtr_driver.h', 'rte_tm.h', 'rte_tm_driver.h') +headers_no_chkincs += files('rte_eth_ctrl.h', + 'rte_ethdev_core.h') deps += ['net', 'kvargs', 'meter', 'telemetry'] diff --git a/lib/librte_hash/meson.build b/lib/librte_hash/meson.build index 0977a63fd2..b3ebc8b078 100644 --- a/lib/librte_hash/meson.build +++ b/lib/librte_hash/meson.build @@ -1,12 +1,12 @@ # SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2017 Intel Corporation -headers = files('rte_crc_arm64.h', - 'rte_fbk_hash.h', +headers = files('rte_fbk_hash.h', 'rte_hash_crc.h', 'rte_hash.h', 'rte_jhash.h', 'rte_thash.h') +headers_no_chkincs += files('rte_crc_arm64.h') sources = files('rte_cuckoo_hash.c', 'rte_fbk_hash.c') deps += ['ring'] diff --git a/lib/librte_ipsec/meson.build b/lib/librte_ipsec/meson.build index fc69970ec5..e24e6ed22b 100644 --- a/lib/librte_ipsec/meson.build +++ b/lib/librte_ipsec/meson.build @@ -3,6 +3,7 @@ sources = files('esp_inb.c', 'esp_outb.c', 'sa.c', 'ses.c', 'ipsec_sad.c') -headers = files('rte_ipsec.h', 'rte_ipsec_group.h', 'rte_ipsec_sa.h', 'rte_ipsec_sad.h') +headers = files('rte_ipsec.h', 'rte_ipsec_sa.h', 'rte_ipsec_sad.h') +headers_no_chkincs += files('rte_ipsec_group.h') deps += ['mbuf', 'net', 'cryptodev', 'security', 'hash'] diff --git a/lib/librte_lpm/meson.build b/lib/librte_lpm/meson.build index f93c866409..3d3d515a4d 100644 --- a/lib/librte_lpm/meson.build +++ b/lib/librte_lpm/meson.build @@ -5,6 +5,6 @@ sources = files('rte_lpm.c', 'rte_lpm6.c') headers = files('rte_lpm.h', 'rte_lpm6.h') # since header files have different names, we can install all vector headers # without worrying about which architecture we actually need -headers += files('rte_lpm_altivec.h', 'rte_lpm_neon.h', 'rte_lpm_sse.h', 'rte_lpm_sve.h') +headers_no_chkincs += files('rte_lpm_altivec.h', 'rte_lpm_neon.h', 'rte_lpm_sse.h', 'rte_lpm_sve.h') deps += ['hash'] deps += ['rcu'] diff --git a/lib/librte_regexdev/meson.build b/lib/librte_regexdev/meson.build index c417b9caf0..1ab21bd4d8 100644 --- a/lib/librte_regexdev/meson.build +++ b/lib/librte_regexdev/meson.build @@ -3,6 +3,6 @@ sources = files('rte_regexdev.c') headers = files('rte_regexdev.h', - 'rte_regexdev_core.h', 'rte_regexdev_driver.h') +headers_no_chkincs += files('rte_regexdev_core.h') deps += ['mbuf'] diff --git a/lib/librte_ring/meson.build b/lib/librte_ring/meson.build index 36fdcb6a57..1a95dae9e5 100644 --- a/lib/librte_ring/meson.build +++ b/lib/librte_ring/meson.build @@ -2,7 +2,9 @@ # Copyright(c) 2017 Intel Corporation sources = files('rte_ring.c') -headers = files('rte_ring.h', +headers = files('rte_ring.h') +# most sub-headers are not for direct inclusion +headers_no_chkincs += files ( 'rte_ring_core.h', 'rte_ring_elem.h', 'rte_ring_c11_mem.h', diff --git a/lib/librte_stack/meson.build b/lib/librte_stack/meson.build index 8f82a40ec2..5d9b3601b3 100644 --- a/lib/librte_stack/meson.build +++ b/lib/librte_stack/meson.build @@ -2,7 +2,9 @@ # Copyright(c) 2019 Intel Corporation sources = files('rte_stack.c', 'rte_stack_std.c', 'rte_stack_lf.c') -headers = files('rte_stack.h', +headers = files('rte_stack.h') +# subheaders, not for direct inclusion by apps +headers_no_chkincs += files( 'rte_stack_std.h', 'rte_stack_lf.h', 'rte_stack_lf_generic.h', diff --git a/lib/librte_table/meson.build b/lib/librte_table/meson.build index d69678386e..a8b1c9a254 100644 --- a/lib/librte_table/meson.build +++ b/lib/librte_table/meson.build @@ -20,7 +20,6 @@ headers = files('rte_table.h', 'rte_table_hash.h', 'rte_table_hash_cuckoo.h', 'rte_table_hash_func.h', - 'rte_table_hash_func_arm64.h', 'rte_lru.h', 'rte_table_array.h', 'rte_table_stub.h', @@ -28,6 +27,6 @@ headers = files('rte_table.h', 'rte_swx_table_em.h',) deps += ['mbuf', 'port', 'lpm', 'hash', 'acl'] -if arch_subdir == 'x86' - headers += files('rte_lru_x86.h') -endif +headers_no_chkincs += files('rte_lru_x86.h', + 'rte_lru_arm64.h', + 'rte_table_hash_func_arm64.h') diff --git a/lib/meson.build b/lib/meson.build index 44f0a62142..aa0a5ac8fc 100644 --- a/lib/meson.build +++ b/lib/meson.build @@ -66,6 +66,7 @@ foreach l:libraries use_function_versioning = false sources = [] headers = [] + headers_no_chkincs = [] # public headers not directly included by apps includes = [] cflags = default_cflags objs = [] # other object files to link against, used e.g. for @@ -103,6 +104,8 @@ foreach l:libraries enabled_libs += name dpdk_conf.set('RTE_LIB_' + name.to_upper(), 1) install_headers(headers) + install_headers(headers_no_chkincs) + dpdk_chkinc_headers += headers libname = 'rte_' + name includes += include_directories(dir_name) diff --git a/meson.build b/meson.build index 45d974cd2c..7c9a8fce5f 100644 --- a/meson.build +++ b/meson.build @@ -16,6 +16,7 @@ cc = meson.get_compiler('c') dpdk_conf = configuration_data() dpdk_libraries = [] dpdk_static_libraries = [] +dpdk_chkinc_headers = [] dpdk_driver_classes = [] dpdk_drivers = [] dpdk_extra_ldflags = [] diff --git a/meson_options.txt b/meson_options.txt index 4604328224..5c382487da 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,5 +1,7 @@ # Please keep these options sorted alphabetically. +option('check_includes', type: 'boolean', value: false, + description: 'build "chkincs" to verify each header file can compile alone') option('disable_drivers', type: 'string', value: '', description: 'Comma-separated list of drivers to explicitly disable.') option('drivers_install_subdir', type: 'string', value: 'dpdk/pmds-', From patchwork Mon Jan 25 14:11:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruce Richardson X-Patchwork-Id: 87208 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 9CA2CA052A; Mon, 25 Jan 2021 15:12:06 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D5777140F43; Mon, 25 Jan 2021 15:11:54 +0100 (CET) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id 5F697140F43 for ; Mon, 25 Jan 2021 15:11:53 +0100 (CET) IronPort-SDR: I/wMpAYHlrwISKuX1dcYN/JTKYT72FddI/GaOxVYugf2nGJPBI1dykZrH9r2aORaBQkpCyBo/q MpyZX1VXOJ8Q== X-IronPort-AV: E=McAfee;i="6000,8403,9874"; a="158909824" X-IronPort-AV: E=Sophos;i="5.79,373,1602572400"; d="scan'208";a="158909824" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jan 2021 06:11:52 -0800 IronPort-SDR: aI2RQOBK0l/gF/ZjVeQrM5OPQN0MJVK0aveqFzlLjgyafYzyVp/5F2P10uE9Q6b54I+omOmJB/ /Oy9rrWSlhGw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.79,373,1602572400"; d="scan'208";a="504149338" Received: from silpixa00399126.ir.intel.com ([10.237.222.4]) by orsmga004.jf.intel.com with ESMTP; 25 Jan 2021 06:11:49 -0800 From: Bruce Richardson To: dev@dpdk.org Cc: david.marchand@redhat.com, thomas@monjalon.net, Bruce Richardson Date: Mon, 25 Jan 2021 14:11:14 +0000 Message-Id: <20210125141115.573122-4-bruce.richardson@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210125141115.573122-1-bruce.richardson@intel.com> References: <20210114110606.21142-1-bruce.richardson@intel.com> <20210125141115.573122-1-bruce.richardson@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v3 3/4] 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 +- meson.build | 5 +++ 6 files changed, 66 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 aa973a3960..6df494e367 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1560,6 +1560,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/meson.build b/meson.build index 7c9a8fce5f..9aa7882911 100644 --- a/meson.build +++ b/meson.build @@ -69,6 +69,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, From patchwork Mon Jan 25 14:11:15 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bruce Richardson X-Patchwork-Id: 87209 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 1816AA052A; Mon, 25 Jan 2021 15:12:16 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0EBD7140F52; Mon, 25 Jan 2021 15:12:01 +0100 (CET) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by mails.dpdk.org (Postfix) with ESMTP id 887B3140F47 for ; Mon, 25 Jan 2021 15:11:59 +0100 (CET) IronPort-SDR: Bxn92W+YduEsmpWfLThWGeCLYceJocwl47ciRxXTxmgt1qkkLt1AeRIVZSRuGiJE5VP25w6e1D Yx0Y+r8qe1jw== X-IronPort-AV: E=McAfee;i="6000,8403,9874"; a="166832633" X-IronPort-AV: E=Sophos;i="5.79,373,1602572400"; d="scan'208";a="166832633" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jan 2021 06:11:58 -0800 IronPort-SDR: awGLsI2OJpbaUOv3gHQSHOQHK8+NVrBr/2pkxjLlBSsjLr44wcSITyCUJMKWdR85v4C5jvyqRN SAFpH+jDWDwQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.79,373,1602572400"; d="scan'208";a="504149405" Received: from silpixa00399126.ir.intel.com ([10.237.222.4]) by orsmga004.jf.intel.com with ESMTP; 25 Jan 2021 06:11:54 -0800 From: Bruce Richardson To: dev@dpdk.org Cc: david.marchand@redhat.com, thomas@monjalon.net, Bruce Richardson Date: Mon, 25 Jan 2021 14:11:15 +0000 Message-Id: <20210125141115.573122-5-bruce.richardson@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210125141115.573122-1-bruce.richardson@intel.com> References: <20210114110606.21142-1-bruce.richardson@intel.com> <20210125141115.573122-1-bruce.richardson@intel.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v3 4/4] devtools: remove check-includes script 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" The check-includes script allowed checking header files in a given directory to ensure that each header compiled alone without requiring any other header inclusions. With header checking now being done by the chkincs app in the build system this script can be removed. Signed-off-by: Bruce Richardson --- MAINTAINERS | 1 - devtools/check-includes.sh | 259 ------------------------------------- 2 files changed, 260 deletions(-) delete mode 100755 devtools/check-includes.sh diff --git a/MAINTAINERS b/MAINTAINERS index 6df494e367..30721f8561 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -81,7 +81,6 @@ F: devtools/check-dup-includes.sh F: devtools/check-maintainers.sh F: devtools/check-forbidden-tokens.awk F: devtools/check-git-log.sh -F: devtools/check-includes.sh F: devtools/check-spdx-tag.sh F: devtools/check-symbol-maps.sh F: devtools/checkpatches.sh diff --git a/devtools/check-includes.sh b/devtools/check-includes.sh deleted file mode 100755 index 940cf0eb2a..0000000000 --- a/devtools/check-includes.sh +++ /dev/null @@ -1,259 +0,0 @@ -#!/bin/sh -e -# SPDX-License-Identifier: BSD-3-Clause -# Copyright 2016 6WIND S.A. - -# This script checks that header files in a given directory do not miss -# dependencies when included on their own, do not conflict and accept being -# compiled with the strictest possible flags. -# -# Files are looked up in the directory provided as the first argument, -# otherwise build/include by default. -# -# Recognized environment variables: -# -# VERBOSE=1 is the same as -v. -# -# QUIET=1 is the same as -q. -# -# SUMMARY=1 is the same as -s. -# -# CC, CPPFLAGS, CFLAGS, CXX, CXXFLAGS are taken into account. -# -# PEDANTIC_CFLAGS, PEDANTIC_CXXFLAGS and PEDANTIC_CPPFLAGS provide strict -# C/C++ compilation flags. -# -# IGNORE contains a list of globbing patterns matching files (relative to the -# include directory) to avoid. It is set by default to known DPDK headers -# which must not be included on their own. -# -# IGNORE_CXX provides additional files for C++. - -while getopts hqvs arg; do - case $arg in - h) - cat < /dev/null - -[ "$VERBOSE" = 1 ] && -output () -{ - local CCV - local CXXV - - shift - CCV=$CC - CXXV=$CXX - CC="echo $CC" CXX="echo $CXX" "$@" - CC=$CCV - CXX=$CXXV - - "$@" -} || -output () -{ - - printf ' %s\n' "$1" - shift - "$@" -} - -trap 'rm -f "$temp_cc" "$temp_cxx"' EXIT - -compile_cc () -{ - ${CC} -I"$include_dir" \ - ${PEDANTIC_CPPFLAGS} ${CPPFLAGS} \ - ${PEDANTIC_CFLAGS} ${CFLAGS} \ - -c -o /dev/null "${temp_cc}" -} - -compile_cxx () -{ - ${CXX} -I"$include_dir" \ - ${PEDANTIC_CPPFLAGS} ${CPPFLAGS} \ - ${PEDANTIC_CXXFLAGS} ${CXXFLAGS} \ - -c -o /dev/null "${temp_cxx}" -} - -ignore () -{ - file="$1" - shift - while [ $# -ne 0 ]; do - case "$file" in - $1) - return 0 - ;; - esac - shift - done - return 1 -} - -# Check C/C++ compilation for each header file. - -while read -r path -do - file=${path#$include_dir} - file=${file##/} - if ignore "$file" $IGNORE; then - output "SKIP $file" : - continue - fi - if printf "\ -#include <%s> - -int main(void) -{ - return 0; -} -" "$file" > "$temp_cc" && - output "CC $file" compile_cc - then - pass_cc="$pass_cc $file" - else - failures_cc=$(($failures_cc + 1)) - fi - if ignore "$file" $IGNORE_CXX; then - output "SKIP CXX $file" : - continue - fi - if printf "\ -#include <%s> - -int main() -{ -} -" "$file" > "$temp_cxx" && - output "CXX $file" compile_cxx - then - pass_cxx="$pass_cxx $file" - else - failures_cxx=$(($failures_cxx + 1)) - fi -done < "$temp_cc" && -for file in $pass_cc; do - printf "\ -#include <%s> -" "$file" >> $temp_cc -done -if printf "\ -int main(void) -{ - return 0; -} -" >> "$temp_cc" && - output "CC (all includes that did not fail)" compile_cc -then - : -else - failures_cc=$(($failures_cc + 1)) -fi - -# Check C++ compilation with all includes. - -: > "$temp_cxx" && -for file in $pass_cxx; do - printf "\ -#include <%s> -" "$file" >> $temp_cxx -done -if printf "\ -int main() -{ -} -" >> "$temp_cxx" && - output "CXX (all includes that did not fail)" compile_cxx -then - : -else - failures_cxx=$(($failures_cxx + 1)) -fi - -# Report results. - -if [ "$SUMMARY" = 1 ]; then - printf "\ -Summary: - %u failure(s) for C using '%s'. - %u failure(s) for C++ using '%s'. -" $failures_cc "$CC" $failures_cxx "$CXX" 1>&2 -fi - -# Exit with nonzero status if there are failures. - -[ $failures_cc -eq 0 ] && -[ $failures_cxx -eq 0 ]