3 %define rpmprefix %{nil}
6 %define build_alpha %{build_all}
7 %define build_arm %{build_all}
8 %define build_aarch64 %{build_all}
9 %define build_avr32 %{build_all}
10 %define build_blackfin %{build_all}
11 %define build_c6x %{build_all}
12 %define build_cris %{build_all}
13 %define build_frv %{build_all}
14 %define build_h8300 %{build_all}
15 %define build_hppa %{build_all}
16 %define build_hppa64 %{build_all}
17 %define build_ia64 %{build_all}
18 %define build_m32r %{build_all}
19 %define build_m68k %{build_all}
20 %define build_metag %{build_all}
21 %define build_microblaze %{build_all}
22 %define build_mips64 %{build_all}
23 %define build_mn10300 %{build_all}
24 %define build_nios2 %{build_all}
25 %define build_openrisc %{build_all}
26 %define build_powerpc64 %{build_all}
27 %define build_s390x %{build_all}
28 %define build_score %{build_all}
29 %define build_sh %{build_all}
30 %define build_sh64 %{build_all}
31 %define build_sparc64 %{build_all}
32 %define build_tile %{build_all}
33 %define build_x86_64 %{build_all}
34 %define build_xtensa %{build_all}
36 # 32-bit packages we don't build as we can use the 64-bit package instead
39 %define build_powerpc 0
44 # not available in binutils-2.24
45 %define build_hexagon 0
46 %define build_unicore32 0
48 Summary: A GNU collection of cross-compilation binary utilities
49 Name: %{cross}-binutils
53 Group: Development/Tools
54 URL: http://sources.redhat.com/binutils
55 # Note - the Linux Kernel binutils releases are too unstable and contain too
56 # many controversial patches so we stick with the official FSF version
58 Source0: http://ftp.gnu.org/gnu/binutils/binutils-%{version}.tar.bz2
59 # Source0-md5: d9f3303f802a5b6b0bb73a335ab89d66
60 Source2: binutils-2.19.50.0.1-output-format.sed
61 # Bring up to date with what's in the git release branch
62 #Patch00: binutils-2.24-cde98f8566e14f52b896abc92c357cdd14717505.patch
63 Patch01: binutils-2.20.51.0.2-libtool-lib64.patch
64 Patch02: binutils-2.20.51.0.10-ppc64-pie.patch
65 Patch03: binutils-2.20.51.0.2-ia64-lib64.patch
66 Patch04: binutils-2.25-version.patch
67 Patch05: binutils-2.25-set-long-long.patch
68 Patch06: binutils-2.20.51.0.10-copy-osabi.patch
69 Patch07: binutils-2.20.51.0.10-sec-merge-emit.patch
70 # Enable -zrelro by default: BZ #621983
71 Patch08: binutils-2.22.52.0.1-relro-on-by-default.patch
72 # Local patch - export demangle.h with the binutils-devel rpm.
73 Patch09: binutils-2.22.52.0.1-export-demangle.h.patch
74 # Disable checks that config.h has been included before system headers. BZ #845084
75 Patch10: binutils-2.22.52.0.4-no-config-h-check.patch
76 # Fix addr2line to use the dynamic symbol table if it could not find any ordinary symbols.
77 Patch11: binutils-2.23.52.0.1-addr2line-dynsymtab.patch
78 Patch12: binutils-2.25-kernel-ld-r.patch
79 # Correct bug introduced by patch 12
80 Patch13: binutils-2.23.2-aarch64-em.patch
81 # Fix detections little endian PPC shared libraries
82 Patch14: binutils-2.24-ldforcele.patch
85 BuildRequires: gettext
86 BuildRequires: texinfo >= 4.0
87 BuildRequires: zlib-devel
88 # BZ 920545: We need pod2man in order to build the manual pages.
89 BuildRequires: /usr/bin/pod2man
90 # Required for: ld-bootstrap/bootstrap.exp bootstrap with --static
91 # It should not be required for: ld-elf/elf.exp static {preinit,init,fini} array
92 Conflicts: gcc-c++ < 4.0.0
94 Obsoletes: gnupro <= 1117-1
96 Provides: bundled(libiberty)
97 BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
99 # Where the binaries aimed at gcc will live (ie. /usr/<target>/bin/)
100 %define auxbin_prefix %{_exec_prefix}
101 %define srcdir binutils-%{version}
104 Binutils is a collection of binary utilities, including ar (for
105 creating, modifying and extracting from archives), as (a family of GNU
106 assemblers), gprof (for displaying call graph profile data), ld (the
107 GNU linker), nm (for listing symbols from object files), objcopy (for
108 copying and translating object files), objdump (for displaying
109 information from object files), ranlib (for generating an index for
110 the contents of an archive), readelf (for displaying detailed
111 information about binary files), size (for listing the section sizes
112 of an object or archive file), strings (for listing printable strings
113 from files), strip (for discarding symbols), and addr2line (for
114 converting addresses to file and line).
116 %package -n %{cross}-binutils-common
117 Summary: Cross-build binary utility documentation and translation files
118 Group: Development/Tools
119 %if "%{_rpmversion}" >= "5"
123 %description -n %{cross}-binutils-common
124 Documentation, manual pages and translation files for cross-build
125 binary image generation, manipulation and query tools.
127 %define do_package() \
128 %package -n %{rpmprefix}binutils-%1 \
129 Summary: Cross-build binary utilities for %1 \
130 Group: Development/Tools \
131 Requires: %{cross}-binutils-common = %{version}-%{release}\
133 %description -n %{rpmprefix}binutils-%1 \
134 Cross-build binary image generation, manipulation and query tools. \
136 %define do_symlink() \
137 %package -n %{rpmprefix}binutils-%1 \
138 Summary: Cross-build binary utilities for %1 \
139 Group: Development/Tools \
140 Requires: binutils-%3 = %{version}-%{release}\
142 %description -n %{rpmprefix}binutils-%1 \
143 Cross-build binary image generation, manipulation and query tools. \
145 %do_package alpha-linux-gnu %{build_alpha}
146 %do_package arm-linux-gnu %{build_arm}
147 %do_package aarch64-linux-gnu %{build_aarch64}
148 %do_package avr32-linux-gnu %{build_avr32}
149 %do_package bfin-linux-gnu %{build_blackfin}
150 %do_package c6x-linux-gnu %{build_c6x}
151 %do_package cris-linux-gnu %{build_cris}
152 %do_package frv-linux-gnu %{build_frv}
153 %do_package h8300-linux-gnu %{build_h8300}
154 %do_package hexagon-linux-gnu %{build_hexagon}
155 %do_package hppa-linux-gnu %{build_hppa}
156 %do_package hppa64-linux-gnu %{build_hppa64}
157 %do_package i386-linux-gnu %{build_i386}
158 %do_package ia64-linux-gnu %{build_ia64}
159 %do_package m32r-linux-gnu %{build_m32r}
160 %do_package m68k-linux-gnu %{build_m68k}
161 %do_package metag-linux-gnu %{build_metag}
162 %do_package microblaze-linux-gnu %{build_microblaze}
163 %do_package mips-linux-gnu %{build_mips}
164 %do_package mips64-linux-gnu %{build_mips64}
165 %do_package mn10300-linux-gnu %{build_mn10300}
166 %do_package nios2-linux-gnu %{build_nios2}
167 %do_package openrisc-linux-gnu %{build_openrisc} or1k-linux-gnu
168 %do_package powerpc-linux-gnu %{build_powerpc}
169 %do_package powerpc64-linux-gnu %{build_powerpc64}
170 %do_symlink ppc-linux-gnu %{build_powerpc} powerpc-linux-gnu
171 %do_symlink ppc64-linux-gnu %{build_powerpc64} powerpc64-linux-gnu
172 %do_package s390-linux-gnu %{build_s390}
173 %do_package s390x-linux-gnu %{build_s390x}
174 %do_package score-linux-gnu %{build_score}
175 %do_package sh-linux-gnu %{build_sh}
176 %do_package sh4-linux-gnu %{build_sh4}
177 %do_package sh64-linux-gnu %{build_sh64}
178 %do_package sparc-linux-gnu %{build_sparc}
179 %do_package sparc64-linux-gnu %{build_sparc64}
180 %do_package tile-linux-gnu %{build_tile}
181 %do_package unicore32-linux-gnu %{build_unicore32}
182 %do_package x86_64-linux-gnu %{build_x86_64}
183 %do_package xtensa-linux-gnu %{build_xtensa}
189 #%patch00 -p1 -b .latest-git~
193 %if "%{_lib}" == "lib64"
210 # We cannot run autotools as there is an exact requirement of autoconf-2.59.
212 # On ppc64 we might use 64KiB pages
213 sed -i -e '/#define.*ELF_COMMONPAGESIZE/s/0x1000$/0x10000/' bfd/elf*ppc.c
215 perl -pi -e 's/i\[3-7\]86/i[34567]86/g' */conf*
216 sed -i -e 's/%''{release}/%{release}/g' bfd/Makefile{.am,.in}
217 sed -i -e '/^libopcodes_la_\(DEPENDENCIES\|LIBADD\)/s,$, ../bfd/libbfd.la,' opcodes/Makefile.{am,in}
218 # Build libbfd.so and libopcodes.so with -Bsymbolic-functions if possible.
219 if gcc %{optflags} -v --help 2>&1 | grep -q -- -Bsymbolic-functions; then
220 sed -i -e 's/^libbfd_la_LDFLAGS = /&-Wl,-Bsymbolic-functions /' bfd/Makefile.{am,in}
221 sed -i -e 's/^libopcodes_la_LDFLAGS = /&-Wl,-Bsymbolic-functions /' opcodes/Makefile.{am,in}
224 # $PACKAGE is used for the gettext catalog name.
225 sed -i -e 's/^ PACKAGE=/ PACKAGE=%{cross}-/' */configure
226 # Undo the name change to run the testsuite.
227 for tool in binutils gas ld; do
228 sed -i -e "2aDEJATOOL = $tool" $tool/Makefile.am
229 sed -i -e "s/^DEJATOOL = .*/DEJATOOL = $tool/" $tool/Makefile.in
237 if [ $cond != 0 ]; then
244 prep_target alpha-linux-gnu %{build_alpha}
245 prep_target arm-linux-gnu %{build_arm}
246 prep_target aarch64-linux-gnu %{build_aarch64}
247 prep_target avr32-linux-gnu %{build_avr32}
248 prep_target bfin-linux-gnu %{build_blackfin}
249 prep_target c6x-linux-gnu %{build_c6x}
250 prep_target cris-linux-gnu %{build_cris}
251 prep_target frv-linux-gnu %{build_frv}
252 prep_target h8300-linux-gnu %{build_h8300}
253 prep_target hexagon-linux-gnu %{build_hexagon}
254 prep_target hppa-linux-gnu %{build_hppa}
255 prep_target hppa64-linux-gnu %{build_hppa64}
256 prep_target i386-linux-gnu %{build_i386}
257 prep_target ia64-linux-gnu %{build_ia64}
258 prep_target m32r-linux-gnu %{build_m32r}
259 prep_target m68k-linux-gnu %{build_m68k}
260 prep_target metag-linux-gnu %{build_metag}
261 prep_target microblaze-linux-gnu %{build_microblaze}
262 prep_target mips-linux-gnu %{build_mips}
263 prep_target mips64-linux-gnu %{build_mips64}
264 prep_target mn10300-linux-gnu %{build_mn10300}
265 prep_target nios2-linux-gnu %{build_nios2}
266 prep_target openrisc-linux-gnu %{build_openrisc}
267 prep_target powerpc-linux-gnu %{build_powerpc}
268 prep_target powerpc64-linux-gnu %{build_powerpc64}
269 prep_target s390-linux-gnu %{build_s390}
270 prep_target s390x-linux-gnu %{build_s390x}
271 prep_target score-linux-gnu %{build_score}
272 prep_target sh-linux-gnu %{build_sh}
273 prep_target sh4-linux-gnu %{build_sh4}
274 prep_target sh64-linux-gnu %{build_sh64}
275 prep_target sparc-linux-gnu %{build_sparc}
276 prep_target sparc64-linux-gnu %{build_sparc64}
277 prep_target tile-linux-gnu %{build_tile}
278 prep_target unicore32-linux-gnu %{build_unicore32}
279 prep_target x86_64-linux-gnu %{build_x86_64}
280 prep_target xtensa-linux-gnu %{build_xtensa}
284 for target in $(cat target.list); do
289 echo >&2 "No targets selected"
301 arm-*) target=arm-linux-gnueabi;;
302 aarch64-*) target=aarch64-linux-gnu;;
303 avr32-*) target=avr-linux;;
304 bfin-*) target=bfin-uclinux;;
305 c6x-*) target=c6x-uclinux;;
306 h8300-*) target=h8300-elf;;
307 m32r-*) target=m32r-elf;;
308 mn10300-*) target=am33_2.0-linux;;
309 m68knommu-*) target=m68k-linux;;
310 openrisc-*) target=or1k-linux-gnu;;
311 parisc-*) target=hppa-linux;;
312 score-*) target=score-elf;;
313 sh64-*) target=sh64-linux;;
314 tile-*) target=tilegx-linux;;
315 v850-*) target=v850e-linux;;
316 x86-*) target=x86_64-linux;;
320 echo $arch: target is $target
321 export CFLAGS="$RPM_OPT_FLAGS"
324 case $target in i?86*|sparc*|ppc*|s390*|sh*|arm*)
325 CARGS="$CARGS --enable-64-bit-bfd"
329 case $target in ia64*)
330 CARGS="$CARGS --enable-targets=i386-linux"
334 case $target in ppc*|ppc64*)
335 CARGS="$CARGS --enable-targets=spu"
339 case $target in sh-*)
340 CARGS="$CARGS --enable-targets=sh4-linux"
344 case $target in sh64*)
345 CARGS="$CARGS --enable-targets=sh64-linux,sh-elf,sh-linux,sh4-linux"
352 # We could optimize the cross builds size by --enable-shared but the produced
353 # binaries may be less convenient in the embedded environment.
354 LDFLAGS="-Wl,-z,relro " \
355 ../%{srcdir}/configure \
356 --disable-dependency-tracking \
357 --disable-silent-rules \
359 --prefix=%{_prefix} \
360 --exec-prefix=%{auxbin_prefix} \
361 --bindir=%{_bindir} \
362 --sbindir=%{_sbindir} \
363 --sysconfdir=%{_sysconfdir} \
364 --datadir=%{_datadir} \
365 --includedir=%{_includedir} \
366 --libdir=%{_libdir} \
367 --libexecdir=%{_libexecdir} \
368 --localstatedir=%{_localstatedir} \
369 --sharedstatedir=%{_sharedstatedir} \
370 --mandir=%{_mandir} \
371 --infodir=%{_infodir} \
372 --build=%{_target_platform} \
373 --host=%{_target_platform} \
375 --program-prefix=$prefix \
377 --disable-install_libbfd \
378 --with-sysroot=%{_prefix}/$arch/sys-root \
380 --with-bugurl="http://bugs.pld-linux.org"
384 for target in $(cat target.list); do
385 config_target $target
390 make -C $build_dir %{_smp_mflags} tooldir=%{_prefix} all
393 for target in $(cat target.list); do
397 # for documentation purposes only
398 mkdir %{cross}-binutils
400 ../%{srcdir}/configure \
401 --disable-dependency-tracking \
402 --disable-silent-rules \
403 --prefix=%{_prefix} \
404 --exec-prefix=%{auxbin_prefix} \
405 --bindir=%{_bindir} \
406 --sbindir=%{_sbindir} \
407 --sysconfdir=%{_sysconfdir} \
408 --datadir=%{_datadir} \
409 --includedir=%{_includedir} \
410 --libdir=%{_libdir} \
411 --libexecdir=%{_libexecdir} \
412 --localstatedir=%{_localstatedir} \
413 --sharedstatedir=%{_sharedstatedir} \
414 --mandir=%{_mandir} \
415 --infodir=%{_infodir} \
416 --program-prefix=%{cross}- \
418 --with-bugurl="http://bugs.pld-linux.org"
420 %{__make} tooldir=%{_prefix} all
424 rm -rf $RPM_BUILD_ROOT
429 %{__make} install -C $build_dir DESTDIR=$RPM_BUILD_ROOT
431 # We want links for ppc and ppc64 also if we make powerpc or powerpc64
434 cd $RPM_BUILD_ROOT%{_bindir}
436 ln -s $i ppc${i#powerpc}
439 cd $RPM_BUILD_ROOT%{_prefix}
441 ln -s $i ppc${i#powerpc}
444 cd $RPM_BUILD_ROOT%{_mandir}/man1
446 ln -s $i ppc${i#powerpc}
453 for target in $(cat target.list); do
454 echo "=== INSTALL target $target ==="
455 install -d $RPM_BUILD_ROOT%{_prefix}/$target/sys-root
458 if [ $target = sh64-linux-gnu ]; then
459 ln -s %{auxbin_prefix}/sh64-elf $RPM_BUILD_ROOT%{auxbin_prefix}/sh64-linux
463 echo "=== INSTALL man targets ==="
464 %{__make} install-man1 -C %{cross}-binutils/binutils/doc DESTDIR=$RPM_BUILD_ROOT
465 %{__make} install-man1 -C %{cross}-binutils/gas/doc DESTDIR=$RPM_BUILD_ROOT
466 %{__make} install-man1 -C %{cross}-binutils/ld DESTDIR=$RPM_BUILD_ROOT
467 %{__make} install-man1 -C %{cross}-binutils/gprof DESTDIR=$RPM_BUILD_ROOT
469 echo "=== INSTALL po targets ==="
470 %{__make} install -C %{cross}-binutils/binutils/po DESTDIR=$RPM_BUILD_ROOT
471 %{__make} install -C %{cross}-binutils/gas/po DESTDIR=$RPM_BUILD_ROOT
472 %{__make} install -C %{cross}-binutils/ld/po DESTDIR=$RPM_BUILD_ROOT
473 %{__make} install -C %{cross}-binutils/gprof/po DESTDIR=$RPM_BUILD_ROOT
474 %{__make} install -C %{cross}-binutils/bfd/po DESTDIR=$RPM_BUILD_ROOT
475 %{__make} install -C %{cross}-binutils/opcodes/po DESTDIR=$RPM_BUILD_ROOT
477 # Add the additional symlink-only targets
478 grep ^powerpc target.list | sed -e s/powerpc/ppc/ > symlink-target.list
480 # For cross-binutils we drop the documentation.
481 echo "=== REMOVE documentation ==="
482 rm -rf $RPM_BUILD_ROOT%{_infodir}
483 rm -f $RPM_BUILD_ROOT%{_infodir}/dir
485 echo "=== REMOVE libraries and scripts ==="
486 rm -rf $RPM_BUILD_ROOT%{_libdir}/libiberty.a
487 rm -rf $RPM_BUILD_ROOT%{auxbin_prefix}/*/lib/ldscripts
488 rmdir $RPM_BUILD_ROOT%{auxbin_prefix}/*/lib || :
490 echo "=== BUILD file lists ==="
496 avr32) target_cpu=avr;;
497 bfin) target_cpu=bfin;;
498 h8300) target_cpu=h8300;;
499 mn10300) target_cpu=am33_2.0;;
500 openrisc) target_cpu=or1k;;
501 score) target_cpu=score;;
502 tile) target_cpu=tilegx;;
503 v850) target_cpu=v850e;;
508 echo "%%defattr(-,root,root,-)"
509 echo "%{_bindir}/$arch-[!l]*"
510 echo "%{_bindir}/$arch-ld*"
511 if [ -L $RPM_BUILD_ROOT%{auxbin_prefix}/$target_cpu-* ]; then
512 echo "%{auxbin_prefix}/$target_cpu-*"
514 echo "%{auxbin_prefix}/$target_cpu-*/bin/*"
515 echo "%{_prefix}/$arch/sys-root"
517 echo "%{_mandir}/man1/$arch-*"
521 for target in $(cat target.list symlink-target.list); do
522 build_file_list $target
525 # All the installed manual pages and translation files for each program are the
526 # same, so symlink them to the core package
527 echo "=== CROSSLINK man pages ==="
528 cd $RPM_BUILD_ROOT%{_mandir}/man1
529 for i in %{cross}-*.1*; do
533 if [ $k != $i ]; then
539 # Add ld.bfd manual pages
540 find * -name "*ld.1*" -a ! -name "%{cross}-ld.1*" -print |
542 y=$(echo $x | sed -e s/ld[.]1/ld.bfd.1/)
547 # Find the language files which only exist in the common package
548 %find_lang %{cross}-binutils
549 %find_lang %{cross}-opcodes
550 %find_lang %{cross}-bfd
551 %find_lang %{cross}-gas
552 %find_lang %{cross}-ld
553 %find_lang %{cross}-gprof
555 %{cross}-binutils.lang \
556 %{cross}-opcodes.lang \
560 %{cross}-gprof.lang \
564 rm -rf $RPM_BUILD_ROOT
566 %files -n %{cross}-binutils-common -f files.cross
567 %defattr(644,root,root,755)
568 %doc %{srcdir}/README
569 %doc %{srcdir}/COPYING*
570 %{_mandir}/man1/%{cross}-*
574 %files -n %{rpmprefix}binutils-%1 -f files.%1 \
575 %defattr(644,root,root,755) \
578 %do_files alpha-linux-gnu %{build_alpha}
579 %do_files arm-linux-gnu %{build_arm}
580 %do_files aarch64-linux-gnu %{build_aarch64}
581 %do_files avr32-linux-gnu %{build_avr32}
582 %do_files bfin-linux-gnu %{build_blackfin}
583 %do_files c6x-linux-gnu %{build_c6x}
584 %do_files cris-linux-gnu %{build_cris}
585 %do_files frv-linux-gnu %{build_frv}
586 %do_files h8300-linux-gnu %{build_h8300}
587 %do_files hexagon-linux-gnu %{build_hexagon}
588 %do_files hppa-linux-gnu %{build_hppa}
589 %do_files hppa64-linux-gnu %{build_hppa64}
590 %do_files i386-linux-gnu %{build_i386}
591 %do_files ia64-linux-gnu %{build_ia64}
592 %do_files m32r-linux-gnu %{build_m32r}
593 %do_files m68k-linux-gnu %{build_m68k}
594 %do_files metag-linux-gnu %{build_metag}
595 %do_files microblaze-linux-gnu %{build_microblaze}
596 %do_files mips-linux-gnu %{build_mips}
597 %do_files mips64-linux-gnu %{build_mips64}
598 %do_files mn10300-linux-gnu %{build_mn10300}
599 %do_files nios2-linux-gnu %{build_nios2}
600 %do_files openrisc-linux-gnu %{build_openrisc}
601 %do_files powerpc-linux-gnu %{build_powerpc}
602 %do_files powerpc64-linux-gnu %{build_powerpc64}
603 %do_files ppc-linux-gnu %{build_powerpc}
604 %do_files ppc64-linux-gnu %{build_powerpc64}
605 %do_files s390-linux-gnu %{build_s390}
606 %do_files s390x-linux-gnu %{build_s390x}
607 %do_files score-linux-gnu %{build_score}
608 %do_files sh-linux-gnu %{build_sh}
609 %do_files sh4-linux-gnu %{build_sh4}
610 %do_files sh64-linux-gnu %{build_sh64}
611 %do_files sparc-linux-gnu %{build_sparc}
612 %do_files sparc64-linux-gnu %{build_sparc64}
613 %do_files tile-linux-gnu %{build_tile}
614 %do_files unicore32-linux-gnu %{build_unicore32}
615 %do_files x86_64-linux-gnu %{build_x86_64}
616 %do_files xtensa-linux-gnu %{build_xtensa}