pass ARCH down to uClibc
[buildroot.git] / toolchain / binutils / binutils.mk
blobe94a332f04448fd9e60d93872495b2f2d9ff69ce
1 #############################################################
3 # build binutils for use on the host system
5 #############################################################
6 BINUTILS_VERSION:=$(subst ",,$(BR2_BINUTILS_VERSION))
7 #")
9 EXTRA_BINUTILS_CONFIG_OPTIONS=$(strip $(subst ",, $(BR2_EXTRA_BINUTILS_CONFIG_OPTIONS)))
10 #"))
11 BINUTILS_SITE:=$(BR2_KERNEL_MIRROR)/linux/devel/binutils
12 ifeq ($(BINUTILS_VERSION),2.19.1)
13 BINUTILS_SITE:=$(BR2_GNU_MIRROR)/binutils/
14 endif
15 ifeq ($(BINUTILS_VERSION),2.19)
16 BINUTILS_SITE:=$(BR2_GNU_MIRROR)/binutils/
17 endif
18 ifeq ($(BINUTILS_VERSION),2.18)
19 BINUTILS_SITE:=$(BR2_GNU_MIRROR)/binutils/
20 endif
21 ifeq ($(BINUTILS_VERSION),2.17)
22 BINUTILS_SITE:=$(BR2_GNU_MIRROR)/binutils/
23 endif
24 ifeq ($(BINUTILS_VERSION),2.16)
25 BINUTILS_SITE:=$(BR2_GNU_MIRROR)/binutils/
26 BINUTILS_NO_MPFR:=y
27 endif
28 ifeq ($(BINUTILS_VERSION),2.16.1)
29 BINUTILS_SITE:=$(BR2_GNU_MIRROR)/binutils/
30 BINUTILS_NO_MPFR:=y
31 endif
32 ifeq ($(BINUTILS_VERSION),2.15)
33 BINUTILS_SITE:=$(BR2_GNU_MIRROR)/binutils/
34 BINUTILS_NO_MPFR:=y
35 endif
36 ifeq ($(BINUTILS_VERSION),2.14)
37 BINUTILS_SITE:=$(BR2_GNU_MIRROR)/binutils/
38 BINUTILS_NO_MPFR:=y
39 endif
40 ifeq ($(BINUTILS_VERSION),2.13)
41 BINUTILS_SITE:=$(BR2_GNU_MIRROR)/binutils/
42 BINUTILS_NO_MPFR:=y
43 endif
44 ifeq ($(BINUTILS_VERSION),2.15.97)
45 BINUTILS_SITE:=ftp://sources.redhat.com/pub/binutils/snapshots/
46 BINUTILS_NO_MPFR:=y
47 endif
49 # We do not rely on the host's gmp/mpfr but use a known working one
50 BINUTILS_HOST_PREREQ:=
51 BINUTILS_TARGET_PREREQ:=
53 ifeq ($(findstring x3.,x$(GCC_VERSION)),x3.)
54 BINUTILS_NO_MPFR:=y
55 endif
56 ifeq ($(findstring x4.0,x$(GCC_VERSION)),x4.0)
57 BINUTILS_NO_MPFR:=y
58 endif
60 ifndef BINUTILS_NO_MPFR
61 BINUTILS_HOST_PREREQ:=$(TOOL_BUILD_DIR)/gmp/lib/libgmp$(HOST_SHREXT) \
62 $(TOOL_BUILD_DIR)/mpfr/lib/libmpfr$(HOST_SHREXT)
64 BINUTILS_TARGET_PREREQ:=$(TARGET_DIR)/usr/lib/libgmp$(LIBTGTEXT) \
65 $(TARGET_DIR)/usr/lib/libmpfr$(LIBTGTEXT)
67 EXTRA_BINUTILS_CONFIG_OPTIONS+=--with-gmp="$(GMP_HOST_DIR)"
68 EXTRA_BINUTILS_CONFIG_OPTIONS+=--with-mpfr="$(MPFR_HOST_DIR)"
70 BINUTILS_TARGET_CONFIG_OPTIONS=--with-gmp="$(GMP_TARGET_DIR)"
71 BINUTILS_TARGET_CONFIG_OPTIONS+=--with-mpfr="$(MPFR_TARGET_DIR)"
72 endif
74 EXTRA_BINUTILS_CONFIG_OPTIONS+=$(BR2_MAYBE_USE_INTERWORKING)
75 BINUTILS_TARGET_CONFIG_OPTIONS+=$(BR2_MAYBE_USE_INTERWORKING)
77 BINUTILS_OFFICIAL_VERSION:=$(BINUTILS_VERSION)$(VENDOR_SUFFIX)$(VENDOR_BINUTILS_RELEASE)
78 ifeq ($(BR2_TOOLCHAIN_BUILDROOT),y)
79 BINUTILS_PATCH_DIR:=toolchain/binutils/$(BINUTILS_VERSION)
80 else # ifeq ($(BR2_TOOLCHAIN_EXTERNAL_SOURCE),)
81 BINUTILS_SITE:=$(VENDOR_SITE)
82 BINUTILS_PATCH_DIR:=$(VENDOR_PATCH_DIR)/binutils-$(BINUTILS_OFFICIAL_VERSION)
83 endif
85 BINUTILS_SOURCE:=binutils-$(BINUTILS_OFFICIAL_VERSION).tar.bz2
86 BINUTILS_DIR:=$(TOOL_BUILD_DIR)/binutils-$(BINUTILS_OFFICIAL_VERSION)
87 BINUTILS_CAT:=$(BZCAT)
89 BINUTILS_DIR1:=$(TOOL_BUILD_DIR)/binutils-$(BINUTILS_VERSION)-build
91 $(DL_DIR)/$(BINUTILS_SOURCE):
92 mkdir -p $(DL_DIR)
93 $(WGET) -P $(DL_DIR) $(BINUTILS_SITE)/$(BINUTILS_SOURCE)
95 binutils-unpacked: $(BINUTILS_DIR)/.patched
96 $(BINUTILS_DIR)/.unpacked: $(DL_DIR)/$(BINUTILS_SOURCE)
97 mkdir -p $(TOOL_BUILD_DIR)
98 rm -rf $(BINUTILS_DIR)
99 $(BINUTILS_CAT) $(DL_DIR)/$(BINUTILS_SOURCE) | tar -C $(TOOL_BUILD_DIR) $(TAR_OPTIONS) -
100 $(CONFIG_UPDATE) $(@D)
101 touch $@
103 $(BINUTILS_DIR)/.patched: $(BINUTILS_DIR)/.unpacked
104 # Apply appropriate binutils patches.
105 toolchain/patch-kernel.sh $(BINUTILS_DIR) $(BINUTILS_PATCH_DIR) \*.patch
106 touch $@
108 $(BINUTILS_DIR1)/.configured: $(BINUTILS_DIR)/.patched
109 mkdir -p $(BINUTILS_DIR1)
110 (cd $(BINUTILS_DIR1); rm -rf config.cache; \
111 $(HOST_CONFIGURE_OPTS) \
112 $(BINUTILS_DIR)/configure \
113 --prefix=$(BR2_SYSROOT_PREFIX)/usr \
114 --build=$(GNU_HOST_NAME) \
115 --host=$(GNU_HOST_NAME) \
116 --target=$(REAL_GNU_TARGET_NAME) \
117 --mandir=/usr/share/man \
118 --infodir=/usr/share/info \
119 $(BR2_CONFIGURE_DEVEL_SYSROOT) \
120 $(BR2_CONFIGURE_STAGING_SYSROOT) \
121 $(DISABLE_NLS) \
122 $(MULTILIB) \
123 --disable-werror \
124 $(SOFT_FLOAT_CONFIG_OPTION) \
125 $(EXTRA_BINUTILS_CONFIG_OPTIONS) \
127 touch $@
129 $(BINUTILS_DIR1)/binutils/objdump: $(BINUTILS_DIR1)/.configured
130 $(MAKE) -C $(BINUTILS_DIR1) all
132 # Make install will put gettext data in staging_dir/share/locale.
133 # Unfortunatey, it isn't configureable.
134 $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-ld: $(BINUTILS_DIR1)/binutils/objdump
135 $(MAKE) -C $(BINUTILS_DIR1) $(BR2_SYSROOT_STAGING_DESTDIR) install
136 # tooldir=/usr build_tooldir=/usr install
137 #rm -f $(STAGING_DIR)/usr/bin/{ar,as,ld,nm,objdump,ranlib,strip}
139 binutils: libc-configured $(BINUTILS_HOST_PREREQ) $(STAGING_DIR)/usr/bin/$(REAL_GNU_TARGET_NAME)-ld
141 binutils-source: $(DL_DIR)/$(BINUTILS_SOURCE)
143 binutils-clean:
144 -$(MAKE) -C $(BINUTILS_DIR1) DESTDIR=$(STAGING_DIR) \
145 tooldir=/usr build_tooldir=/usr uninstall
146 -$(MAKE) -C $(BINUTILS_DIR1) clean
147 rm -rf $(wildcard $(patsubst %,$(STAGING_DIR)/usr/bin/*%,ar as ld nm objdump ranlib strip c++filt)) \
148 $(wildcard $(patsubst %,$(STAGING_DIR)/usr/lib/%*,libiberty ldscripts))
150 binutils-dirclean:
151 rm -rf $(BINUTILS_DIR1)
153 binutils-src-dirclean:
154 rm -rf $(BINUTILS_DIR)
156 #############################################################
158 # build binutils for use on the target system
160 #############################################################
161 BINUTILS_DIR2:=$(BUILD_DIR)/binutils-$(BINUTILS_VERSION)-target
162 $(BINUTILS_DIR2)/.configured: $(BINUTILS_DIR)/.patched
163 mkdir -p $(BINUTILS_DIR2)
164 (cd $(BINUTILS_DIR2); rm -rf config.cache; \
165 $(TARGET_CONFIGURE_OPTS) \
166 $(BINUTILS_DIR)/configure \
167 --prefix=/usr \
168 --exec-prefix=/usr \
169 --build=$(GNU_HOST_NAME) \
170 --host=$(REAL_GNU_TARGET_NAME) \
171 --target=$(REAL_GNU_TARGET_NAME) \
172 --mandir=/usr/share/man \
173 --infodir=/usr/share/info \
174 $(DISABLE_NLS) \
175 $(MULTILIB) \
176 $(BINUTILS_TARGET_CONFIG_OPTIONS) \
177 --disable-werror \
178 $(SOFT_FLOAT_CONFIG_OPTION) \
180 touch $@
182 $(BINUTILS_DIR2)/binutils/objdump: $(BINUTILS_DIR2)/.configured
183 PATH=$(TARGET_PATH) $(MAKE) -C $(BINUTILS_DIR2) all
185 $(TARGET_DIR)/usr/bin/ld: $(BINUTILS_DIR2)/binutils/objdump
186 PATH=$(TARGET_PATH) \
187 $(MAKE) DESTDIR=$(TARGET_DIR) \
188 tooldir=/usr build_tooldir=/usr \
189 -C $(BINUTILS_DIR2) install
190 ifneq ($(BR2_HAVE_MANPAGES),y)
191 rm -rf $(TARGET_DIR)/usr/man
192 endif
193 ifneq ($(BR2_HAVE_INFOPAGES),y)
194 rm -rf $(TARGET_DIR)/usr/info
195 endif
196 rm -rf $(TARGET_DIR)/share/locale $(TARGET_DIR)/usr/share/doc
197 -$(STRIPCMD) $(TARGET_DIR)/usr/$(REAL_GNU_TARGET_NAME)/bin/* > /dev/null 2>&1
198 -$(STRIPCMD) $(TARGET_DIR)/usr/bin/* > /dev/null 2>&1
200 binutils_target: $(BINUTILS_TARGET_PREREQ) $(TARGET_DIR)/usr/bin/ld
202 binutils_target-clean:
203 -$(MAKE) -C $(BINUTILS_DIR2) clean
204 rm -f $(TARGET_DIR)/bin/$(REAL_GNU_TARGET_NAME)* \
205 $(addprefix $(TARGET_DIR)/usr/bin/, addr2line ar as gprof ld nm objcopy objdump ranlib readelf size strings strip c++filt)
207 binutils_target-dirclean:
208 rm -rf $(BINUTILS_DIR2)