buildrootschalter/package/binutils/binutils.mk

100 lines
3.4 KiB
Makefile
Raw Normal View History

################################################################################
#
# binutils
#
################################################################################
# Version is set when using buildroot toolchain.
# If not, we do like other packages
BINUTILS_VERSION = $(call qstrip,$(BR2_BINUTILS_VERSION))
ifeq ($(BINUTILS_VERSION),)
ifeq ($(BR2_avr32),y)
# avr32 uses a special version
BINUTILS_VERSION = 2.18-avr32-1.0.1
else
BINUTILS_VERSION = 2.22
endif
endif
ifeq ($(ARCH),avr32)
BINUTILS_SITE = ftp://www.at91.com/pub/buildroot
endif
ifeq ($(BR2_arc),y)
BINUTILS_SITE = $(call github,foss-for-synopsys-dwc-arc-processors,binutils-gdb,$(BINUTILS_VERSION))
BINUTILS_SOURCE = binutils-$(BINUTILS_VERSION).tar.gz
BINUTILS_FROM_GIT = y
endif
BINUTILS_SITE ?= $(BR2_GNU_MIRROR)/binutils
BINUTILS_SOURCE ?= binutils-$(BINUTILS_VERSION).tar.bz2
BINUTILS_EXTRA_CONFIG_OPTIONS = $(call qstrip,$(BR2_BINUTILS_EXTRA_CONFIG_OPTIONS))
BINUTILS_INSTALL_STAGING = YES
BINUTILS_DEPENDENCIES = $(if $(BR2_NEEDS_GETTEXT_IF_LOCALE),gettext)
HOST_BINUTILS_DEPENDENCIES =
BINUTILS_LICENSE = GPLv3+, libiberty LGPLv2.1+
BINUTILS_LICENSE_FILES = COPYING3 COPYING.LIB
ifeq ($(BINUTILS_FROM_GIT),y)
BINUTILS_DEPENDENCIES += host-texinfo host-flex host-bison
HOST_BINUTILS_DEPENDENCIES += host-texinfo host-flex host-bison
endif
binutils, gdb: support unified binutils-gdb git repository If Binutils and/or GDB are fetched from the unified binutils-gdb repository, then the tarball will contain both Binutils and GDB sources, unlike the "normal" tarballs that contain only the titular package. To keep packages separated in Buildroot we need to disable undesired components when configuring. Binutils and GDB migrated to a common Git repository in the October 2013 [1]. Previous Git repositories were incomplete copies of CVS repository which copied only the relevant files (no binutils files in GDB, and vice versa). In the new binutils-gdb repository there is no such separation and a result all files exist in directory after checkout. So if "configure" and "make" are used without explicit targets, all projects will be built: binutils, ld, gas, bfd, opcodes, gdb, etc. In case of Buildroot this would mean that selecting Binutils only, still will build both Binutils and GDB. And if GDB is selected as well, then both packages will be built two times, and Binutils from GDB directory will overwrite initial build of Binutils (or vice versa if Binutils will be built after the GDB). This is a serious problem, because binutils and GDB use separate branches in this common repository. In case of Buildroot this means that separate Git commits (or tags) should be used when downloading source from Git. This affects only Git repositories, because GNU release tarballs still contain only relevant packages. This change is backward compatible, because if "normal" tarball is used (without extra directories), than --disable-* configure options are just ignored by configure. [1] https://sourceware.org/ml/gdb/2013-10/msg00071.html [Thomas: use variables to factorize options, and add comments in the relevant .mk files to explain what's going on.] Signed-off-by: Anton Kolesov <Anton.Kolesov@synopsys.com> Cc: Alexey Brodkin <abrodkin@synopsys.com> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2014-07-29 14:54:37 +02:00
# When binutils sources are fetched from the binutils-gdb repository,
# they also contain the gdb sources, but gdb shouldn't be built, so we
# disable it.
BINUTILS_DISABLE_GDB_CONF_OPTS = \
binutils, gdb: support unified binutils-gdb git repository If Binutils and/or GDB are fetched from the unified binutils-gdb repository, then the tarball will contain both Binutils and GDB sources, unlike the "normal" tarballs that contain only the titular package. To keep packages separated in Buildroot we need to disable undesired components when configuring. Binutils and GDB migrated to a common Git repository in the October 2013 [1]. Previous Git repositories were incomplete copies of CVS repository which copied only the relevant files (no binutils files in GDB, and vice versa). In the new binutils-gdb repository there is no such separation and a result all files exist in directory after checkout. So if "configure" and "make" are used without explicit targets, all projects will be built: binutils, ld, gas, bfd, opcodes, gdb, etc. In case of Buildroot this would mean that selecting Binutils only, still will build both Binutils and GDB. And if GDB is selected as well, then both packages will be built two times, and Binutils from GDB directory will overwrite initial build of Binutils (or vice versa if Binutils will be built after the GDB). This is a serious problem, because binutils and GDB use separate branches in this common repository. In case of Buildroot this means that separate Git commits (or tags) should be used when downloading source from Git. This affects only Git repositories, because GNU release tarballs still contain only relevant packages. This change is backward compatible, because if "normal" tarball is used (without extra directories), than --disable-* configure options are just ignored by configure. [1] https://sourceware.org/ml/gdb/2013-10/msg00071.html [Thomas: use variables to factorize options, and add comments in the relevant .mk files to explain what's going on.] Signed-off-by: Anton Kolesov <Anton.Kolesov@synopsys.com> Cc: Alexey Brodkin <abrodkin@synopsys.com> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2014-07-29 14:54:37 +02:00
--disable-sim --disable-gdb
# We need to specify host & target to avoid breaking ARM EABI
BINUTILS_CONF_OPTS = --disable-multilib --disable-werror \
--host=$(GNU_TARGET_NAME) \
--target=$(GNU_TARGET_NAME) \
--enable-install-libiberty \
$(BINUTILS_DISABLE_GDB_CONF_OPTS) \
$(BINUTILS_EXTRA_CONFIG_OPTIONS)
# Don't build documentation. It takes up extra space / build time,
# and sometimes needs specific makeinfo versions to work
BINUTILS_CONF_ENV += ac_cv_prog_MAKEINFO=missing
HOST_BINUTILS_CONF_ENV += ac_cv_prog_MAKEINFO=missing
# Install binutils after busybox to prefer full-blown utilities
ifeq ($(BR2_PACKAGE_BUSYBOX),y)
BINUTILS_DEPENDENCIES += busybox
endif
# "host" binutils should actually be "cross"
# We just keep the convention of "host utility" for now
HOST_BINUTILS_CONF_OPTS = --disable-multilib --disable-werror \
--target=$(GNU_TARGET_NAME) \
--disable-shared --enable-static \
--with-sysroot=$(STAGING_DIR) \
$(BINUTILS_DISABLE_GDB_CONF_OPTS) \
$(BINUTILS_EXTRA_CONFIG_OPTIONS)
# We just want libbfd and libiberty, not the full-blown binutils in staging
define BINUTILS_INSTALL_STAGING_CMDS
$(MAKE) -C $(@D)/bfd DESTDIR=$(STAGING_DIR) install
$(MAKE) -C $(@D)/libiberty DESTDIR=$(STAGING_DIR) install
endef
# If we don't want full binutils on target
ifneq ($(BR2_PACKAGE_BINUTILS_TARGET),y)
define BINUTILS_INSTALL_TARGET_CMDS
$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/bfd DESTDIR=$(TARGET_DIR) install
$(MAKE) -C $(@D)/libiberty DESTDIR=$(STAGING_DIR) install
endef
endif
XTENSA_CORE_NAME = $(call qstrip, $(BR2_XTENSA_CORE_NAME))
ifneq ($(XTENSA_CORE_NAME),)
define BINUTILS_XTENSA_PRE_PATCH
tar xf $(BR2_XTENSA_OVERLAY_DIR)/xtensa_$(XTENSA_CORE_NAME).tar \
-C $(@D) --strip-components=1 binutils
endef
BINUTILS_PRE_PATCH_HOOKS += BINUTILS_XTENSA_PRE_PATCH
HOST_BINUTILS_PRE_PATCH_HOOKS += BINUTILS_XTENSA_PRE_PATCH
endif
$(eval $(autotools-package))
$(eval $(host-autotools-package))