packaging: bump to 2.25
[platform/upstream/binutils.git] / packaging / cross-i386-binutils.spec
1 Name:           cross-i386-binutils
2 ExclusiveArch: %{ix86} x86_64
3 %define cross 1
4 %define TARGET i586
5 BuildRequires:  bison
6 BuildRequires:  flex
7 BuildRequires:  gcc-c++
8 # for the testsuite
9 BuildRequires:  glibc-devel-static
10 # for some gold tests
11 BuildRequires:  bc
12 BuildRequires:  makeinfo ncurses-devel
13 BuildRequires:  zlib-devel-static
14 Requires(pre):  update-alternatives
15 Version:        2.25
16 Release:        0
17 #
18 # RUN_TESTS
19 %define run_tests %(test ! -f %_sourcedir/RUN_TESTS ; echo $?)
20 # check the vanilla binutils, with no patches applied
21 # TEST_VANILLA
22 %define test_vanilla %(test ! -f %_sourcedir/TEST_VANILLA ; echo $?)
23 #
24 # handle test suite failures
25 #
26 %ifarch alpha %arm aarch64 hppa mips sh4 %sparc
27 %define make_check_handling     true
28 %else
29 # XXX check again
30 # XXX disabled because gold is seriously broken for now
31 %define make_check_handling     true
32 %endif
33 # let make check fail anyway if RUN_TESTS was requested
34 %if %{run_tests}
35 %define make_check_handling     false
36 %endif
37 # handle all binary object formats supported by SuSE (and a few more)
38 %ifarch %ix86 %arm aarch64 ia64 ppc ppc64 s390 s390x x86_64
39 %define build_multitarget 1
40 %else
41 %define build_multitarget 0
42 %endif
43 %define target_list aarch64 alpha armv5l armv7l armv8l hppa hppa64 i686 ia64 m68k mips powerpc powerpc64 s390 s390x sh4 sparc sparc64 x86_64
44 #
45 #
46 #
47 Url:            http://www.gnu.org/software/binutils/
48 #%define binutils_version %(echo %version | sed 's/\\.[0-9]\\{8\\}$//')
49 Summary:        GNU Binutils
50 License:        GFDL-1.3 and GPL-3.0+
51 Group:          Development/Building
52 Source:         binutils-%{version}.tar.bz2
53 Source1:        pre_checkin.sh
54 Source3:        baselibs.conf
55
56 %description
57 C compiler utilities: ar, as, gprof, ld, nm, objcopy, objdump, ranlib,
58 size, strings, and strip. These utilities are needed whenever you want
59 to compile a program or kernel.
60
61
62 %package gold
63 Summary:        The gold linker
64 License:        GPL-3.0+
65 Group:          Development/Building
66 Requires:       %{name} = %{version}-%{release}
67 %define gold_archs %ix86 %arm aarch64 x86_64 ppc ppc64 %sparc
68
69 %description gold
70 gold is an ELF linker.  It is intended to have complete support for ELF
71 and to run as fast as possible on modern systems.  For normal use it is
72 a drop-in replacement for the older GNU linker.
73
74
75 %package devel
76 Summary:        GNU binutils (BFD development files)
77 License:        GPL-3.0+
78 Group:          Development/Building
79 Requires:       binutils = %{version}-%{release}
80 Requires:       zlib-devel
81 Provides:       binutils:/usr/include/bfd.h
82
83 %description devel
84 This package includes header files and static libraries necessary to
85 build programs which use the GNU BFD library, which is part of
86 binutils.
87
88
89 %ifarch %arm
90 %define HOST %{_target_cpu}-tizen-linux-gnueabi
91 %else
92 %define HOST %(echo %{_target_cpu} | sed -e "s/parisc/hppa/" -e "s/i.86/i586/" -e "s/ppc/powerpc/" -e "s/sparc64v.*/sparc64/" -e "s/sparcv.*/sparc/")-tizen-linux
93 %endif 
94 %define DIST %(echo '%distribution' | sed 's/ (.*)//')
95
96 %prep
97 echo "make check will return with %{make_check_handling} in case of testsuite failures."
98 %setup -q -n binutils-%{version}
99
100 %if 0%{!?cross:1}
101 %ifarch %arm
102 ulimit -Hs unlimited
103 ulimit -s unlimited
104 %endif
105 %endif
106
107 sed -i -e '/BFD_VERSION_DATE/s/$/-%(echo %release | sed 's/\.[0-9]*$//')/' bfd/version.h
108 %build
109 RPM_OPT_FLAGS="$RPM_OPT_FLAGS -Wno-error"
110 RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS |sed -e 's/atom/i686/g'`
111 %if 0%{!?cross:1}
112 # Building native binutils
113 echo "Building native binutils." 
114 %if %build_multitarget
115 EXTRA_TARGETS="%(printf ,%%s-tizen-linux %target_list)"
116 EXTRA_TARGETS="$EXTRA_TARGETS,powerpc-macos,powerpc-macos10,spu-elf,x86_64-pep"
117 %else
118 EXTRA_TARGETS=
119 %ifarch sparc
120 EXTRA_TARGETS="$EXTRA_TARGETS,sparc64-tizen-linux"
121 %endif
122 %ifarch ppc
123 EXTRA_TARGETS="$EXTRA_TARGETS,powerpc64-tizen-linux"
124 %endif
125 %ifarch s390
126 EXTRA_TARGETS="$EXTRA_TARGETS,s390x-tizen-linux"
127 %endif
128 %ifarch s390x
129 EXTRA_TARGETS="$EXTRA_TARGETS,s390-tizen-linux"
130 %endif
131 %ifarch %ix86
132 EXTRA_TARGETS="$EXTRA_TARGETS,x86_64-tizen-linux"
133 %endif
134 %ifarch ppc ppc64
135 EXTRA_TARGETS="$EXTRA_TARGETS,spu-elf"
136 %endif
137 %ifarch %arm
138 EXTRA_TARGETS="$EXTRA_TARGETS,arm-tizen-linux-gnueabi"
139 %endif
140 %ifarch aarch64
141 EXTRA_TARGETS="$EXTRA_TARGETS,aarch64-tizen-linux"
142 %endif
143 %endif
144 %define common_flags CFLAGS="${RPM_OPT_FLAGS}" CXXFLAGS="${RPM_OPT_FLAGS}" \\\
145         --prefix=%{_prefix} --libdir=%{_libdir} \\\
146         --infodir=%{_infodir} --mandir=%{_mandir} \\\
147         --with-bugurl=http://bugs.opensuse.org/ \\\
148         --with-pkgversion="GNU Binutils; %{DIST}" \\\
149         --disable-nls \\\
150         --with-separate-debug-dir=%{_prefix}/lib/debug \\\
151         --with-pic --build=%{HOST} 
152 mkdir build-dir
153 cd build-dir
154
155 %ifarch %arm
156 export CONFIG_SHELL="/bin/bash"
157 export SHELL="/bin/bash"
158 %endif
159
160 ../configure %common_flags \
161         ${EXTRA_TARGETS:+--enable-targets="${EXTRA_TARGETS#,}"} \
162         --enable-plugins \
163 %ifarch %gold_archs
164         --enable-gold \
165 %endif
166         --enable-shared
167 make %{?_smp_mflags} all-bfd TARGET-bfd=headers
168 # force reconfiguring (???)
169 rm bfd/Makefile
170 make %{?_smp_mflags}
171
172 %else
173 # building cross-TARGET-binutils
174 echo "Building cross binutils." 
175 mkdir build-dir
176 cd build-dir
177 EXTRA_TARGETS=
178 %if "%{TARGET}" == "sparc"
179 EXTRA_TARGETS="$EXTRA_TARGETS,sparc64-tizen-linux"
180 %endif
181 %if "%{TARGET}" == "powerpc"
182 EXTRA_TARGETS="$EXTRA_TARGETS,powerpc64-tizen-linux"
183 %endif
184 %if "%{TARGET}" == "s390"
185 EXTRA_TARGETS="$EXTRA_TARGETS,s390x-tizen-linux"
186 %endif
187 %if "%{TARGET}" == "s390x"
188 EXTRA_TARGETS="$EXTRA_TARGETS,s390-tizen-linux"
189 %endif
190 %if "%{TARGET}" == "i586"
191 EXTRA_TARGETS="$EXTRA_TARGETS,x86_64-tizen-linux"
192 %endif
193 %if "%{TARGET}" == "hppa"
194 EXTRA_TARGETS="$EXTRA_TARGETS,hppa64-tizen-linux"
195 %endif
196 %if "%{TARGET}" == "arm"
197 EXTRA_TARGETS="$EXTRA_TARGETS,arm-tizen-linux-gnueabi"
198 %endif
199 %if "%{TARGET}" == "aarch64"
200 EXTRA_TARGETS="$EXTRA_TARGETS,aarch64-tizen-linux"
201 %endif
202 %if "%{TARGET}" == "avr" || "%{TARGET}" == "spu"
203 TARGET_OS=%{TARGET}
204 %else
205 %if "%{TARGET}" == "arm"
206 TARGET_OS=%{TARGET}-tizen-linux-gnueabi
207 %else
208 TARGET_OS=%{TARGET}-tizen-linux
209 %endif
210 %endif
211 ../configure CFLAGS="${RPM_OPT_FLAGS}" \
212   --enable-plugins \
213 %ifarch %gold_archs
214   --enable-gold \
215 %endif
216   --prefix=%{_prefix} \
217   --with-bugurl=http://bugs.opensuse.org/ \
218   --with-pkgversion="GNU Binutils; %{DIST}" \
219   --disable-nls \
220   --build=%{HOST} --target=$TARGET_OS \
221 %if "%{TARGET}" == "spu"
222   --with-sysroot=/usr/spu \
223 %else
224   --with-sysroot=%{_prefix}/$TARGET_OS/sys-root \
225 %endif
226   ${EXTRA_TARGETS:+--enable-targets="${EXTRA_TARGETS#,}"}
227 make %{?_smp_mflags} all-bfd TARGET-bfd=headers
228 # force reconfiguring
229 rm bfd/Makefile
230 make %{?_smp_mflags}
231 %if "%{TARGET}" == "avr"
232 # build an extra nesC version because nesC requires $'s in identifiers
233 cp -a gas gas-nesc
234 echo '#include "tc-%{TARGET}-nesc.h"' > gas-nesc/targ-cpu.h
235 make -C gas-nesc clean
236 make -C gas-nesc %{?_smp_mflags}
237 %endif
238 %endif
239
240 %check
241 unset LD_AS_NEEDED
242 cd build-dir
243 %if 0%{?cross:1}
244 make -k check CFLAGS="-O2 -g" CXXFLAGS="-O2 -g" || %{make_check_handling}
245 %else
246 make -k check CFLAGS="$RPM_OPT_FLAGS -Wno-unused -Wno-unprototyped-calls" || :
247 %endif
248
249 %install
250 cd build-dir
251 %if 0%{!?cross:1}
252 # installing native binutils
253 %ifarch %gold_archs
254 make DESTDIR=$RPM_BUILD_ROOT install-gold
255 ln -sf ld.gold $RPM_BUILD_ROOT%{_bindir}/gold
256 %endif
257
258 make DESTDIR=$RPM_BUILD_ROOT install-info install
259 make -C gas/doc DESTDIR=$RPM_BUILD_ROOT install-info-am install-am
260 make DESTDIR=$RPM_BUILD_ROOT install-bfd install-opcodes
261
262 # We have gdb in separate package
263 rm -f %buildroot/%_bindir/gdb*
264
265 if [ ! -f "%buildroot/%_bindir/ld.bfd" ]; then
266   mv "%buildroot/%_bindir"/{ld,ld.bfd};
267 else
268   rm -f "%buildroot/%_bindir/ld";
269 fi
270 mkdir -p "%buildroot/%_sysconfdir/alternatives";
271 ln -s "%_bindir/ld" "%buildroot/%_sysconfdir/alternatives/ld";
272 ln -s "%_sysconfdir/alternatives/ld" "%buildroot/%_bindir/ld";
273 rm -rf $RPM_BUILD_ROOT%{_prefix}/%{HOST}/bin
274 mkdir -p $RPM_BUILD_ROOT%{_prefix}/%{HOST}/bin
275 ln -sf ../../bin/{ar,as,ld,nm,ranlib,strip} $RPM_BUILD_ROOT%{_prefix}/%{HOST}/bin
276 %ifarch %gold_archs
277 ln -sf ../../bin/ld.gold $RPM_BUILD_ROOT%{_prefix}/%{HOST}/bin
278 %endif
279
280 mv $RPM_BUILD_ROOT%{_prefix}/%{HOST}/lib/ldscripts $RPM_BUILD_ROOT%{_libdir}
281 ln -sf ../../%{_lib}/ldscripts $RPM_BUILD_ROOT%{_prefix}/%{HOST}/lib/ldscripts
282
283 # Install header files
284 make -C libiberty install_to_libdir target_header_dir=/usr/include DESTDIR=$RPM_BUILD_ROOT
285 # We want the PIC libiberty.a
286 install -m 644 libiberty/pic/libiberty.a $RPM_BUILD_ROOT%{_libdir}
287 #
288 chmod a+x $RPM_BUILD_ROOT%{_libdir}/libbfd-*
289 chmod a+x $RPM_BUILD_ROOT%{_libdir}/libopcodes-*
290 # No shared linking outside binutils
291 rm -f $RPM_BUILD_ROOT%{_libdir}/lib{bfd,opcodes,inproctrace}.so
292 rm -f $RPM_BUILD_ROOT%{_libdir}/lib{bfd,opcodes}.la
293 # Remove unwanted files to shut up rpm
294 rm -f $RPM_BUILD_ROOT%{_mandir}/man1/dlltool.1 $RPM_BUILD_ROOT%{_mandir}/man1/windres.1 $RPM_BUILD_ROOT%{_mandir}/man1/windmc.1
295 cd ..
296 #%find_lang binutils
297 #%find_lang bfd binutils.lang
298 #%find_lang gas binutils.lang
299 #%find_lang ld binutils.lang
300 #%find_lang opcodes binutils.lang
301 #%find_lang gprof binutils.lang
302 %ifarch %gold_archs
303 #%find_lang gold binutils-gold.lang
304 %endif
305 mkdir -p $RPM_BUILD_ROOT%{_docdir}/%{name}
306 install -m 644 binutils/NEWS $RPM_BUILD_ROOT%{_docdir}/%{name}/NEWS-binutils
307 install -m 644 gas/NEWS $RPM_BUILD_ROOT%{_docdir}/%{name}/NEWS-gas
308 install -m 644 ld/NEWS $RPM_BUILD_ROOT%{_docdir}/%{name}/NEWS-ld
309 %else
310 # installing cross-TARGET-binutils and TARGET-binutils
311 make DESTDIR=$RPM_BUILD_ROOT install
312 # Replace hard links by symlinks, so that rpmlint doesn't complain
313 T=$(basename %buildroot/usr/%{TARGET}*)
314 for f in %buildroot/usr/$T/bin/* ; do
315    ln -sf /usr/bin/$T-$(basename $f) $f
316 done
317 %if "%{TARGET}" == "avr"
318 install -c gas-nesc/as-new $RPM_BUILD_ROOT%{_prefix}/bin/%{TARGET}-nesc-as
319 ln -sf ../../bin/%{TARGET}-nesc-as $RPM_BUILD_ROOT%{_prefix}/%{TARGET}/bin/nesc-as
320 %endif
321 rm -rf $RPM_BUILD_ROOT%{_mandir}
322 rm -rf $RPM_BUILD_ROOT%{_infodir}
323 rm -rf $RPM_BUILD_ROOT%{_prefix}/lib*
324 rm -rf $RPM_BUILD_ROOT%{_prefix}/include
325 rm -f $RPM_BUILD_ROOT%{_prefix}/bin/*-c++filt
326
327 # We have gdb in separate package
328 rm -f $RPM_BUILD_ROOT%{_bindir}/gdb*
329 rm -rf $RPM_BUILD_ROOT%{_datadir}/gdb
330
331 > ../binutils.lang
332 %endif
333 cd $RPM_BUILD_DIR/binutils-%version
334
335
336 %if 0%{!?cross:1}
337 %docs_package
338 %post
339 "%_sbindir/update-alternatives" --install \
340     "%_bindir/ld" ld "%_bindir/ld.bfd" 1
341
342 %post gold
343 "%_sbindir/update-alternatives" --install \
344     "%_bindir/ld" ld "%_bindir/ld.gold" 2
345
346
347 %preun
348 if [ "$1" = 0 ]; then
349     "%_sbindir/update-alternatives" --remove ld "%_bindir/ld.bfd";
350 fi;
351
352 %preun gold
353 if [ "$1" = 0 ]; then
354     "%_sbindir/update-alternatives" --remove ld "%_bindir/ld.gold";
355 fi;
356
357 %endif
358
359 %files 
360 %defattr(-,root,root)
361 %if 0%{!?cross:1}
362 %{_docdir}/%{name}
363 %{_prefix}/%{HOST}/bin/*
364 %{_prefix}/%{HOST}/lib/ldscripts
365 %ghost %_sysconfdir/alternatives/ld
366 %{_libdir}/ldscripts
367 %{_bindir}/*
368 %ifarch %gold_archs
369 %exclude %{_bindir}/*gold
370 %endif
371 %doc %{_infodir}/*.gz
372 %{_libdir}/lib*-%{version}*.so
373 %else
374 %{_prefix}/%{TARGET}*
375 %{_prefix}/bin/*
376 %endif
377
378 %ifarch %gold_archs
379 %files gold 
380 %defattr(-,root,root)
381 %{_bindir}/*gold
382 %if 0%{?cross:1}
383 %if "%{TARGET}" == "arm"
384 %{_prefix}/%{TARGET}-tizen-linux-gnueabi/bin/*gold
385 %else
386 %{_prefix}/%{TARGET}-tizen-linux/bin/*gold
387 %endif
388 %else
389 %{_prefix}/%{HOST}/bin/*gold
390 %endif
391 %endif
392
393 %if 0%{!?cross:1}
394 %files devel
395 %defattr(-,root,root)
396 %{_prefix}/include/*.h
397 %{_prefix}/include/gdb/*.h
398 %{_libdir}/lib*.*a
399 %{_datadir}/gdb/*
400 %endif
401
402 %changelog