[dpdk-dev] [PATCH v4 01/10] build: add an option to enable LTO build
Bruce Richardson
bruce.richardson at intel.com
Tue Oct 22 14:45:43 CEST 2019
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 <aostruszka at marvell.com>
> ---
> .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
<snip>
> 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 <bruce.richarson at intel.com>
More information about the dev
mailing list