From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C886ACA9EA0 for ; Tue, 22 Oct 2019 12:45:54 +0000 (UTC) Received: from dpdk.org (dpdk.org [92.243.14.124]) by mail.kernel.org (Postfix) with ESMTP id 6187A214B2 for ; Tue, 22 Oct 2019 12:45:54 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6187A214B2 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=dev-bounces@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 706BD1BED5; Tue, 22 Oct 2019 14:45:53 +0200 (CEST) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by dpdk.org (Postfix) with ESMTP id 9FC661BED3 for ; Tue, 22 Oct 2019 14:45:51 +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 fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Oct 2019 05:45:50 -0700 X-IronPort-AV: E=Sophos;i="5.67,327,1566889200"; d="scan'208";a="191449912" 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; 22 Oct 2019 05:45:46 -0700 Date: Tue, 22 Oct 2019 13:45:43 +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: <20191022124543.GB955@bricha3-MOBL.ger.corp.intel.com> References: <20190917075754.8310-1-amo@semihalf.com> <20191022115412.8837-1-aostruszka@marvell.com> <20191022115412.8837-2-aostruszka@marvell.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20191022115412.8837-2-aostruszka@marvell.com> User-Agent: Mutt/1.12.1 (2019-06-15) Subject: Re: [dpdk-dev] [PATCH v4 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 Tue, Oct 22, 2019 at 01:54:03PM +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 | 13 +++++++ > 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, 143 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..1a5093118 100644 > --- a/config/meson.build > +++ b/config/meson.build > @@ -196,3 +196,16 @@ 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 > + # workaround for gcc bug 81440 > + if cc.get_id() == 'gcc' and 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 This LGTM > diff --git a/doc/guides/prog_guide/lto.rst b/doc/guides/prog_guide/lto.rst > new file mode 100644 > index 000000000..b6daabc86 > --- /dev/null > diff --git a/mk/toolchain/gcc/rte.toolchain-compat.mk b/mk/toolchain/gcc/rte.toolchain-compat.mk > index ea40a11c0..ad4fad83c 100644 > --- a/mk/toolchain/gcc/rte.toolchain-compat.mk > +++ b/mk/toolchain/gcc/rte.toolchain-compat.mk > @@ -88,6 +88,10 @@ else > MACHINE_CFLAGS := $(filter-out -march% -mtune% -msse%,$(MACHINE_CFLAGS)) > endif > > + ifeq ($(shell test $(GCC_VERSION) -lt 45 && echo 1), 1) > + CONFIG_RTE_ENABLE_LTO=n > + endif > + I don't think we support GCC versions that far back any more, but this is fairly harmless, so probably ok to keep. Acked-by: Bruce Richardson