From patchwork Tue Aug 1 13:15:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Bruce Richardson X-Patchwork-Id: 129791 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 76A8042FB2; Tue, 1 Aug 2023 15:16:05 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 06D7940F16; Tue, 1 Aug 2023 15:16:05 +0200 (CEST) Received: from mgamail.intel.com (unknown [134.134.136.65]) by mails.dpdk.org (Postfix) with ESMTP id 02F3940A89 for ; Tue, 1 Aug 2023 15:16:02 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1690895763; x=1722431763; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=A9TNr2cEbt4NtIl17XigY42e8B32aVAXwbu1wRIWjrI=; b=O7jtPO4hrSXzoRu45HAbCGFIMP2P7ZTKFdRkO1hUIh0B/LzwpqzE6n1u dMw5F+MX1qqrmjJf0HE4iBH7JylsfpLlQ/gdAEE7nF8M1oLsRzYc74zjv DcLoWT90QCP6QSsuAAB63TgfpjcOLOyros53MsJIlI+lDemQFLv3Mb5Zz F/Q2vZzKFbRnNXP+k+8OR3TEjz/lIdAHqiIFbV6LPzKxaiuAQQh0sfz81 +MY6BpaGExwlBDKevy74RAaftAVLU7e7yNC+8vAq6c/We8jFgHgJukgn7 vfcjFTobC82nIcFBgV9YgUQK93xHNKXMwMFNhLXwZi9k3eWrAONFEvH05 w==; X-IronPort-AV: E=McAfee;i="6600,9927,10789"; a="372924943" X-IronPort-AV: E=Sophos;i="6.01,247,1684825200"; d="scan'208";a="372924943" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Aug 2023 06:16:01 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10789"; a="852458682" X-IronPort-AV: E=Sophos;i="6.01,247,1684825200"; d="scan'208";a="852458682" Received: from silpixa00401385.ir.intel.com ([10.237.214.162]) by orsmga004.jf.intel.com with ESMTP; 01 Aug 2023 06:16:00 -0700 From: Bruce Richardson To: dev@dpdk.org Cc: Bruce Richardson , =?utf-8?q?Morten_Br=C3=B8?= =?utf-8?q?rup?= , Tyler Retzlaff Subject: [PATCH v4] build: update DPDK to use C11 standard Date: Tue, 1 Aug 2023 14:15:49 +0100 Message-Id: <20230801131549.323733-1-bruce.richardson@intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230731103858.1491751-1-bruce.richardson@intel.com> References: <20230731103858.1491751-1-bruce.richardson@intel.com> MIME-Version: 1.0 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 As previously announced, DPDK 23.11 will require a C11 supporting compiler and will use the C11 standard in all builds. Forcing use of the C standard, rather than the standard with GNU extensions, means that some posix definitions which are not in the C standard are unavailable by default. We fix this by ensuring the correct defines or cflags are passed to the components that need them. Signed-off-by: Bruce Richardson Acked-by: Morten Brørup Acked-by: Tyler Retzlaff --- V4: * pass cflags to the structure and definition checks in mlx* drivers to ensure posix definitions - as well as C-standard ones - are available. V3: * remove (now unneeded) use of -std=gnu99 in failsafe net driver. V2: * Resubmit now that 23.11-rc0 patch applied * Add _POSIX_C_SOURCE macro to eal_common_errno.c to get POSIX definition of strerror_r() with c11 standard. --- doc/guides/linux_gsg/sys_reqs.rst | 3 ++- doc/guides/rel_notes/deprecation.rst | 18 ------------------ doc/guides/rel_notes/release_23_11.rst | 17 +++++++++++++++++ drivers/common/mlx5/linux/meson.build | 5 +++-- drivers/net/failsafe/meson.build | 1 - drivers/net/mlx4/meson.build | 4 ++-- lib/eal/common/eal_common_errno.c | 1 + meson.build | 1 + 8 files changed, 26 insertions(+), 24 deletions(-) diff --git a/doc/guides/linux_gsg/sys_reqs.rst b/doc/guides/linux_gsg/sys_reqs.rst index dfeaf4e1c5..13be715933 100644 --- a/doc/guides/linux_gsg/sys_reqs.rst +++ b/doc/guides/linux_gsg/sys_reqs.rst @@ -27,7 +27,8 @@ Compilation of the DPDK The setup commands and installed packages needed on various systems may be different. For details on Linux distributions and the versions tested, please consult the DPDK Release Notes. -* General development tools including a supported C compiler such as gcc (version 4.9+) or clang (version 3.4+), +* General development tools including a C compiler supporting the C11 standard, + including standard atomics, for example: GCC (version 5.0+) or Clang (version 3.6+), and ``pkg-config`` or ``pkgconf`` to be used when building end-user binaries against DPDK. * For RHEL/Fedora systems these can be installed using ``dnf groupinstall "Development Tools"`` diff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst index 494b401cda..cc939d3c67 100644 --- a/doc/guides/rel_notes/deprecation.rst +++ b/doc/guides/rel_notes/deprecation.rst @@ -17,24 +17,6 @@ Other API and ABI deprecation notices are to be posted below. Deprecation Notices ------------------- -* C Compiler: From DPDK 23.11 onwards, - building DPDK will require a C compiler which supports the C11 standard, - including support for C11 standard atomics. - - More specifically, the requirements will be: - - * Support for flag "-std=c11" (or similar) - * __STDC_NO_ATOMICS__ is *not defined* when using c11 flag - - Please note: - - * C11, including standard atomics, is supported from GCC version 5 onwards, - and is the default language version in that release - (Ref: https://gcc.gnu.org/gcc-5/changes.html) - * C11 is the default compilation mode in Clang from version 3.6, - which also added support for standard atomics - (Ref: https://releases.llvm.org/3.6.0/tools/clang/docs/ReleaseNotes.html) - * build: Enabling deprecated libraries (``flow_classify``, ``kni``) won't be possible anymore through the use of the ``disable_libs`` build option. A new build option for deprecated libraries will be introduced instead. diff --git a/doc/guides/rel_notes/release_23_11.rst b/doc/guides/rel_notes/release_23_11.rst index 6b4dd21fd0..c8b9ed456c 100644 --- a/doc/guides/rel_notes/release_23_11.rst +++ b/doc/guides/rel_notes/release_23_11.rst @@ -20,6 +20,23 @@ DPDK Release 23.11 ninja -C build doc xdg-open build/doc/guides/html/rel_notes/release_23_11.html +* Build Requirements: From DPDK 23.11 onwards, + building DPDK will require a C compiler which supports the C11 standard, + including support for C11 standard atomics. + + More specifically, the requirements will be: + + * Support for flag "-std=c11" (or similar) + * __STDC_NO_ATOMICS__ is *not defined* when using c11 flag + + Please note: + + * C11, including standard atomics, is supported from GCC version 5 onwards, + and is the default language version in that release + (Ref: https://gcc.gnu.org/gcc-5/changes.html) + * C11 is the default compilation mode in Clang from version 3.6, + which also added support for standard atomics + (Ref: https://releases.llvm.org/3.6.0/tools/clang/docs/ReleaseNotes.html) New Features ------------ diff --git a/drivers/common/mlx5/linux/meson.build b/drivers/common/mlx5/linux/meson.build index 15edc13041..b3a64547c5 100644 --- a/drivers/common/mlx5/linux/meson.build +++ b/drivers/common/mlx5/linux/meson.build @@ -231,11 +231,12 @@ if libmtcr_ul_found endif foreach arg:has_sym_args - mlx5_config.set(arg[0], cc.has_header_symbol(arg[1], arg[2], dependencies: libs)) + mlx5_config.set(arg[0], cc.has_header_symbol(arg[1], arg[2], dependencies: libs, args: cflags)) endforeach foreach arg:has_member_args file_prefix = '#include <' + arg[1] + '>' - mlx5_config.set(arg[0], cc.has_member(arg[2], arg[3], prefix : file_prefix, dependencies: libs)) + mlx5_config.set(arg[0], + cc.has_member(arg[2], arg[3], prefix : file_prefix, dependencies: libs, args: cflags)) endforeach # Build Glue Library diff --git a/drivers/net/failsafe/meson.build b/drivers/net/failsafe/meson.build index 6013e13722..c1d361083b 100644 --- a/drivers/net/failsafe/meson.build +++ b/drivers/net/failsafe/meson.build @@ -7,7 +7,6 @@ if is_windows subdir_done() endif -cflags += '-std=gnu99' cflags += '-D_DEFAULT_SOURCE' cflags += '-D_XOPEN_SOURCE=700' cflags += '-pedantic' diff --git a/drivers/net/mlx4/meson.build b/drivers/net/mlx4/meson.build index a038c1ec1b..3c5ee24186 100644 --- a/drivers/net/mlx4/meson.build +++ b/drivers/net/mlx4/meson.build @@ -103,12 +103,12 @@ has_sym_args = [ config = configuration_data() foreach arg:has_sym_args config.set(arg[0], cc.has_header_symbol(arg[1], arg[2], - dependencies: libs)) + dependencies: libs, args: cflags)) endforeach foreach arg:has_member_args file_prefix = '#include <' + arg[1] + '>' config.set(arg[0], cc.has_member(arg[2], arg[3], - prefix: file_prefix, dependencies: libs)) + prefix: file_prefix, dependencies: libs, args: cflags)) endforeach configure_file(output : 'mlx4_autoconf.h', configuration : config) diff --git a/lib/eal/common/eal_common_errno.c b/lib/eal/common/eal_common_errno.c index ef8f782abb..b30e2f0ad4 100644 --- a/lib/eal/common/eal_common_errno.c +++ b/lib/eal/common/eal_common_errno.c @@ -4,6 +4,7 @@ /* Use XSI-compliant portable version of strerror_r() */ #undef _GNU_SOURCE +#define _POSIX_C_SOURCE 200809L #include #include diff --git a/meson.build b/meson.build index 39cb73846d..70b54f0c98 100644 --- a/meson.build +++ b/meson.build @@ -9,6 +9,7 @@ project('DPDK', 'c', license: 'BSD', default_options: [ 'buildtype=release', + 'c_std=c11', 'default_library=static', 'warning_level=2', ],