1 #############################################################
3 # build binutils for use on the host system
5 #############################################################
6 BINUTILS_VERSION
:=$(subst ",,$(BR2_BINUTILS_VERSION))
9 EXTRA_BINUTILS_CONFIG_OPTIONS
=$(strip $(subst ",, $(BR2_EXTRA_BINUTILS_CONFIG_OPTIONS)))
11 BINUTILS_SITE
:=$(BR2_KERNEL_MIRROR
)/linux
/devel
/binutils
12 ifeq ($(BINUTILS_VERSION
),2.19.1)
13 BINUTILS_SITE
:=$(BR2_GNU_MIRROR
)/binutils
/
15 ifeq ($(BINUTILS_VERSION
),2.19)
16 BINUTILS_SITE
:=$(BR2_GNU_MIRROR
)/binutils
/
18 ifeq ($(BINUTILS_VERSION
),2.18)
19 BINUTILS_SITE
:=$(BR2_GNU_MIRROR
)/binutils
/
21 ifeq ($(BINUTILS_VERSION
),2.17)
22 BINUTILS_SITE
:=$(BR2_GNU_MIRROR
)/binutils
/
24 ifeq ($(BINUTILS_VERSION
),2.16)
25 BINUTILS_SITE
:=$(BR2_GNU_MIRROR
)/binutils
/
28 ifeq ($(BINUTILS_VERSION
),2.16.1)
29 BINUTILS_SITE
:=$(BR2_GNU_MIRROR
)/binutils
/
32 ifeq ($(BINUTILS_VERSION
),2.15)
33 BINUTILS_SITE
:=$(BR2_GNU_MIRROR
)/binutils
/
36 ifeq ($(BINUTILS_VERSION
),2.14)
37 BINUTILS_SITE
:=$(BR2_GNU_MIRROR
)/binutils
/
40 ifeq ($(BINUTILS_VERSION
),2.13)
41 BINUTILS_SITE
:=$(BR2_GNU_MIRROR
)/binutils
/
44 ifeq ($(BINUTILS_VERSION
),2.15.97)
45 BINUTILS_SITE
:=ftp
://sources.redhat.com
/pub
/binutils
/snapshots
/
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.
)
56 ifeq ($(findstring x4.0
,x
$(GCC_VERSION
)),x4.0
)
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)"
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
)
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
):
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
)
103 $(BINUTILS_DIR
)/.patched
: $(BINUTILS_DIR
)/.unpacked
104 # Apply appropriate binutils patches.
105 toolchain
/patch-kernel.sh
$(BINUTILS_DIR
) $(BINUTILS_PATCH_DIR
) \
*.patch
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
) \
124 $(SOFT_FLOAT_CONFIG_OPTION
) \
125 $(EXTRA_BINUTILS_CONFIG_OPTIONS
) \
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
)
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
))
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 \
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 \
176 $(BINUTILS_TARGET_CONFIG_OPTIONS
) \
178 $(SOFT_FLOAT_CONFIG_OPTION
) \
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
193 ifneq ($(BR2_HAVE_INFOPAGES
),y
)
194 rm -rf
$(TARGET_DIR
)/usr
/info
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
)