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 2BD53A320B for ; Mon, 21 Oct 2019 14:59:13 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 0AA051BEA4; Mon, 21 Oct 2019 14:59:12 +0200 (CEST) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id D902D1BF1D for ; Mon, 21 Oct 2019 14:59:10 +0200 (CEST) X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 21 Oct 2019 05:59:09 -0700 X-IronPort-AV: E=Sophos;i="5.67,323,1566889200"; d="scan'208";a="191101539" Received: from bricha3-mobl.ger.corp.intel.com ([10.237.221.95]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 21 Oct 2019 05:59:06 -0700 Date: Mon, 21 Oct 2019 13:59:03 +0100 From: Bruce Richardson To: Andrzej Ostruszka Cc: dev@dpdk.org, Aaron Conole , Michael Santana , Thomas Monjalon , John McNamara , Marko Kovacevic , David Hunt , Vladimir Medvedkin , Robert Sanford , Erik Gabriel Carrillo , mattias.ronnblom@ericsson.com, stephen@networkplumber.org Message-ID: <20191021125903.GA942@bricha3-MOBL.ger.corp.intel.com> References: <20190917075754.8310-1-amo@semihalf.com> <20191021105707.25691-1-aostruszka@marvell.com> <20191021105707.25691-2-aostruszka@marvell.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20191021105707.25691-2-aostruszka@marvell.com> User-Agent: Mutt/1.12.1 (2019-06-15) Subject: Re: [dpdk-dev] [PATCH v3 01/10] build: add an option to enable LTO build 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" On Mon, Oct 21, 2019 at 12:56:58PM +0200, Andrzej Ostruszka wrote: > This patch adds an option to enable link time optimization. In addition > to LTO option itself (-flto) fat-lto-objects are being used. This is > because during the build pmdinfogen scans the generated ELF objects to > find this_pmd_name* symbol in symbol table. Without fat-lto-objects gcc > produces ELF only with extra symbols for internal use during linking. > > Signed-off-by: Andrzej Ostruszka > --- > .travis.yml | 7 ++++ > config/common_base | 5 +++ > config/meson.build | 15 ++++++++ > doc/guides/prog_guide/lto.rst | 36 ++++++++++++++++++++ > doc/guides/rel_notes/release_19_11.rst | 8 +++++ > lib/librte_distributor/rte_distributor.c | 18 +++++----- > lib/librte_distributor/rte_distributor_v20.c | 18 +++++----- > lib/librte_lpm/rte_lpm.c | 28 +++++++-------- > lib/librte_lpm/rte_lpm6.c | 16 ++++----- > lib/librte_timer/rte_timer.c | 20 +++++------ > mk/toolchain/gcc/rte.toolchain-compat.mk | 4 +++ > mk/toolchain/gcc/rte.vars.mk | 12 +++++++ > mk/toolchain/icc/rte.vars.mk | 8 +++++ > 13 files changed, 145 insertions(+), 50 deletions(-) > create mode 100644 doc/guides/prog_guide/lto.rst > > diff --git a/.travis.yml b/.travis.yml > index 781f9f666..70d221852 100644 > --- a/.travis.yml > +++ b/.travis.yml > @@ -31,6 +31,7 @@ env: > - DEF_LIB="static" OPTS="-Denable_kmods=false" > - DEF_LIB="shared" OPTS="-Denable_kmods=false" > - DEF_LIB="shared" RUN_TESTS=1 BUILD_DOCS=1 > + - DEF_LIB="shared" OPTS="-Db_lto=true" > > matrix: > include: > @@ -100,6 +101,12 @@ matrix: > apt: > packages: > - *extra_packages > + - env: DEF_LIB="shared" OPTS="-Db_lto=true" EXTRA_PACKAGES=1 > + compiler: gcc > + addons: > + apt: > + packages: > + - *extra_packages > > > script: ./.ci/${TRAVIS_OS_NAME}-build.sh > diff --git a/config/common_base b/config/common_base > index 8ef75c203..73a55fdec 100644 > --- a/config/common_base > +++ b/config/common_base > @@ -49,6 +49,11 @@ CONFIG_RTE_FORCE_INTRINSICS=n > # > CONFIG_RTE_ARCH_STRICT_ALIGN=n > > +# > +# Enable link time optimization > +# > +CONFIG_RTE_ENABLE_LTO=n > + > # > # Compile to share library > # > diff --git a/config/meson.build b/config/meson.build > index 2bafea530..97bbc323b 100644 > --- a/config/meson.build > +++ b/config/meson.build > @@ -196,3 +196,18 @@ add_project_arguments('-D_GNU_SOURCE', language: 'c') > if is_freebsd > add_project_arguments('-D__BSD_VISIBLE', language: 'c') > endif > + > +if get_option('b_lto') > + if cc.has_argument('-ffat-lto-objects') > + add_project_arguments('-ffat-lto-objects', language: 'c') > + else > + error('compiler does not support fat LTO objects - please turn LTO off') > + endif > + if cc.get_id() == 'gcc' > + # workaround for bug 81440 > + if cc.version().version_compare('<8.0') > + add_project_arguments('-Wno-lto-type-mismatch', language: 'c') > + add_project_link_arguments('-Wno-lto-type-mismatch', language: 'c') > + endif > + endif > +endif Just wondering on this what would be the impact with blindly disabling this warning? Would we miss any common issues accidentally? If we keep the current conditional code, suggest we merge the two checks for gcc and gcc version together into one if statement so we can reduce indentation level by one. /Bruce