diff --git a/config/functions b/config/functions index 094cc514af..743b979175 100644 --- a/config/functions +++ b/config/functions @@ -1,13 +1,31 @@ setup_toolchain() { - # lto flag - if flag_enabled "lto" "$LTO_SUPPORT" "only-disable"; then - TARGET_CFLAGS+=" $CFLAGS_OPTIM_LTO" - TARGET_CXXFLAGS+=" $CXXFLAGS_OPTIM_LTO" - TARGET_LDFLAGS+=" $LDFLAGS_OPTIM_LTO" - else - TARGET_CFLAGS+=" $CFLAGS_OPTIM_NOLTO" - TARGET_CXXFLAGS+=" $CXXFLAGS_OPTIM_NOLTO" - TARGET_LDFLAGS+=" $LDFLAGS_OPTIM_NOLTO" + TARGET_AR_NM_RANLIB_PREFIX="" + + if [ "$LTO_SUPPORT" = "yes" ]; then + if flag_enabled "lto-parallel" "no"; then + TARGET_CFLAGS+=" $FLAGS_OPTIM_LTO_PARALLEL $FLAGS_OPTIM_LTO_NO_FAT" + TARGET_CXXFLAGS+=" $FLAGS_OPTIM_LTO_PARALLEL $FLAGS_OPTIM_LTO_NO_FAT" + TARGET_LDFLAGS+=" $LDFLAGS_OPTIM_LTO_COMMON $FLAGS_OPTIM_LTO_PARALLEL" + # static libs with lto info require gcc-ar/gcc-nm/gcc-ranlib instead of + # default binutils versions + TARGET_AR_NM_RANLIB_PREFIX="gcc-" + elif flag_enabled "lto-fat" "no"; then + TARGET_CFLAGS+=" $FLAGS_OPTIM_LTO_NO_PARALLEL $FLAGS_OPTIM_LTO_FAT" + TARGET_CXXFLAGS+=" $FLAGS_OPTIM_LTO_NO_PARALLEL $FLAGS_OPTIM_LTO_FAT" + TARGET_LDFLAGS+=" $LDFLAGS_OPTIM_LTO_COMMON $FLAGS_OPTIM_LTO_NO_PARALLEL" + TARGET_AR_NM_RANLIB_PREFIX="gcc-" + elif flag_enabled "lto" "no"; then + TARGET_CFLAGS+=" $FLAGS_OPTIM_LTO_NO_PARALLEL $FLAGS_OPTIM_LTO_NO_FAT" + TARGET_CXXFLAGS+=" $FLAGS_OPTIM_LTO_NO_PARALLEL $FLAGS_OPTIM_LTO_NO_FAT" + TARGET_LDFLAGS+=" $LDFLAGS_OPTIM_LTO_COMMON $FLAGS_OPTIM_LTO_NO_PARALLEL" + TARGET_AR_NM_RANLIB_PREFIX="gcc-" + fi + fi + + if flag_enabled "lto-off" "no"; then + TARGET_CFLAGS+=" $FLAGS_OPTIM_LTO_OFF" + TARGET_CXXFLAGS+=" $FLAGS_OPTIM_LTO_OFF" + TARGET_LDFLAGS+=" $FLAGS_OPTIM_LTO_OFF" fi # gold flag @@ -51,9 +69,9 @@ setup_toolchain() { export CPP="${TARGET_PREFIX}cpp" export LD="${TARGET_PREFIX}ld" export AS="${TARGET_PREFIX}as" - export AR="${TARGET_PREFIX}ar" - export NM="${TARGET_PREFIX}nm" - export RANLIB="${TARGET_PREFIX}ranlib" + export AR="${TARGET_PREFIX}${TARGET_AR_NM_RANLIB_PREFIX}ar" + export NM="${TARGET_PREFIX}${TARGET_AR_NM_RANLIB_PREFIX}nm" + export RANLIB="${TARGET_PREFIX}${TARGET_AR_NM_RANLIB_PREFIX}ranlib" export OBJCOPY="${TARGET_PREFIX}objcopy" export OBJDUMP="${TARGET_PREFIX}objdump" export STRIP="${TARGET_PREFIX}strip" diff --git a/config/optimize b/config/optimize index 7d498ee537..5d0b8efab0 100644 --- a/config/optimize +++ b/config/optimize @@ -32,12 +32,12 @@ HOST_CFLAGS="$HOST_CFLAGS -Wno-format-security" HOST_CXXFLAGS="$HOST_CXXFLAGS -Wno-format-security" # lto flags -CFLAGS_OPTIM_LTO="-flto -ffat-lto-objects" -CXXFLAGS_OPTIM_LTO="-flto -ffat-lto-objects" -LDFLAGS_OPTIM_LTO="-fuse-linker-plugin -flto" -CFLAGS_OPTIM_NOLTO="-fno-lto" -CXXFLAGS_OPTIM_NOLTO="-fno-lto" -LDFLAGS_OPTIM_NOLTO="-fno-lto" +FLAGS_OPTIM_LTO_NO_PARALLEL="-flto" +FLAGS_OPTIM_LTO_PARALLEL="-flto=${CONCURRENCY_MAKE_LEVEL}" +FLAGS_OPTIM_LTO_NO_FAT="-fno-fat-lto-objects" +FLAGS_OPTIM_LTO_FAT="-ffat-lto-objects" +FLAGS_OPTIM_LTO_OFF="-fno-lto" +LDFLAGS_OPTIM_LTO_COMMON="-fuse-linker-plugin" # gold flags LDFLAGS_OPTIM_GOLD="-fuse-ld=gold" diff --git a/packages/addons/addon-depends/ffmpegx/package.mk b/packages/addons/addon-depends/ffmpegx/package.mk index ccb8b8a04e..84bed38668 100644 --- a/packages/addons/addon-depends/ffmpegx/package.mk +++ b/packages/addons/addon-depends/ffmpegx/package.mk @@ -28,7 +28,7 @@ PKG_DEPENDS_TARGET="toolchain bzip2 fdk-aac libvorbis openssl opus x264 x265 zli PKG_SECTION="multimedia" PKG_LONGDESC="FFmpegx is an complete FFmpeg build to support encoding and decoding" # ffmpeg builds better with these options -PKG_BUILD_FLAGS="-gold -lto" +PKG_BUILD_FLAGS="-gold" # Dependencies get_graphicdrivers diff --git a/packages/addons/addon-depends/icu/package.mk b/packages/addons/addon-depends/icu/package.mk index 4d3c05ed16..c1acaa318a 100644 --- a/packages/addons/addon-depends/icu/package.mk +++ b/packages/addons/addon-depends/icu/package.mk @@ -28,6 +28,7 @@ PKG_DEPENDS_TARGET="toolchain icu:host" PKG_SECTION="textproc" PKG_SHORTDESC="International Components for Unicode library" PKG_LONGDESC="International Components for Unicode library" +PKG_BUILD_FLAGS="+pic" PKG_CONFIGURE_OPTS_HOST="--enable-static --disable-shared" diff --git a/packages/addons/addon-depends/lcdd-depends/libugpio/package.mk b/packages/addons/addon-depends/lcdd-depends/libugpio/package.mk index 77c596fc49..71c7b04ffd 100644 --- a/packages/addons/addon-depends/lcdd-depends/libugpio/package.mk +++ b/packages/addons/addon-depends/lcdd-depends/libugpio/package.mk @@ -26,5 +26,6 @@ PKG_URL="https://github.com/mhei/$PKG_NAME/archive/v$PKG_VERSION.tar.gz" PKG_DEPENDS_TARGET="toolchain linux" PKG_LONGDESC="A free software library to ease the use of linux kernel's sysfs gpio interface from C programs and/or other libraries" PKG_TOOLCHAIN="autotools" +PKG_BUILD_FLAGS="+pic" PKG_CONFIGURE_OPTS_TARGET="--enable-static --disable-shared" diff --git a/packages/addons/addon-depends/libdvbcsa/package.mk b/packages/addons/addon-depends/libdvbcsa/package.mk index 81f14fb8ae..e42da774e6 100644 --- a/packages/addons/addon-depends/libdvbcsa/package.mk +++ b/packages/addons/addon-depends/libdvbcsa/package.mk @@ -30,7 +30,7 @@ PKG_SHORTDESC="libdvbcsa is a free implementation of the DVB Common Scrambling A PKG_LONGDESC="libdvbcsa is a free implementation of the DVB Common Scrambling Algorithm - DVB/CSA - with encryption and decryption capabilities" PKG_TOOLCHAIN="autotools" # libdvbcsa is a bit faster without LTO, and tests will fail with gcc-5.x -PKG_BUILD_FLAGS="-lto +pic" +PKG_BUILD_FLAGS="+pic" PKG_CONFIGURE_OPTS_TARGET="--disable-shared --enable-static --with-sysroot=$SYSROOT_PREFIX" diff --git a/packages/addons/addon-depends/libiconv/package.mk b/packages/addons/addon-depends/libiconv/package.mk index cc05c6a9a6..c96c10fc33 100644 --- a/packages/addons/addon-depends/libiconv/package.mk +++ b/packages/addons/addon-depends/libiconv/package.mk @@ -27,6 +27,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SECTION="devel" PKG_SHORTDESC="Libiconv converts from one character encoding to another through Unicode conversion." PKG_LONGDESC="Libiconv converts from one character encoding to another through Unicode conversion." +PKG_BUILD_FLAGS="+pic" PKG_CONFIGURE_OPTS_TARGET="--host=$TARGET_NAME \ --build=$HOST_NAME \ diff --git a/packages/addons/addon-depends/network-tools-depends/iw/package.mk b/packages/addons/addon-depends/network-tools-depends/iw/package.mk index 1e95febf35..e2082d9189 100644 --- a/packages/addons/addon-depends/network-tools-depends/iw/package.mk +++ b/packages/addons/addon-depends/network-tools-depends/iw/package.mk @@ -28,7 +28,6 @@ PKG_SECTION="tools" PKG_SHORTDESC="iw is a new nl80211 based CLI configuration utility for wireless devices" PKG_LONGDESC="iw is a new nl80211 based CLI configuration utility for wireless devices. It supports all new drivers that have been added to the kernel recently." # iw fails at runtime with lto enabled -PKG_BUILD_FLAGS="-lto" pre_configure_target() { export LDFLAGS="$LDFLAGS -pthread" diff --git a/packages/addons/addon-depends/rsyslog-depends/librelp/package.mk b/packages/addons/addon-depends/rsyslog-depends/librelp/package.mk index 51cc597a6b..a94733e448 100644 --- a/packages/addons/addon-depends/rsyslog-depends/librelp/package.mk +++ b/packages/addons/addon-depends/rsyslog-depends/librelp/package.mk @@ -27,6 +27,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SECTION="rsyslog" PKG_SHORTDESC="librelp" PKG_LONGDESC="librelp" +PKG_BUILD_FLAGS="+pic" PKG_CONFIGURE_OPTS_TARGET="--disable-tls \ --enable-static --disable-shared \ diff --git a/packages/addons/addon-depends/system-tools-depends/depends/efivar/package.mk b/packages/addons/addon-depends/system-tools-depends/depends/efivar/package.mk index dbf3fef531..a7b7329410 100644 --- a/packages/addons/addon-depends/system-tools-depends/depends/efivar/package.mk +++ b/packages/addons/addon-depends/system-tools-depends/depends/efivar/package.mk @@ -29,7 +29,6 @@ PKG_DEPENDS_TARGET="toolchain efivar:host" PKG_SECTION="tools" PKG_SHORTDESC="evivar: maniulate EFI Variables" PKG_LONGDESC="Tools and library to manipulate EFI variables." -PKG_BUILD_FLAGS="-lto" make_host() { make -C src/ makeguids diff --git a/packages/addons/addon-depends/system-tools-depends/efibootmgr/package.mk b/packages/addons/addon-depends/system-tools-depends/efibootmgr/package.mk index 71ec002d1e..f61b0c82c7 100644 --- a/packages/addons/addon-depends/system-tools-depends/efibootmgr/package.mk +++ b/packages/addons/addon-depends/system-tools-depends/efibootmgr/package.mk @@ -28,7 +28,6 @@ PKG_DEPENDS_TARGET="toolchain efivar pciutils zlib" PKG_SECTION="tools" PKG_SHORTDESC="EFI Boot Manager" PKG_LONGDESC="This is a Linux user-space application to modify the Intel Extensible Firmware Interface (EFI) Boot Manager configuration. This application can create and destroy boot entries, change the boot order, change the next running boot option, and more." -PKG_BUILD_FLAGS="-lto" pre_make_target() { export EXTRA_CFLAGS="$CFLAGS -I$SYSROOT_PREFIX/usr/include -I$SYSROOT_PREFIX/usr/include/efivar -fgnu89-inline" diff --git a/packages/addons/browser/chromium/package.mk b/packages/addons/browser/chromium/package.mk index e1b3f30400..90c9ae84d7 100644 --- a/packages/addons/browser/chromium/package.mk +++ b/packages/addons/browser/chromium/package.mk @@ -32,7 +32,6 @@ PKG_SECTION="browser" PKG_SHORTDESC="Chromium Browser: the open-source web browser from Google" PKG_LONGDESC="Chromium Browser ($PKG_VERSION): the open-source web browser from Google" PKG_TOOLCHAIN="manual" -PKG_BUILD_FLAGS="-lto" PKG_IS_ADDON="yes" PKG_ADDON_NAME="Chromium" diff --git a/packages/addons/service/librespot/package.mk b/packages/addons/service/librespot/package.mk index 1305adb896..bd3306f05e 100644 --- a/packages/addons/service/librespot/package.mk +++ b/packages/addons/service/librespot/package.mk @@ -30,7 +30,6 @@ PKG_SECTION="service" PKG_SHORTDESC="Librespot: play Spotify through LibreELEC using a Spotify app as a remote" PKG_LONGDESC="Librespot ($PKG_VERSION) plays Spotify through LibreELEC using the open source librespot library using a Spotify app as a remote." PKG_TOOLCHAIN="manual" -PKG_BUILD_FLAGS="-lto" PKG_IS_ADDON="yes" PKG_ADDON_NAME="Librespot" diff --git a/packages/addons/tools/mono/package.mk b/packages/addons/tools/mono/package.mk index d441c0071c..f13bfa40bf 100644 --- a/packages/addons/tools/mono/package.mk +++ b/packages/addons/tools/mono/package.mk @@ -30,7 +30,6 @@ PKG_SECTION="tools" PKG_SHORTDESC="Mono: a cross platform, open source .NET framework" PKG_LONGDESC="Mono ($PKG_VERSION) is a software platform designed to allow developers to easily create cross platform applications part of the .NET Foundation" PKG_TOOLCHAIN="autotools" -PKG_BUILD_FLAGS="-lto" PKG_IS_ADDON="yes" PKG_ADDON_NAME="Mono" diff --git a/packages/audio/alsa-lib/package.mk b/packages/audio/alsa-lib/package.mk index ec6a3ae31c..e85fdd82fb 100644 --- a/packages/audio/alsa-lib/package.mk +++ b/packages/audio/alsa-lib/package.mk @@ -28,7 +28,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SECTION="audio" PKG_LONGDESC="ALSA (Advanced Linux Sound Architecture) is the next generation Linux Sound API." PKG_TOOLCHAIN="autotools" -PKG_BUILD_FLAGS="-lto +pic" +PKG_BUILD_FLAGS="+pic" if build_with_debug; then PKG_ALSA_DEBUG=--with-debug diff --git a/packages/audio/flac/package.mk b/packages/audio/flac/package.mk index 54361a1bba..bf9b8d483b 100644 --- a/packages/audio/flac/package.mk +++ b/packages/audio/flac/package.mk @@ -29,7 +29,7 @@ PKG_SHORTDESC="flac: An Free Lossless Audio Codec" PKG_LONGDESC="Grossly oversimplified, FLAC is similar to MP3, but lossless, meaning that audio is compressed in FLAC without throwing away any information. This is similar to how Zip works, except with FLAC you will get much better compression because it is designed specifically for audio." PKG_TOOLCHAIN="autotools" # flac-1.3.1 dont build with LTO support -PKG_BUILD_FLAGS="-lto +pic" +PKG_BUILD_FLAGS="+pic" # package specific configure options PKG_CONFIGURE_OPTS_TARGET="--enable-static \ diff --git a/packages/audio/fluidsynth/package.mk b/packages/audio/fluidsynth/package.mk index 2a59d2c432..248f5c26bd 100644 --- a/packages/audio/fluidsynth/package.mk +++ b/packages/audio/fluidsynth/package.mk @@ -27,6 +27,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SECTION="audio" PKG_SHORTDESC="FluidSynth: A SoundFont Synthesizer." PKG_LONGDESC="FluidSynth renders midi music files as raw audio data, for playing or conversion. " +PKG_BUILD_FLAGS="+pic" PKG_CMAKE_OPTS_TARGET="-DBUILD_SHARED_LIBS=0 \ -Denable-readline=0 \ diff --git a/packages/audio/lame/package.mk b/packages/audio/lame/package.mk index 11e40e3867..10b9e5be91 100644 --- a/packages/audio/lame/package.mk +++ b/packages/audio/lame/package.mk @@ -27,7 +27,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SECTION="audio" PKG_SHORTDESC="lame: LAME Ain't an Mp3 Encoder" PKG_LONGDESC="LAME originally stood for LAME Ain't an Mp3 Encoder. The goal of the LAME project is to use the open source model to improve the psycho acoustics, noise shaping and speed of MP3. Another goal of the LAME project is to use these improvements for the basis of a patent free audio compression codec for the GNU project." -PKG_BUILD_FLAGS="-parallel" +PKG_BUILD_FLAGS="-parallel +pic" # package specific configure options PKG_CONFIGURE_OPTS_TARGET="--enable-static \ diff --git a/packages/audio/libmodplug/package.mk b/packages/audio/libmodplug/package.mk index 7c0c178aa4..95915edd73 100644 --- a/packages/audio/libmodplug/package.mk +++ b/packages/audio/libmodplug/package.mk @@ -27,5 +27,6 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SECTION="audio" PKG_SHORTDESC="libmodplug: renders mod music files as raw audio data, for playing or conversion." PKG_LONGDESC="libmodplug renders mod music files as raw audio data, for playing or conversion. libmodplug is based on the fast and high quality mod playing code written and released to the public domain by Olivier Lapicque. mod, .s3m, .it, .xm, and a number of lesser-known formats are supported. Optional features include high-quality resampling, bass expansion, surround and reverb." +PKG_BUILD_FLAGS="+pic" PKG_CONFIGURE_OPTS_TARGET="--enable-static --disable-shared" diff --git a/packages/audio/libogg/package.mk b/packages/audio/libogg/package.mk index 54f0cb9e16..c96d4966ed 100644 --- a/packages/audio/libogg/package.mk +++ b/packages/audio/libogg/package.mk @@ -27,6 +27,7 @@ PKG_URL="http://downloads.xiph.org/releases/ogg/libogg-$PKG_VERSION.tar.xz" PKG_DEPENDS_TARGET="toolchain" PKG_SECTION="audio" PKG_LONGDESC="Libogg contains necessary functionality to create, decode, and work with Ogg bitstreams." +PKG_BUILD_FLAGS="+pic" PKG_CONFIGURE_OPTS_TARGET="--enable-static \ --disable-shared" diff --git a/packages/audio/libopenmpt/package.mk b/packages/audio/libopenmpt/package.mk index d119fbe57b..dfb3cb95b5 100644 --- a/packages/audio/libopenmpt/package.mk +++ b/packages/audio/libopenmpt/package.mk @@ -27,6 +27,7 @@ PKG_DEPENDS_TARGET="toolchain libogg libvorbis" PKG_SECTION="audio" PKG_SHORTDESC="libopenmpt: renders mod music files as raw audio data, for playing or conversion." PKG_LONGDESC="libopenmpt renders mod music files as raw audio data, for playing or conversion." +PKG_BUILD_FLAGS="+pic" PKG_CONFIGURE_OPTS_TARGET="--enable-static \ --disable-shared \ diff --git a/packages/audio/sidplay-libs/package.mk b/packages/audio/sidplay-libs/package.mk index 413db1fa66..a170684c65 100644 --- a/packages/audio/sidplay-libs/package.mk +++ b/packages/audio/sidplay-libs/package.mk @@ -27,6 +27,7 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SECTION="audio" PKG_SHORTDESC="sidplay-libs" PKG_LONGDESC="sidplay-libs" +PKG_BUILD_FLAGS="+pic" PKG_CONFIGURE_OPTS_TARGET="--disable-shared --enable-static" diff --git a/packages/audio/soxr/package.mk b/packages/audio/soxr/package.mk index f72f19db54..130a2c6747 100644 --- a/packages/audio/soxr/package.mk +++ b/packages/audio/soxr/package.mk @@ -28,7 +28,7 @@ PKG_SOURCE_DIR="$PKG_NAME-$PKG_VERSION-Source" PKG_DEPENDS_TARGET="toolchain cmake:host" PKG_SECTION="audio" PKG_LONGDESC="The SoX Resampler library performs one-dimensional sample-rate conversion. It may be used to resample PCM-encoded audio." -PKG_BUILD_FLAGS="-lto +pic" +PKG_BUILD_FLAGS="+pic" PKG_CMAKE_OPTS_TARGET="-DBUILD_EXAMPLES=OFF \ -DBUILD_SHARED_LIBS=OFF \ diff --git a/packages/databases/mysql/package.mk b/packages/databases/mysql/package.mk index 7dd380a7a3..ab76e4863d 100644 --- a/packages/databases/mysql/package.mk +++ b/packages/databases/mysql/package.mk @@ -28,7 +28,6 @@ PKG_DEPENDS_TARGET="toolchain zlib ncurses openssl boost mysql:host" PKG_SECTION="database" PKG_SHORTDESC="mysql: A database server" PKG_LONGDESC="MySQL is a SQL (Structured Query Language) database server. SQL is the most popular database language in the world. MySQL is a client server implementation that consists of a server daemon mysqld and many different client programs/libraries." -build_with_debug && [ "$TARGET_ARCH" = "aarch64" ] && PKG_BUILD_FLAGS="-lto" post_unpack() { sed -i 's|GET_TARGET_PROPERTY(LIBMYSQL_OS_OUTPUT_NAME libmysql OUTPUT_NAME)|SET(LIBMYSQL_OS_OUTPUT_NAME "mysqlclient")|' $PKG_BUILD/scripts/CMakeLists.txt diff --git a/packages/debug/gdb/package.mk b/packages/debug/gdb/package.mk index 28ec379e25..3c9c267cb9 100644 --- a/packages/debug/gdb/package.mk +++ b/packages/debug/gdb/package.mk @@ -28,7 +28,6 @@ PKG_SECTION="debug" PKG_SHORTDESC="gdb: The GNU Debugger" PKG_LONGDESC="The purpose of a debugger such as GDB is to allow you to see what is going on ``inside'' another program while it executes--or what another program was doing at the moment it crashed." # gdb could fail on runtime if build with LTO support -PKG_BUILD_FLAGS="-lto" CC_FOR_BUILD="$HOST_CC" CFLAGS_FOR_BUILD="$HOST_CFLAGS" diff --git a/packages/debug/valgrind/package.mk b/packages/debug/valgrind/package.mk index 38746cd02a..261f4f5f0b 100644 --- a/packages/debug/valgrind/package.mk +++ b/packages/debug/valgrind/package.mk @@ -27,7 +27,6 @@ PKG_DEPENDS_TARGET="toolchain" PKG_SECTION="debug" PKG_SHORTDESC="A tool to help find memory-management problems in programs" PKG_LONGDESC="A tool to help find memory-management problems in programs" -PKG_BUILD_FLAGS="-lto" if [ "$TARGET_ARCH" = "arm" ]; then PKG_CONFIGURE_OPTS_TARGET="--enable-only32bit" diff --git a/packages/devel/dbus-glib/package.mk b/packages/devel/dbus-glib/package.mk index 9765978313..29bc6a2997 100644 --- a/packages/devel/dbus-glib/package.mk +++ b/packages/devel/dbus-glib/package.mk @@ -28,7 +28,7 @@ PKG_SECTION="devel" PKG_SHORTDESC="dbus-glib: A message bus system" PKG_LONGDESC="D-BUS is a message bus, used for sending messages between applications. Conceptually, it fits somewhere in between raw sockets and CORBA in terms of complexity." PKG_TOOLCHAIN="autotools" -PKG_BUILD_FLAGS="+pic" +PKG_BUILD_FLAGS="+pic +lto" PKG_CONFIGURE_OPTS_TARGET="ac_cv_have_abstract_sockets=yes \ ac_cv_func_posix_getpwnam_r=yes \ diff --git a/packages/devel/glibc/package.mk b/packages/devel/glibc/package.mk index eec33cabf9..67b6c5bb5a 100644 --- a/packages/devel/glibc/package.mk +++ b/packages/devel/glibc/package.mk @@ -28,7 +28,7 @@ PKG_DEPENDS_INIT="glibc" PKG_SECTION="toolchain/devel" PKG_SHORTDESC="glibc: The GNU C library" PKG_LONGDESC="The Glibc package contains the main C library. This library provides the basic routines for allocating memory, searching directories, opening and closing files, reading and writing files, string handling, pattern matching, arithmetic, and so on." -PKG_BUILD_FLAGS="-lto -gold" +PKG_BUILD_FLAGS="-gold" PKG_CONFIGURE_OPTS_TARGET="BASH_SHELL=/bin/sh \ ac_cv_path_PERL=no \ diff --git a/packages/devel/ncurses/package.mk b/packages/devel/ncurses/package.mk index 3dc3cc2c3a..12c5e5166e 100644 --- a/packages/devel/ncurses/package.mk +++ b/packages/devel/ncurses/package.mk @@ -28,7 +28,7 @@ PKG_SECTION="devel" PKG_SHORTDESC="ncurses: The ncurses (new curses) library" PKG_LONGDESC="The ncurses (new curses) library is a free software emulation of curses in System V Release 4.0, and more. It uses terminfo format, supports pads and color and multiple highlights and forms characters and function-key mapping, and has all the other SYSV-curses enhancements over BSD curses." # causes some segmentation fault's (dialog) when compiled with gcc's link time optimization. -PKG_BUILD_FLAGS="-lto +pic" +PKG_BUILD_FLAGS="+pic" PKG_CONFIGURE_OPTS_TARGET="--without-ada \ --without-cxx \ diff --git a/packages/emulation/libretro-bluemsx/package.mk b/packages/emulation/libretro-bluemsx/package.mk index e5b7567ddb..9a1a469342 100644 --- a/packages/emulation/libretro-bluemsx/package.mk +++ b/packages/emulation/libretro-bluemsx/package.mk @@ -28,7 +28,6 @@ PKG_DEPENDS_TARGET="toolchain kodi-platform" PKG_SECTION="emulation" PKG_SHORTDESC="game.libretro.bluemsx: BlueMSX for Kodi" PKG_LONGDESC="game.libretro.bluemsx: BlueMSX for Kodi" -PKG_BUILD_FLAGS="-lto" PKG_LIBNAME="bluemsx_libretro.so" PKG_LIBPATH="$PKG_LIBNAME" diff --git a/packages/emulation/libretro-dosbox/package.mk b/packages/emulation/libretro-dosbox/package.mk index 03cdc8bdd0..66356fd1eb 100644 --- a/packages/emulation/libretro-dosbox/package.mk +++ b/packages/emulation/libretro-dosbox/package.mk @@ -28,7 +28,7 @@ PKG_DEPENDS_TARGET="toolchain kodi-platform" PKG_SECTION="emulation" PKG_SHORTDESC="game.libretro.dosbox: DOSBox for Kodi" PKG_LONGDESC="game.libretro.dosbox: DOSBox for Kodi" -PKG_BUILD_FLAGS="-lto +pic" +PKG_BUILD_FLAGS="+pic" PKG_LIBNAME="dosbox_libretro.so" PKG_LIBPATH="$PKG_LIBNAME" diff --git a/packages/emulation/libretro-fbalpha/package.mk b/packages/emulation/libretro-fbalpha/package.mk index a7ed9673d0..b2536f2cfc 100644 --- a/packages/emulation/libretro-fbalpha/package.mk +++ b/packages/emulation/libretro-fbalpha/package.mk @@ -30,7 +30,6 @@ PKG_SHORTDESC="game.libretro.fba: fba for Kodi" PKG_LONGDESC="game.libretro.fba: fba for Kodi" PKG_TOOLCHAIN="manual" # linking takes too long with lto -PKG_BUILD_FLAGS="-lto" PKG_LIBNAME="fbalpha_libretro.so" PKG_LIBPATH="$PKG_LIBNAME" diff --git a/packages/emulation/libretro-genplus/package.mk b/packages/emulation/libretro-genplus/package.mk index e272ad0907..e797077d48 100644 --- a/packages/emulation/libretro-genplus/package.mk +++ b/packages/emulation/libretro-genplus/package.mk @@ -29,7 +29,6 @@ PKG_SECTION="emulation" PKG_SHORTDESC="game.libretro.genplus: Genesis Plus GX for Kodi" PKG_LONGDESC="game.libretro.genplus: Genesis Plus GX for Kodi" PKG_TOOLCHAIN="manual" -PKG_BUILD_FLAGS="-lto" PKG_LIBNAME="genesis_plus_gx_libretro.so" PKG_LIBPATH="$PKG_LIBNAME" diff --git a/packages/emulation/libretro-mame/package.mk b/packages/emulation/libretro-mame/package.mk index 8c7efa42cc..d8cab4911f 100644 --- a/packages/emulation/libretro-mame/package.mk +++ b/packages/emulation/libretro-mame/package.mk @@ -28,7 +28,7 @@ PKG_DEPENDS_TARGET="toolchain kodi-platform" PKG_SECTION="emulation" PKG_SHORTDESC="game.libretro.mame: MAME for Kodi" PKG_LONGDESC="game.libretro.mame: MAME for Kodi" -PKG_BUILD_FLAGS="-gold -lto" +PKG_BUILD_FLAGS="-gold" PKG_LIBNAME="mame_libretro.so" PKG_LIBPATH="$PKG_LIBNAME" diff --git a/packages/emulation/libretro-mame2000/package.mk b/packages/emulation/libretro-mame2000/package.mk index d637695b1a..e09ffca09e 100644 --- a/packages/emulation/libretro-mame2000/package.mk +++ b/packages/emulation/libretro-mame2000/package.mk @@ -28,7 +28,6 @@ PKG_DEPENDS_TARGET="toolchain kodi-platform" PKG_SECTION="emulation" PKG_SHORTDESC="2000 version of MAME (0.37b5) for libretro" PKG_LONGDESC="2000 version of MAME (0.37b5) for libretro" -PKG_BUILD_FLAGS="-lto" PKG_LIBNAME="mame2000_libretro.so" PKG_LIBPATH="$PKG_LIBNAME" diff --git a/packages/emulation/libretro-mame2010/package.mk b/packages/emulation/libretro-mame2010/package.mk index 83575dd5ad..ea81138f07 100644 --- a/packages/emulation/libretro-mame2010/package.mk +++ b/packages/emulation/libretro-mame2010/package.mk @@ -28,7 +28,6 @@ PKG_DEPENDS_TARGET="toolchain kodi-platform" PKG_SECTION="emulation" PKG_SHORTDESC="Late 2010 version of MAME (0.139) for libretro" PKG_LONGDESC="Late 2010 version of MAME (0.139) for libretro" -PKG_BUILD_FLAGS="-lto" PKG_LIBNAME="mame2010_libretro.so" PKG_LIBPATH="$PKG_LIBNAME" diff --git a/packages/emulation/libretro-mame2014/package.mk b/packages/emulation/libretro-mame2014/package.mk index 45d272de93..67290b8529 100644 --- a/packages/emulation/libretro-mame2014/package.mk +++ b/packages/emulation/libretro-mame2014/package.mk @@ -28,7 +28,6 @@ PKG_DEPENDS_TARGET="toolchain kodi-platform" PKG_SECTION="emulation" PKG_SHORTDESC="Late 2014/Early 2015 version of MAME (0.159-ish) for libretro" PKG_LONGDESC="Late 2014/Early 2015 version of MAME (0.159-ish) for libretro" -PKG_BUILD_FLAGS="-lto" PKG_LIBNAME="mame2014_libretro.so" PKG_LIBPATH="$PKG_LIBNAME" diff --git a/packages/emulation/libretro-ppsspp/package.mk b/packages/emulation/libretro-ppsspp/package.mk index bbb6ad3bda..7961adeb0a 100644 --- a/packages/emulation/libretro-ppsspp/package.mk +++ b/packages/emulation/libretro-ppsspp/package.mk @@ -28,7 +28,6 @@ PKG_SECTION="emulation" PKG_SHORTDESC="A PSP emulator for Android, Windows, Mac, Linux and Blackberry 10, written in C++." PKG_LONGDESC="A PSP emulator for Android, Windows, Mac, Linux and Blackberry 10, written in C++." PKG_TOOLCHAIN="make" -PKG_BUILD_FLAGS="-lto" PKG_LIBNAME="ppsspp_libretro.so" PKG_LIBPATH="libretro/$PKG_LIBNAME" diff --git a/packages/emulation/libretro-scummvm/package.mk b/packages/emulation/libretro-scummvm/package.mk index 5e18dd6c5e..e30a1e3cc2 100644 --- a/packages/emulation/libretro-scummvm/package.mk +++ b/packages/emulation/libretro-scummvm/package.mk @@ -29,7 +29,6 @@ PKG_SECTION="emulation" PKG_SHORTDESC="game.libretro.scummvm: scummvm for Kodi" PKG_LONGDESC="game.libretro.scummvm: scummvm for Kodi" PKG_TOOLCHAIN="manual" -PKG_BUILD_FLAGS="-lto" PKG_LIBNAME="scummvm_libretro.so" PKG_LIBPATH="backends/platform/libretro/build/$PKG_LIBNAME" diff --git a/packages/graphics/libraw/package.mk b/packages/graphics/libraw/package.mk index f4bb3b6827..a6c2687743 100644 --- a/packages/graphics/libraw/package.mk +++ b/packages/graphics/libraw/package.mk @@ -28,6 +28,7 @@ PKG_DEPENDS_TARGET="toolchain libjpeg-turbo" PKG_SECTION="graphics" PKG_SHORTDESC="A library for reading RAW files obtained from digital photo cameras (CRW/CR2, NEF, RAF, DNG, and others)" PKG_LONGDESC="A library for reading RAW files obtained from digital photo cameras (CRW/CR2, NEF, RAF, DNG, and others)" +PKG_BUILD_FLAGS="+pic" PKG_CONFIGURE_OPTS_TARGET="--enable-static \ --disable-shared \ diff --git a/packages/lang/Python2/package.mk b/packages/lang/Python2/package.mk index 632cba5aaa..c55df9f0f7 100644 --- a/packages/lang/Python2/package.mk +++ b/packages/lang/Python2/package.mk @@ -31,7 +31,7 @@ PKG_SHORTDESC="python2: The Python2 programming language" PKG_LONGDESC="Python2 is an interpreted object-oriented programming language, and is often compared with Tcl, Perl, Java or Scheme." PKG_TOOLCHAIN="autotools" -PKG_BUILD_FLAGS="-parallel" +PKG_BUILD_FLAGS="-parallel +lto-parallel" PKG_PY_DISABLED_MODULES="_tkinter nis gdbm bsddb ossaudiodev" diff --git a/packages/mediacenter/kodi-binary-addons/peripheral.joystick/package.mk b/packages/mediacenter/kodi-binary-addons/peripheral.joystick/package.mk index 36f9b75181..711b19a489 100644 --- a/packages/mediacenter/kodi-binary-addons/peripheral.joystick/package.mk +++ b/packages/mediacenter/kodi-binary-addons/peripheral.joystick/package.mk @@ -28,6 +28,7 @@ PKG_DEPENDS_TARGET="toolchain kodi-platform p8-platform" PKG_SECTION="" PKG_SHORTDESC="peripheral.joystick: Joystick support in Kodi" PKG_LONGDESC="peripheral.joystick provides joystick support and button mapping" +PKG_BUILD_FLAGS="+lto" PKG_IS_ADDON="yes" PKG_ADDON_TYPE="kodi.peripheral" diff --git a/packages/mediacenter/kodi/package.mk b/packages/mediacenter/kodi/package.mk index f4420f76b8..246860ae71 100644 --- a/packages/mediacenter/kodi/package.mk +++ b/packages/mediacenter/kodi/package.mk @@ -33,8 +33,6 @@ PKG_LONGDESC="Kodi Media Center (which was formerly named Xbox Media Center or X # Single threaded LTO is very slow so rely on Kodi for parallel LTO support if [ "$LTO_SUPPORT" = "yes" ] && ! build_with_debug; then PKG_KODI_USE_LTO="-DUSE_LTO=$CONCURRENCY_MAKE_LEVEL" -else - PKG_BUILD_FLAGS="-lto" fi get_graphicdrivers diff --git a/packages/multimedia/ffmpeg/package.mk b/packages/multimedia/ffmpeg/package.mk index 73136814e1..9086882a49 100644 --- a/packages/multimedia/ffmpeg/package.mk +++ b/packages/multimedia/ffmpeg/package.mk @@ -30,7 +30,7 @@ PKG_DEPENDS_TARGET="toolchain yasm:host zlib bzip2 openssl speex" PKG_SECTION="multimedia" PKG_SHORTDESC="FFmpeg is a complete, cross-platform solution to record, convert and stream audio and video." PKG_LONGDESC="FFmpeg is a complete, cross-platform solution to record, convert and stream audio and video." -PKG_BUILD_FLAGS="-gold -lto" +PKG_BUILD_FLAGS="-gold" # Dependencies get_graphicdrivers diff --git a/packages/network/bluez/package.mk b/packages/network/bluez/package.mk index 337bbd8e45..d25cbf69d9 100644 --- a/packages/network/bluez/package.mk +++ b/packages/network/bluez/package.mk @@ -28,6 +28,7 @@ PKG_SECTION="network" PKG_SHORTDESC="bluez: Bluetooth Tools and System Daemons for Linux." PKG_LONGDESC="Bluetooth Tools and System Daemons for Linux." PKG_TOOLCHAIN="autotools" +PKG_BUILD_FLAGS="+lto" if build_with_debug; then BLUEZ_CONFIG="--enable-debug" diff --git a/packages/network/openssh/package.mk b/packages/network/openssh/package.mk index 99218bb139..3fcd67461e 100644 --- a/packages/network/openssh/package.mk +++ b/packages/network/openssh/package.mk @@ -28,6 +28,7 @@ PKG_SECTION="network" PKG_SHORTDESC="openssh: An open re-implementation of the SSH package" PKG_LONGDESC="This is a Linux port of OpenBSD's excellent OpenSSH. OpenSSH is based on the last free version of Tatu Ylonen's SSH with all patent-encumbered algorithms removed, all known security bugs fixed, new features reintroduced, and many other clean-ups. SSH (Secure Shell) is a program to log into another computer over a network, to execute commands in a remote machine, and to move files from one machine to another. It provides strong authentication and secure communications over insecure channels. It is intended as a replacement for rlogin, rsh, rcp, and rdist." PKG_TOOLCHAIN="autotools" +PKG_BUILD_FLAGS="+lto" PKG_CONFIGURE_OPTS_TARGET="--sysconfdir=/etc/ssh \ --libexecdir=/usr/lib/openssh \ diff --git a/packages/network/wpa_supplicant/package.mk b/packages/network/wpa_supplicant/package.mk index 7b2583f1af..9c49c9712d 100644 --- a/packages/network/wpa_supplicant/package.mk +++ b/packages/network/wpa_supplicant/package.mk @@ -28,6 +28,7 @@ PKG_SECTION="network" PKG_SHORTDESC="wpa_supplicant: An IEEE 802.11i supplicant implementation" PKG_LONGDESC="The wpa_supplicant is a free software implementation of an IEEE 802.11i supplicant. In addition to being a full-featured WPA2 supplicant, it also has support for WPA and older wireless LAN security protocols." PKG_TOOLCHAIN="make" +PKG_BUILD_FLAGS="+lto-parallel" PKG_MAKE_OPTS_TARGET="-C wpa_supplicant V=1 LIBDIR=/usr/lib BINDIR=/usr/bin" PKG_MAKEINSTALL_OPTS_TARGET="-C wpa_supplicant V=1 LIBDIR=/usr/lib BINDIR=/usr/bin" diff --git a/packages/python/system/dbus-python/package.mk b/packages/python/system/dbus-python/package.mk index 2b81dbab5f..5a68fc081b 100644 --- a/packages/python/system/dbus-python/package.mk +++ b/packages/python/system/dbus-python/package.mk @@ -27,6 +27,7 @@ PKG_DEPENDS_TARGET="toolchain Python2 dbus dbus-glib" PKG_SECTION="python/system" PKG_SHORTDESC="dbus-python: A message bus system" PKG_LONGDESC="D-BUS is a message bus, used for sending messages between applications. Conceptually, it fits somewhere in between raw sockets and CORBA in terms of complexity. D-BUS supports broadcast messages, asynchronous messages (thus decreasing latency), authentication, and more. It is designed to be low-overhead; messages are sent using a binary protocol, not using XML. D-BUS also supports a method call mapping for its messages, but it is not required; this makes using the system quite simple." +PKG_BUILD_FLAGS="+lto" pre_configure_target() { export PYTHON_CONFIG="$SYSROOT_PREFIX/usr/bin/python2-config" diff --git a/packages/python/system/simplejson/package.mk b/packages/python/system/simplejson/package.mk index d72b129daf..8e296de042 100644 --- a/packages/python/system/simplejson/package.mk +++ b/packages/python/system/simplejson/package.mk @@ -28,7 +28,6 @@ PKG_SECTION="python/system" PKG_SHORTDESC="simplejson: a simple, fast, complete, correct and extensible JSON encoder and decoder for Python 2.5+." PKG_LONGDESC="simplejson is a simple, fast, complete, correct and extensible JSON encoder and decoder for Python 2.5+. It is pure Python code with no dependencies, but includes an optional C extension for a serious speed boost." PKG_TOOLCHAIN="manual" -PKG_BUILD_FLAGS="-lto" pre_make_target() { export PYTHONXCPREFIX="$SYSROOT_PREFIX/usr" diff --git a/packages/readme.md b/packages/readme.md index 109dc27014..2ba73b4676 100644 --- a/packages/readme.md +++ b/packages/readme.md @@ -118,7 +118,10 @@ Set the variable `PKG_BUILD_FLAGS` in the `package.mk` to enable/disable the sin |----------|----------|----------------|-------------| | pic | disabled | target/init | [Position Independent Code](https://en.wikipedia.org/wiki/Position-independent_code) | | pic:host | disabled | host/bootstrap | see above | -| lto | depend on `LTO_SUPPORT` | target/init | can only disabled, use of "Link Time Optimisation" of the compiler | +| lto | disabled | target/init | enable LTO (Link Time optimization) in the compiler and linker unless disabled via `LTO_SUPPORT`. Compiles non-fat LTO objects (only bytecode) and performs single-threaded optimization at link stage | +| lto-parallel | disabled | target/init | same as `lto` but enable parallel optimization at link stage. Only enable this if the package build doesn't run multiple linkers in parallel otherwise this can result in lots of parallel processes! | +| lto-fat | disabled | target/init | same as `lto` but compile fat LTO objects (bytecode plus optimized assembly). This increases compile time but can be useful to create static libraries suitable both for LTO and non-LTO linking | +| lto-off | disabled | target/init | explicitly disable LTO in the compiler and linker | | gold | depend on `GOLD_SUPPORT` | target/init | can only disabled, use of the GOLD-Linker | | parallel | enabled | all | `make` or `ninja` builds with multiple threads/processes (or not) | diff --git a/packages/security/libgcrypt/package.mk b/packages/security/libgcrypt/package.mk index 635b475353..518677db73 100644 --- a/packages/security/libgcrypt/package.mk +++ b/packages/security/libgcrypt/package.mk @@ -30,7 +30,6 @@ PKG_LONGDESC="Libgcrypt is a general purpose cryptographic library based on the PKG_TOOLCHAIN="autotools" # libgcrypt-1.7.x fails to build with LTO support # see for example https://bugs.gentoo.org/show_bug.cgi?id=581114 -PKG_BUILD_FLAGS="-lto" PKG_CONFIGURE_OPTS_TARGET="CC_FOR_BUILD=$HOST_CC \ ac_cv_sys_symbol_underscore=no \ diff --git a/packages/sysutils/ntfs-3g_ntfsprogs/package.mk b/packages/sysutils/ntfs-3g_ntfsprogs/package.mk index 71006ca8f2..769d1f8646 100644 --- a/packages/sysutils/ntfs-3g_ntfsprogs/package.mk +++ b/packages/sysutils/ntfs-3g_ntfsprogs/package.mk @@ -28,6 +28,7 @@ PKG_SECTION="system" PKG_SHORTDESC="ntfs-3g_ntfsprogs: NTFS-3G Read/Write userspace driver" PKG_LONGDESC="The NTFS-3G_ntfsprogs driver is an open source, freely available NTFS driver for Linux with read and write support. It provides safe and fast handling of the Windows XP, Windows Server 2003, Windows 2000 and Windows Vista file systems." PKG_TOOLCHAIN="autotools" +PKG_BUILD_FLAGS="+lto" PKG_CONFIGURE_OPTS_TARGET="--exec-prefix=/usr/ \ --disable-dependency-tracking \ diff --git a/packages/tools/grub/package.mk b/packages/tools/grub/package.mk index 994b93b3ea..ae68774dd0 100755 --- a/packages/tools/grub/package.mk +++ b/packages/tools/grub/package.mk @@ -28,7 +28,6 @@ PKG_SECTION="tools" PKG_SHORTDESC="GNU GRUB is a Multiboot boot loader." PKG_LONGDESC="GNU GRUB is a Multiboot boot loader that was derived from GRUB, the GRand Unified Bootloader, which was originally designed and implemented by Erich Stefan Boleyn" PKG_TOOLCHAIN="configure" -PKG_BUILD_FLAGS="-lto" PKG_CONFIGURE_OPTS_TARGET="--target=i386-pc-linux \ --disable-nls \ diff --git a/packages/wayland/wayland/package.mk b/packages/wayland/wayland/package.mk index af7b4f7344..086062d45e 100644 --- a/packages/wayland/wayland/package.mk +++ b/packages/wayland/wayland/package.mk @@ -28,7 +28,6 @@ PKG_DEPENDS_HOST="libffi:host expat:host libxml2:host" PKG_SECTION="wayland" PKG_SHORTDESC="a display server protocol" PKG_LONGDESC="a display server protocol" -PKG_BUILD_FLAGS="-lto" PKG_CONFIGURE_OPTS_HOST="--enable-shared \ --disable-static \ diff --git a/packages/wayland/weston/package.mk b/packages/wayland/weston/package.mk index 14301478e9..e84dd0e6d2 100644 --- a/packages/wayland/weston/package.mk +++ b/packages/wayland/weston/package.mk @@ -27,7 +27,6 @@ PKG_DEPENDS_TARGET="toolchain wayland-protocols libdrm libxkbcommon libinput cai PKG_SECTION="wayland" PKG_SHORTDESC="Reference implementation of a Wayland compositor" PKG_LONGDESC="Reference implementation of a Wayland compositor" -PKG_BUILD_FLAGS="-lto" PKG_CONFIGURE_OPTS_TARGET="CFLAGS=-DMESA_EGL_NO_X11_HEADERS \ LIBS=-lturbojpeg \ diff --git a/packages/x11/driver/xf86-video-intel/package.mk b/packages/x11/driver/xf86-video-intel/package.mk index dc55df7900..37d2a914ac 100644 --- a/packages/x11/driver/xf86-video-intel/package.mk +++ b/packages/x11/driver/xf86-video-intel/package.mk @@ -30,7 +30,6 @@ PKG_SHORTDESC="xf86-video-intel: The Xorg driver for Intel video chips" PKG_LONGDESC="The Xorg driver for Intel i810, i815, 830M, 845G, 852GM, 855GM, 865G, 915G, 915GM and 965G video chips." PKG_TOOLCHAIN="autotools" # xf86-video-intel is broken enough. dont link with LTO -PKG_BUILD_FLAGS="-lto" PKG_CONFIGURE_OPTS_TARGET="--disable-backlight \ --disable-backlight-helper \