[Buildroot] [PATCH 0/8] Improving static/shared library selection

Thomas Petazzoni thomas.petazzoni at free-electrons.com
Wed Dec 3 21:41:27 UTC 2014


Hello,

The goal of this patch series is to improve/clarify our handling of
shared vs. static library handling. The current naming of the option
used for static linking, BR2_PREFER_STATIC_LIB, is misleading as it
suggests it's only a preference, even though we have move towards
changing the semantic of this option to "build everything statically".

Moreover, on most architectures, we currently build both shared and
static libraries, even though the static libraries are generally not
used. This patch series proposes to switch to a three options choice:
static only, static+shared and shared only, and to use the latter
option by default on platforms that support shared libraries.

 - PATCH 1 is just a preliminary fix to the documentation, it can be
   applied right now, regardless of the decision on the rest of the
   patch series.

 - PATCH 2 renames BR2_PREFER_STATIC_LIB to BR2_STATIC_LIBS. With the
   exception of the addition of the Config.in.legacy fragment, the
   rest of the patch is a pure mechanical change.

 - PATCH 3 to 5 adjust arch/Config.in to improve the selection of
   binary format and expressing which binary formats supports shared
   libraries.

 - PATCH 6 makes a small build time improvement to ncurses by
   disabling static library on the host variant.

 - PATCH 7 adds the choice with the three options: static only, static
   and shared, shared only, leaving the current default unchanged.

 - PATCH 8 changes the default to be "shared only" (of course on
   platforms that support shared libraries).

Thanks,

Thomas

Thomas Petazzoni (8):
  docs: fix typo in cmake-package documentation
  Rename BR2_PREFER_STATIC_LIB to BR2_STATIC_LIBS
  arch: FDPIC is not supported on m68k
  arch: ensure BR2_BINFMT_ELF is really used
  arch: introduce BR2_BINFMT_SUPPORTS_SHARED
  ncurses: speed up host build by disabling static library building
  Turn the static lib option into a choice with more options
  Build shared libraries only as the default

 Config.in                                          | 41 +++++++++----
 Config.in.legacy                                   | 12 ++++
 arch/Config.in                                     | 15 +++--
 docs/manual/adding-packages-cmake.txt              |  2 +-
 docs/manual/adding-packages-directory.txt          |  2 +-
 package/Config.in                                  |  6 +-
 package/Makefile.in                                |  6 +-
 package/agentpp/Config.in                          |  4 +-
 package/aiccu/aiccu.mk                             |  2 +-
 package/aircrack-ng/Config.in                      |  2 +-
 package/aircrack-ng/aircrack-ng.mk                 |  8 +--
 package/alsa-lib/alsa-lib.mk                       |  2 +-
 package/am335x-pru-package/am335x-pru-package.mk   |  6 +-
 package/apr-util/Config.in                         |  4 +-
 package/apr/Config.in                              |  4 +-
 package/avahi/Config.in                            |  2 +-
 package/avrdude/Config.in                          |  4 +-
 package/bash/bash.mk                               |  2 +-
 package/bellagio/Config.in                         |  4 +-
 package/bind/Config.in                             |  4 +-
 package/bluez5_utils/Config.in                     |  4 +-
 package/bluez_utils/Config.in                      |  4 +-
 package/bmon/bmon.mk                               |  2 +-
 package/boost/boost.mk                             |  4 +-
 package/botan/botan.mk                             |  2 +-
 package/btrfs-progs/btrfs-progs.mk                 |  2 +-
 package/bustle/bustle.mk                           |  2 +-
 package/busybox/busybox.mk                         |  2 +-
 package/bzip2/bzip2.mk                             |  6 +-
 package/canfestival/Config.in                      |  4 +-
 package/ccid/Config.in                             |  4 +-
 package/cegui06/Config.in                          |  4 +-
 package/cifs-utils/cifs-utils.mk                   |  2 +-
 package/cjson/Config.in                            |  2 +-
 package/collectd/Config.in                         |  8 +--
 package/connman/Config.in                          |  4 +-
 package/cppcms/Config.in                           |  4 +-
 package/cppdb/Config.in                            |  4 +-
 package/cppunit/Config.in                          |  4 +-
 package/crda/Config.in                             |  4 +-
 package/crda/crda.mk                               |  2 +-
 package/cryptsetup/Config.in                       |  4 +-
 package/curlftpfs/Config.in                        |  4 +-
 package/cwiid/Config.in                            |  2 +-
 package/czmq/czmq.mk                               |  2 +-
 package/dbus/dbus.mk                               |  2 +-
 package/dhcpcd/dhcpcd.mk                           |  2 +-
 package/dhcpdump/dhcpdump.mk                       |  2 +-
 package/directfb/Config.in                         |  8 +--
 package/directfb/directfb.mk                       |  2 +-
 package/dmraid/Config.in                           |  4 +-
 package/dnsmasq/dnsmasq.mk                         |  4 +-
 package/dropbear/dropbear.mk                       |  2 +-
 package/dtc/Config.in                              |  4 +-
 package/dvb-apps/dvb-apps.mk                       |  2 +-
 package/e2fsprogs/e2fsprogs.mk                     |  2 +-
 package/ebtables/ebtables.mk                       |  4 +-
 package/efl/libedbus/Config.in                     |  4 +-
 package/elfutils/Config.in                         |  4 +-
 package/erlang/Config.in                           |  4 +-
 package/eudev/Config.in                            |  4 +-
 package/exfat/Config.in                            |  4 +-
 package/exim/exim.mk                               |  2 +-
 package/exiv2/Config.in                            |  4 +-
 package/faifa/Config.in                            |  4 +-
 package/fbv/fbv.mk                                 |  2 +-
 package/ffmpeg/ffmpeg.mk                           |  2 +-
 package/flann/Config.in                            |  4 +-
 package/fswebcam/Config.in                         |  4 +-
 package/gawk/Config.in                             |  4 +-
 package/gcc/gcc-final/gcc-final.mk                 |  4 +-
 package/giblib/Config.in                           |  4 +-
 package/gpm/Config.in                              |  4 +-
 package/gptfdisk/gptfdisk.mk                       |  2 +-
 package/gstreamer/gst-ffmpeg/gst-ffmpeg.mk         |  2 +-
 package/gstreamer1/gst1-plugins-bad/Config.in      |  2 +-
 package/gstreamer1/gst1-plugins-ugly/Config.in     |  4 +-
 package/haserl/haserl.mk                           |  2 +-
 package/heirloom-mailx/Config.in                   |  4 +-
 package/hostapd/Config.in                          |  4 +-
 package/hostapd/hostapd.mk                         |  4 +-
 package/iftop/iftop.mk                             |  2 +-
 package/imlib2/Config.in                           |  4 +-
 package/inadyn/Config.in                           |  4 +-
 package/ipsec-tools/ipsec-tools.mk                 |  2 +-
 package/iptables/iptables.mk                       |  2 +-
 package/iw/iw.mk                                   |  2 +-
 package/jimtcl/jimtcl.mk                           |  2 +-
 package/kexec-lite/Config.in                       |  4 +-
 package/keyutils/keyutils.mk                       |  2 +-
 package/kmod/Config.in                             |  2 +-
 package/knock/knock.mk                             |  2 +-
 package/lftp/lftp.mk                               |  2 +-
 package/libarchive/libarchive.mk                   |  4 +-
 package/libbluray/Config.in                        |  4 +-
 package/libcap/libcap.mk                           |  2 +-
 package/libcec/Config.in                           |  4 +-
 package/libcgi/libcgi.mk                           |  2 +-
 package/libdvdnav/Config.in                        |  4 +-
 package/libdvdread/Config.in                       |  4 +-
 package/libebml/libebml.mk                         |  2 +-
 package/libesmtp/Config.in                         |  4 +-
 package/libfreefare/libfreefare.mk                 |  2 +-
 package/libfuse/Config.in                          |  4 +-
 package/libjson/libjson.mk                         |  4 +-
 package/libmatroska/libmatroska.mk                 |  2 +-
 package/libnl/Config.in                            |  4 +-
 package/libnspr/libnspr.mk                         |  2 +-
 package/libphidget/Config.in                       |  4 +-
 package/libpthread-stubs/libpthread-stubs.mk       |  2 +-
 package/libsepol/libsepol.mk                       |  2 +-
 package/libshairplay/Config.in                     |  4 +-
 package/libubox/Config.in                          |  4 +-
 package/libuci/Config.in                           |  4 +-
 package/libva-intel-driver/Config.in               |  4 +-
 package/libva/Config.in                            |  4 +-
 package/linux-pam/Config.in                        |  4 +-
 package/live555/live555.mk                         |  2 +-
 package/lm-sensors/lm-sensors.mk                   |  2 +-
 package/lockdev/lockdev.mk                         |  6 +-
 package/log4cxx/Config.in                          |  4 +-
 package/ltrace/Config.in                           |  4 +-
 package/lua/lua.mk                                 |  2 +-
 package/luajit/luajit.mk                           |  2 +-
 package/lvm2/Config.in                             |  4 +-
 package/lz4/lz4.mk                                 |  2 +-
 package/mesa3d/Config.in                           |  6 +-
 package/mesa3d/mesa3d.mk                           |  2 +-
 package/minidlna/minidlna.mk                       |  2 +-
 package/mpd/Config.in                              |  4 +-
 package/msmtp/msmtp.mk                             |  2 +-
 package/ncurses/ncurses.mk                         | 16 +++--
 package/ne10/ne10.mk                               |  4 +-
 package/netsnmp/netsnmp.mk                         |  2 +-
 package/nftables/nftables.mk                       |  4 +-
 package/ngrep/ngrep.mk                             |  2 +-
 package/omniorb/omniorb.mk                         |  2 +-
 package/openobex/Config.in                         |  4 +-
 package/openssl/openssl.mk                         | 10 ++--
 package/openvmtools/Config.in                      |  4 +-
 package/openvpn/openvpn.mk                         |  2 +-
 package/p11-kit/Config.in                          |  4 +-
 package/parted/parted.mk                           |  2 +-
 package/pciutils/pciutils.mk                       |  2 +-
 package/pcsc-lite/Config.in                        |  4 +-
 package/perl-gd/Config.in                          |  4 +-
 package/perl-gdgraph/Config.in                     |  4 +-
 package/perl-io-socket-ssl/Config.in               |  4 +-
 package/perl-net-ssleay/Config.in                  |  4 +-
 package/perl-xml-libxml/Config.in                  |  4 +-
 package/perl/perl.mk                               |  2 +-
 package/phidgetwebservice/Config.in                |  4 +-
 package/php/php.mk                                 |  2 +-
 package/pkg-cmake.mk                               |  2 +-
 package/pkgconf/pkgconf.mk                         |  2 +-
 package/pppd/Config.in                             |  4 +-
 package/proxychains-ng/Config.in                   |  4 +-
 package/ptpd2/ptpd2.mk                             |  2 +-
 package/pure-ftpd/pure-ftpd.mk                     |  2 +-
 package/qdecoder/Config.in                         |  2 +-
 package/qhull/Config.in                            |  4 +-
 package/qlibc/Config.in                            |  4 +-
 package/qt/Config.in                               |  2 +-
 package/qt5/qt5base/Config.in                      |  4 +-
 package/qt5/qt5base/qt5base.mk                     |  4 +-
 package/qt5/qt5connectivity/Config.in              |  4 +-
 package/qt5/qt5declarative/qt5declarative.mk       |  2 +-
 package/qt5/qt5enginio/qt5enginio.mk               |  2 +-
 package/qt5/qt5imageformats/qt5imageformats.mk     |  2 +-
 package/qt5/qt5multimedia/qt5multimedia.mk         |  2 +-
 package/qt5/qt5quick1/Config.in                    |  4 +-
 package/qt5/qt5script/qt5script.mk                 |  2 +-
 package/qt5/qt5sensors/qt5sensors.mk               |  2 +-
 package/qt5/qt5serialport/qt5serialport.mk         |  2 +-
 package/qt5/qt5svg/qt5svg.mk                       |  2 +-
 package/qt5/qt5webkit/Config.in                    |  2 +-
 package/qt5/qt5websockets/qt5websockets.mk         |  2 +-
 package/qt5/qt5x11extras/qt5x11extras.mk           |  2 +-
 package/qt5/qt5xmlpatterns/qt5xmlpatterns.mk       |  2 +-
 package/rsh-redone/Config.in                       |  8 +--
 package/rtmpdump/rtmpdump.mk                       |  2 +-
 package/ruby/Config.in                             |  4 +-
 package/sconeserver/Config.in                      |  4 +-
 package/smack/Config.in                            |  4 +-
 package/snmppp/Config.in                           |  4 +-
 package/snowball-hdmiservice/Config.in             |  4 +-
 package/snowball-init/Config.in                    |  4 +-
 package/spice/Config.in                            |  4 +-
 package/sqlite/sqlite.mk                           |  2 +-
 package/sshfs/Config.in                            |  4 +-
 package/stress/stress.mk                           |  4 +-
 package/strongswan/Config.in                       |  2 +-
 package/subversion/Config.in                       |  2 +-
 package/systemd/Config.in                          |  2 +-
 package/tcpdump/tcpdump.mk                         |  2 +-
 package/thrift/thrift.mk                           |  2 +-
 package/tinyalsa/Config.in                         |  4 +-
 package/trace-cmd/Config.in                        |  4 +-
 package/tslib/Config.in                            |  4 +-
 package/uclibc/uclibc.mk                           |  4 +-
 package/udisks/Config.in                           |  4 +-
 package/ulogd/Config.in                            |  4 +-
 package/unionfs/Config.in                          |  4 +-
 package/ushare/Config.in                           |  4 +-
 package/ussp-push/Config.in                        |  4 +-
 package/util-linux/Config.in                       |  8 +--
 package/vde2/Config.in                             |  4 +-
 package/vlc/vlc.mk                                 |  2 +-
 package/wayland/Config.in                          |  4 +-
 package/weston/Config.in                           |  4 +-
 package/wireless_tools/Config.in                   |  2 +-
 package/wpa_supplicant/wpa_supplicant.mk           |  4 +-
 package/wvstreams/wvstreams.mk                     |  2 +-
 package/x11r7/Config.in                            |  4 +-
 package/x11r7/xdriver_xf86-input-tslib/Config.in   |  4 +-
 package/x264/x264.mk                               |  2 +-
 package/xbmc/Config.in                             | 14 ++---
 package/xl2tp/xl2tp.mk                             |  2 +-
 package/xmlstarlet/xmlstarlet.mk                   |  2 +-
 package/zeromq/zeromq.mk                           |  2 +-
 package/zlib/zlib.mk                               |  2 +-
 package/zlog/Config.in                             |  4 +-
 support/scripts/scancpan                           |  4 +-
 system/Config.in                                   |  6 +-
 toolchain/toolchain-buildroot/Config.in            |  6 +-
 toolchain/toolchain-external/Config.in             | 68 +++++++++++-----------
 toolchain/toolchain-external/toolchain-external.mk |  2 +-
 227 files changed, 473 insertions(+), 423 deletions(-)

-- 
2.1.0



More information about the buildroot mailing list