1 #############################################################
3 # build binutils for use on the host system
5 #############################################################
6 BINUTILS_VERSION
:=$(strip $(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.18)
13 BINUTILS_SITE
:=$(BR2_GNU_MIRROR
)/binutils
/
15 ifeq ($(BINUTILS_VERSION
),2.17)
16 BINUTILS_SITE
:=$(BR2_GNU_MIRROR
)/binutils
/
18 ifeq ($(BINUTILS_VERSION
),2.16)
19 BINUTILS_SITE
:=$(BR2_GNU_MIRROR
)/binutils
/
22 ifeq ($(BINUTILS_VERSION
),2.16.1)
23 BINUTILS_SITE
:=$(BR2_GNU_MIRROR
)/binutils
/
26 ifeq ($(BINUTILS_VERSION
),2.15)
27 BINUTILS_SITE
:=$(BR2_GNU_MIRROR
)/binutils
/
30 ifeq ($(BINUTILS_VERSION
),2.14)
31 BINUTILS_SITE
:=$(BR2_GNU_MIRROR
)/binutils
/
34 ifeq ($(BINUTILS_VERSION
),2.13)
35 BINUTILS_SITE
:=$(BR2_GNU_MIRROR
)/binutils
/
38 ifeq ($(BINUTILS_VERSION
),2.15.97)
39 BINUTILS_SITE
:=ftp
://sources.redhat.com
/pub
/binutils
/snapshots
/
43 # We do not rely on the host's gmp/mpfr but use a known working one
44 BINUTILS_HOST_PREREQ
:=
45 BINUTILS_TARGET_PREREQ
:=
47 ifeq ($(findstring x3.
,x
$(GCC_VERSION
)),x3.
)
50 ifeq ($(findstring x4.0
,x
$(GCC_VERSION
)),x4.0
)
54 ifndef BINUTILS_NO_MPFR
55 BINUTILS_HOST_PREREQ
:=$(TOOL_BUILD_DIR
)/gmp
/lib
/libgmp
$(HOST_SHREXT
) \
56 $(TOOL_BUILD_DIR
)/mpfr
/lib
/libmpfr
$(HOST_SHREXT
)
58 BINUTILS_TARGET_PREREQ
:=$(TARGET_DIR
)/usr
/lib
/libgmp
$(LIBTGTEXT
) \
59 $(TARGET_DIR
)/usr
/lib
/libmpfr
$(LIBTGTEXT
)
61 EXTRA_BINUTILS_CONFIG_OPTIONS
+=--with-gmp
="$(GMP_HOST_DIR)"
62 EXTRA_BINUTILS_CONFIG_OPTIONS
+=--with-mpfr
="$(MPFR_HOST_DIR)"
64 BINUTILS_TARGET_CONFIG_OPTIONS
=--with-gmp
="$(GMP_TARGET_DIR)"
65 BINUTILS_TARGET_CONFIG_OPTIONS
+=--with-mpfr
="$(MPFR_TARGET_DIR)"
68 ifeq ($(BR2_INTERWORKING_SUPPORT
),y
)
69 EXTRA_BINUTILS_CONFIG_OPTIONS
+=--enable-interwork
70 BINUTILS_TARGET_CONFIG_OPTIONS
+=--enable-interwork
73 BINUTILS_OFFICIAL_VERSION
:=$(BINUTILS_VERSION
)$(VENDOR_SUFFIX
)$(VENDOR_BINUTILS_RELEASE
)
74 ifeq ($(BR2_TOOLCHAIN_BUILDROOT
),y
)
75 BINUTILS_PATCH_DIR
:=toolchain
/binutils
/$(BINUTILS_VERSION
)
76 else # ifeq ($(BR2_TOOLCHAIN_EXTERNAL_SOURCE),)
77 BINUTILS_SITE
:=$(VENDOR_SITE
)
78 BINUTILS_PATCH_DIR
:=$(VENDOR_PATCH_DIR
)/binutils-
$(BINUTILS_OFFICIAL_VERSION
)
81 BINUTILS_SOURCE
:=binutils-
$(BINUTILS_OFFICIAL_VERSION
).
tar.bz2
82 BINUTILS_DIR
:=$(TOOL_BUILD_DIR
)/binutils-
$(BINUTILS_OFFICIAL_VERSION
)
83 BINUTILS_CAT
:=$(BZCAT
)
85 BINUTILS_DIR1
:=$(TOOL_BUILD_DIR
)/binutils-
$(BINUTILS_VERSION
)-build
87 $(DL_DIR
)/$(BINUTILS_SOURCE
):
89 $(WGET
) -P
$(DL_DIR
) $(BINUTILS_SITE
)/$(BINUTILS_SOURCE
)
91 binutils-unpacked
: $(BINUTILS_DIR
)/.patched
92 $(BINUTILS_DIR
)/.unpacked
: $(DL_DIR
)/$(BINUTILS_SOURCE
)
93 mkdir
-p
$(TOOL_BUILD_DIR
)
94 rm -rf
$(BINUTILS_DIR
)
95 $(BINUTILS_CAT
) $(DL_DIR
)/$(BINUTILS_SOURCE
) |
tar -C
$(TOOL_BUILD_DIR
) $(TAR_OPTIONS
) -
96 $(CONFIG_UPDATE
) $(@D
)
99 $(BINUTILS_DIR
)/.patched
: $(BINUTILS_DIR
)/.unpacked
100 # Apply appropriate binutils patches.
101 toolchain
/patch-kernel.sh
$(BINUTILS_DIR
) $(BINUTILS_PATCH_DIR
) \
*.patch
104 $(BINUTILS_DIR1
)/.configured
: $(BINUTILS_DIR
)/.patched
105 mkdir
-p
$(BINUTILS_DIR1
)
106 (cd
$(BINUTILS_DIR1
); rm -rf config.cache
; \
107 $(HOST_CONFIGURE_OPTS
) \
108 $(BINUTILS_DIR
)/configure \
109 --prefix=$(BR2_SYSROOT_PREFIX
)/usr \
110 --build
=$(GNU_HOST_NAME
) \
111 --host
=$(GNU_HOST_NAME
) \
112 --target
=$(REAL_GNU_TARGET_NAME
) \
113 --mandir=/usr
/share
/man \
114 --infodir=/usr
/share
/info \
115 $(BR2_CONFIGURE_DEVEL_SYSROOT
) \
116 $(BR2_CONFIGURE_STAGING_SYSROOT
) \
120 $(SOFT_FLOAT_CONFIG_OPTION
) \
121 $(EXTRA_BINUTILS_CONFIG_OPTIONS
) \
125 $(BINUTILS_DIR1
)/binutils
/objdump
: $(BINUTILS_DIR1
)/.configured
126 $(MAKE
) -C
$(BINUTILS_DIR1
) all
128 # Make install will put gettext data in staging_dir/share/locale.
129 # Unfortunatey, it isn't configureable.
130 $(STAGING_DIR
)/usr
/bin
/$(REAL_GNU_TARGET_NAME
)-ld: $(BINUTILS_DIR1
)/binutils
/objdump
131 $(MAKE
) -C
$(BINUTILS_DIR1
) $(BR2_SYSROOT_STAGING_DESTDIR
) install
132 # tooldir=/usr build_tooldir=/usr install
133 #rm -f $(STAGING_DIR)/usr/bin/{ar,as,ld,nm,objdump,ranlib,strip}
135 binutils
: uclibc-configured
$(BINUTILS_HOST_PREREQ
) $(STAGING_DIR
)/usr
/bin
/$(REAL_GNU_TARGET_NAME
)-ld
137 binutils-source
: $(DL_DIR
)/$(BINUTILS_SOURCE
)
140 -$(MAKE
) -C
$(BINUTILS_DIR1
) DESTDIR
=$(STAGING_DIR
) \
141 tooldir
=/usr build_tooldir
=/usr
uninstall
142 -$(MAKE
) -C
$(BINUTILS_DIR1
) clean
143 rm -rf
$(wildcard $(patsubst %,$(STAGING_DIR
)/usr
/bin
/*%,ar as ld nm objdump ranlib
strip c
++filt
)) \
144 $(wildcard $(patsubst %,$(STAGING_DIR
)/usr
/lib
/%*,libiberty ldscripts
))
147 rm -rf
$(BINUTILS_DIR1
)
150 #############################################################
152 # build binutils for use on the target system
154 #############################################################
155 BINUTILS_DIR2
:=$(BUILD_DIR
)/binutils-
$(BINUTILS_VERSION
)-target
156 $(BINUTILS_DIR2
)/.configured
: $(BINUTILS_DIR
)/.patched
157 mkdir
-p
$(BINUTILS_DIR2
)
158 (cd
$(BINUTILS_DIR2
); rm -rf config.cache
; \
159 $(TARGET_CONFIGURE_OPTS
) \
160 $(BINUTILS_DIR
)/configure \
163 --build
=$(GNU_HOST_NAME
) \
164 --host
=$(REAL_GNU_TARGET_NAME
) \
165 --target
=$(REAL_GNU_TARGET_NAME
) \
166 --mandir=/usr
/share
/man \
167 --infodir=/usr
/share
/info \
170 $(BINUTILS_TARGET_CONFIG_OPTIONS
) \
172 $(SOFT_FLOAT_CONFIG_OPTION
) \
176 $(BINUTILS_DIR2
)/binutils
/objdump
: $(BINUTILS_DIR2
)/.configured
177 PATH
=$(TARGET_PATH
) $(MAKE
) -C
$(BINUTILS_DIR2
) all
179 $(TARGET_DIR
)/usr
/bin
/ld: $(BINUTILS_DIR2
)/binutils
/objdump
180 PATH
=$(TARGET_PATH
) \
181 $(MAKE
) DESTDIR
=$(TARGET_DIR
) \
182 tooldir
=/usr build_tooldir
=/usr \
183 -C
$(BINUTILS_DIR2
) install
184 ifneq ($(BR2_HAVE_MANPAGES
),y
)
185 rm -rf
$(TARGET_DIR
)/usr
/man
187 ifneq ($(BR2_HAVE_INFOPAGES
),y
)
188 rm -rf
$(TARGET_DIR
)/usr
/info
190 rm -rf
$(TARGET_DIR
)/share
/locale
$(TARGET_DIR
)/usr
/share
/doc
191 -$(STRIPCMD
) $(TARGET_DIR
)/usr
/$(REAL_GNU_TARGET_NAME
)/bin
/* > /dev
/null
2>&1
192 -$(STRIPCMD
) $(TARGET_DIR
)/usr
/bin
/* > /dev
/null
2>&1
194 binutils_target
: $(BINUTILS_TARGET_PREREQ
) $(TARGET_DIR
)/usr
/bin
/ld
196 binutils_target-clean
:
197 -$(MAKE
) -C
$(BINUTILS_DIR2
) clean
198 rm -f
$(TARGET_DIR
)/bin
/$(REAL_GNU_TARGET_NAME
)* \
199 $(addprefix $(TARGET_DIR
)/usr
/bin
/, addr2line
ar as gprof
ld nm objcopy objdump ranlib readelf size strings
strip c
++filt
)
201 binutils_target-dirclean
:
202 rm -rf
$(BINUTILS_DIR2
)