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 6793AA0613 for ; Fri, 27 Sep 2019 22:59:50 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 921A61BEF2; Fri, 27 Sep 2019 22:59:49 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 0FCDB1BEF0 for ; Fri, 27 Sep 2019 22:59:47 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 27 Sep 2019 13:59:47 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,556,1559545200"; d="scan'208";a="391328088" Received: from silpixa00399126.ir.intel.com (HELO silpixa00399126.ger.corp.intel.com) ([10.237.223.2]) by fmsmga006.fm.intel.com with ESMTP; 27 Sep 2019 13:59:45 -0700 From: Bruce Richardson To: dev@dpdk.org Cc: Andrzej Ostruszka , Thomas Monjalon , Ray Kinsella , Neil Horman , bluca@debian.org, Bruce Richardson Date: Fri, 27 Sep 2019 21:59:29 +0100 Message-Id: <20190927205931.23022-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 v2 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. 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/common_base | 1 + 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 +++- 18 files changed, 117 insertions(+), 83 deletions(-) create mode 100644 lib/librte_eal/common/include/rte_function_versioning.h -- 2.21.0