From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id CB200A2EEB for ; Mon, 7 Oct 2019 17:46:06 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9CCC31C1C2; Mon, 7 Oct 2019 17:46:06 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 2E53B1C196 for ; Mon, 7 Oct 2019 17:46:05 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 07 Oct 2019 08:46:04 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.67,268,1566889200"; d="scan'208";a="368152553" Received: from silpixa00399126.ir.intel.com (HELO silpixa00399126.ger.corp.intel.com) ([10.237.223.2]) by orsmga005.jf.intel.com with ESMTP; 07 Oct 2019 08:46:01 -0700 From: Bruce Richardson To: dev@dpdk.org Cc: Andrzej Ostruszka , Neil Horman , bluca@debian.org, thomas@monjalon.net, Bruce Richardson Date: Mon, 7 Oct 2019 16:45:48 +0100 Message-Id: <20191007154550.46655-1-bruce.richardson@intel.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190927194932.22197-1-bruce.richardson@intel.com> References: <20190927194932.22197-1-bruce.richardson@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v3 0/2] Improve function versioning meson support X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" Adding support for LTO has exposed some issues with how the functions versioning was supported by meson, which was always set to build both shared and static libraries. For plain C code, so long as the -fPIC compiler flag was passed, the output is identical whether or not the code is to be included in a static library or a dynamic one. Unfortunately, when using function versioning that no longer held as different macros were used for the versioned functions depending on which type of build it was. This means that any files that use versioning need to be built twice, with different defines in each case. While the trivial solution here is just to rebuild everything twice, that involves a lot of unnecessary work when building DPDK. A better option is to identify those files or components which need multiple builds and rebuild only those. To do this, we add a new meson.build setting for libraries "use_function_versioning" and when that is set, we rebuild all source files twice, initially for static library and then with -DRTE_BUILD_SHARED_LIB for the shared library. If the flag is not set, then the static versioning setting only is used, which could lead to the build succeeding but later causing problems. To avoid that, we add a new define which must be set when the versioning header is included. This addition while solving 1 problem raises 2 other, more minor problems: * what to do with make builds? since make only builds one library type, we can just always define the new value. * what about files that include rte_compat.h for the macro for "experimental"? To solve this, we can split compat.h in two, since the versioning macro should be internal only to DPDK (as no public header should expose anything but the latest APIs), while the experimental macros are primarily for public use. V3: following feedback, moved the define for make from the common_base build config file to one of the global makefiles, as it's not user tunable. V2: added in file that missed a "git add" when doing V1 Bruce Richardson (2): eal: split compat header file build: support building ABI versioned files twice config/rte_config.h | 3 - doc/api/doxy-api-index.md | 3 +- doc/guides/contributing/coding_style.rst | 7 ++ doc/guides/contributing/versioning.rst | 4 +- lib/librte_distributor/meson.build | 1 + lib/librte_distributor/rte_distributor.c | 2 +- lib/librte_distributor/rte_distributor_v20.c | 2 +- lib/librte_eal/common/Makefile | 1 + lib/librte_eal/common/include/rte_compat.h | 70 ---------------- .../common/include/rte_function_versioning.h | 83 +++++++++++++++++++ lib/librte_lpm/meson.build | 1 + lib/librte_lpm/rte_lpm.c | 1 + lib/librte_lpm/rte_lpm.h | 1 - lib/librte_lpm/rte_lpm6.c | 1 + lib/librte_timer/meson.build | 1 + lib/librte_timer/rte_timer.c | 2 +- lib/meson.build | 16 +++- mk/target/generic/rte.vars.mk | 8 ++ 18 files changed, 124 insertions(+), 83 deletions(-) create mode 100644 lib/librte_eal/common/include/rte_function_versioning.h -- 2.21.0