sync other specs
[platform/upstream/binutils.git] / packaging / cross-i386-binutils.spec
1 Name:         cross-i386-binutils
2 ExcludeArch: %ix86
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
13 BuildRequires:  zlib-devel-static
14 Requires(pre):  update-alternatives
15 Version:        2.23.1
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 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 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 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/Tools/Building
52 Source:         binutils-%{binutils_version}.tar.bz2
53 Source1:        pre_checkin.sh
54 Source3:        baselibs.conf
55 # Patches auto-generated by git-buildpackage:
56 Patch0:     0001-skip-rpaths.patch
57 Patch1:     0002-x86-64-biarch.patch
58 Patch2:     0003-unit-at-a-time.patch
59 Patch3:     0004-ld-dtags.patch
60 Patch4:     0005-ld-relro.patch
61 Patch5:     0006-testsuite.patch
62 Patch6:     0007-enable-targets-gold.patch
63 Patch7:     0008-use-hashtype-both-by-default.patch
64 Patch8:     0009-build-as-needed.patch
65 Patch9:     0010-fixup-testcase-perturb.patch
66 Patch10:    0011-gold-depend-on-opcodes.patch
67 Patch11:    0012-bso12451.patch
68
69 %description
70 C compiler utilities: ar, as, gprof, ld, nm, objcopy, objdump, ranlib,
71 size, strings, and strip. These utilities are needed whenever you want
72 to compile a program or kernel.
73
74
75 %package gold
76 Summary:        The gold linker
77 License:        GPL-3.0+
78 Group:          Development/Tools/Building
79 Requires:       binutils = %{version}-%{release}
80 %if 0%{!?cross:1}
81 %define gold_archs %ix86 %arm x86_64 ppc ppc64 %sparc
82 %endif
83
84 %description gold
85 gold is an ELF linker.  It is intended to have complete support for ELF
86 and to run as fast as possible on modern systems.  For normal use it is
87 a drop-in replacement for the older GNU linker.
88
89
90 %package devel
91 Summary:        GNU binutils (BFD development files)
92 License:        GPL-3.0+
93 Group:          Development/Libraries/C and C++
94 Requires:       binutils = %{version}-%{release}
95 Requires:       zlib-devel
96 Provides:       binutils:/usr/include/bfd.h
97
98 %description devel
99 This package includes header files and static libraries necessary to
100 build programs which use the GNU BFD library, which is part of
101 binutils.
102
103
104 %ifarch %arm
105 %define HOST %{_target_cpu}-tizen-linux-gnueabi
106 %else
107 %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
108 %endif 
109 %define DIST %(echo '%distribution' | sed 's/ (.*)//')
110
111 %prep
112 echo "make check will return with %{make_check_handling} in case of testsuite failures."
113 %setup -q -n binutils-%{binutils_version}
114 # 0001-skip-rpaths.patch
115 %patch0 -p1
116 # 0002-x86-64-biarch.patch
117 %patch1 -p1
118 # 0003-unit-at-a-time.patch
119 %patch2 -p1
120 # 0004-ld-dtags.patch
121 %patch3 -p1
122 # 0005-ld-relro.patch
123 %patch4 -p1
124 # 0006-testsuite.patch
125 %patch5 -p1
126 # 0007-enable-targets-gold.patch
127 %patch6 -p1
128 # 0008-use-hashtype-both-by-default.patch
129 %patch7 -p1
130 # 0009-build-as-needed.patch
131 %patch8 -p1
132 # 0010-fixup-testcase-perturb.patch
133 %patch9 -p1
134 # 0011-gold-depend-on-opcodes.patch
135 %patch10 -p1
136 # 0012-bso12451.patch
137 %patch11 -p1
138
139 sed -i -e '/BFD_VERSION_DATE/s/$/-%(echo %release | sed 's/\.[0-9]*$//')/' bfd/version.h
140 %build
141 RPM_OPT_FLAGS="$RPM_OPT_FLAGS -Wno-error"
142 RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS |sed -e 's/atom/i686/g'`
143 %if 0%{!?cross:1}
144 # Building native binutils
145 echo "Building native binutils." 
146 %if %build_multitarget
147 EXTRA_TARGETS="%(printf ,%%s-tizen-linux %target_list)"
148 EXTRA_TARGETS="$EXTRA_TARGETS,powerpc-macos,powerpc-macos10,spu-elf,x86_64-pep"
149 %else
150 EXTRA_TARGETS=
151 %ifarch sparc
152 EXTRA_TARGETS="$EXTRA_TARGETS,sparc64-tizen-linux"
153 %endif
154 %ifarch ppc
155 EXTRA_TARGETS="$EXTRA_TARGETS,powerpc64-tizen-linux"
156 %endif
157 %ifarch s390
158 EXTRA_TARGETS="$EXTRA_TARGETS,s390x-tizen-linux"
159 %endif
160 %ifarch s390x
161 EXTRA_TARGETS="$EXTRA_TARGETS,s390-tizen-linux"
162 %endif
163 %ifarch %ix86
164 EXTRA_TARGETS="$EXTRA_TARGETS,x86_64-tizen-linux"
165 %endif
166 %ifarch ppc ppc64
167 EXTRA_TARGETS="$EXTRA_TARGETS,spu-elf"
168 %endif
169 %ifarch %arm
170 EXTRA_TARGETS="$EXTRA_TARGETS,arm-tizen-linux-gnueabi"
171 %endif
172 %endif
173 %define common_flags CFLAGS="${RPM_OPT_FLAGS}" CXXFLAGS="${RPM_OPT_FLAGS}" \\\
174         --prefix=%{_prefix} --libdir=%{_libdir} \\\
175         --infodir=%{_infodir} --mandir=%{_mandir} \\\
176         --with-bugurl=http://bugs.opensuse.org/ \\\
177         --with-pkgversion="GNU Binutils; %{DIST}" \\\
178         --disable-nls \\\
179         --with-separate-debug-dir=%{_prefix}/lib/debug \\\
180         --with-pic --build=%{HOST} 
181 mkdir build-dir
182 cd build-dir
183 ../configure %common_flags \
184         ${EXTRA_TARGETS:+--enable-targets="${EXTRA_TARGETS#,}"} \
185         --enable-plugins \
186 %ifarch %gold_archs
187         --enable-gold \
188 %endif
189         --enable-shared
190 make %{?_smp_mflags} all-bfd TARGET-bfd=headers
191 # force reconfiguring (???)
192 rm bfd/Makefile
193 make %{?_smp_mflags}
194
195 %else
196 # building cross-TARGET-binutils
197 echo "Building cross binutils." 
198 mkdir build-dir
199 cd build-dir
200 EXTRA_TARGETS=
201 %if "%{TARGET}" == "sparc"
202 EXTRA_TARGETS="$EXTRA_TARGETS,sparc64-tizen-linux"
203 %endif
204 %if "%{TARGET}" == "powerpc"
205 EXTRA_TARGETS="$EXTRA_TARGETS,powerpc64-tizen-linux"
206 %endif
207 %if "%{TARGET}" == "s390"
208 EXTRA_TARGETS="$EXTRA_TARGETS,s390x-tizen-linux"
209 %endif
210 %if "%{TARGET}" == "s390x"
211 EXTRA_TARGETS="$EXTRA_TARGETS,s390-tizen-linux"
212 %endif
213 %if "%{TARGET}" == "i586"
214 EXTRA_TARGETS="$EXTRA_TARGETS,x86_64-tizen-linux"
215 %endif
216 %if "%{TARGET}" == "hppa"
217 EXTRA_TARGETS="$EXTRA_TARGETS,hppa64-tizen-linux"
218 %endif
219 %if "%{TARGET}" == "arm"
220 EXTRA_TARGETS="$EXTRA_TARGETS,arm-tizen-linux-gnueabi"
221 %endif
222 %if "%{TARGET}" == "avr" || "%{TARGET}" == "spu"
223 TARGET_OS=%{TARGET}
224 %else
225 %if "%{TARGET}" == "arm"
226 TARGET_OS=%{TARGET}-tizen-linux-gnueabi
227 %else
228 TARGET_OS=%{TARGET}-tizen-linux
229 %endif
230 %endif
231 ../configure CFLAGS="${RPM_OPT_FLAGS}" \
232   --prefix=%{_prefix} \
233   --with-bugurl=http://bugs.opensuse.org/ \
234   --with-pkgversion="GNU Binutils; %{DIST}" \
235   --disable-nls \
236   --build=%{HOST} --target=$TARGET_OS \
237 %if "%{TARGET}" == "spu"
238   --with-sysroot=/usr/spu \
239 %else
240   --with-sysroot=%{_prefix}/$TARGET_OS/sys-root \
241 %endif
242   ${EXTRA_TARGETS:+--enable-targets="${EXTRA_TARGETS#,}"}
243 make %{?_smp_mflags} all-bfd TARGET-bfd=headers
244 # force reconfiguring
245 rm bfd/Makefile
246 make %{?_smp_mflags}
247 %if "%{TARGET}" == "avr"
248 # build an extra nesC version because nesC requires $'s in identifiers
249 cp -a gas gas-nesc
250 echo '#include "tc-%{TARGET}-nesc.h"' > gas-nesc/targ-cpu.h
251 make -C gas-nesc clean
252 make -C gas-nesc %{?_smp_mflags}
253 %endif
254 %endif
255
256 %check
257 unset LD_AS_NEEDED
258 cd build-dir
259 %if 0%{?cross:1}
260 make -k check CFLAGS="-O2 -g" CXXFLAGS="-O2 -g" || %{make_check_handling}
261 %else
262 make -k check CFLAGS="$RPM_OPT_FLAGS -Wno-unused -Wno-unprototyped-calls" || :
263 %endif
264
265 %install
266 cd build-dir
267 %if 0%{!?cross:1}
268 # installing native binutils
269 %ifarch %gold_archs
270 make DESTDIR=$RPM_BUILD_ROOT install-gold
271 ln -sf ld.gold $RPM_BUILD_ROOT%{_bindir}/gold
272 %endif
273 make DESTDIR=$RPM_BUILD_ROOT install-info install
274 make -C gas/doc DESTDIR=$RPM_BUILD_ROOT install-info-am install-am
275 make DESTDIR=$RPM_BUILD_ROOT install-bfd install-opcodes
276
277 if [ ! -f "%buildroot/%_bindir/ld.bfd" ]; then
278   mv "%buildroot/%_bindir"/{ld,ld.bfd};
279 else
280   rm -f "%buildroot/%_bindir/ld";
281 fi
282 mkdir -p "%buildroot/%_sysconfdir/alternatives";
283 ln -s "%_bindir/ld" "%buildroot/%_sysconfdir/alternatives/ld";
284 ln -s "%_sysconfdir/alternatives/ld" "%buildroot/%_bindir/ld";
285 rm -rf $RPM_BUILD_ROOT%{_prefix}/%{HOST}/bin
286 mkdir -p $RPM_BUILD_ROOT%{_prefix}/%{HOST}/bin
287 ln -sf ../../bin/{ar,as,ld,nm,ranlib,strip} $RPM_BUILD_ROOT%{_prefix}/%{HOST}/bin
288
289 mv $RPM_BUILD_ROOT%{_prefix}/%{HOST}/lib/ldscripts $RPM_BUILD_ROOT%{_libdir}
290 ln -sf ../../%{_lib}/ldscripts $RPM_BUILD_ROOT%{_prefix}/%{HOST}/lib/ldscripts
291
292 # Install header files
293 make -C libiberty install_to_libdir target_header_dir=/usr/include DESTDIR=$RPM_BUILD_ROOT
294 # We want the PIC libiberty.a
295 install -m 644 libiberty/pic/libiberty.a $RPM_BUILD_ROOT%{_libdir}
296 #
297 chmod a+x $RPM_BUILD_ROOT%{_libdir}/libbfd-*
298 chmod a+x $RPM_BUILD_ROOT%{_libdir}/libopcodes-*
299 # No shared linking outside binutils
300 rm $RPM_BUILD_ROOT%{_libdir}/lib{bfd,opcodes}.so
301 rm $RPM_BUILD_ROOT%{_libdir}/lib{bfd,opcodes}.la
302 # Remove unwanted files to shut up rpm
303 rm $RPM_BUILD_ROOT%{_infodir}/configure* $RPM_BUILD_ROOT%{_infodir}/standards.info*
304 rm $RPM_BUILD_ROOT%{_mandir}/man1/dlltool.1 $RPM_BUILD_ROOT%{_mandir}/man1/windres.1 $RPM_BUILD_ROOT%{_mandir}/man1/windmc.1
305 cd ..
306 #%find_lang binutils
307 #%find_lang bfd binutils.lang
308 #%find_lang gas binutils.lang
309 #%find_lang ld binutils.lang
310 #%find_lang opcodes binutils.lang
311 #%find_lang gprof binutils.lang
312 %ifarch %gold_archs
313 #%find_lang gold binutils-gold.lang
314 %endif
315 mkdir -p $RPM_BUILD_ROOT%{_docdir}/%{name}
316 install -m 644 binutils/NEWS $RPM_BUILD_ROOT%{_docdir}/%{name}/NEWS-binutils
317 install -m 644 gas/NEWS $RPM_BUILD_ROOT%{_docdir}/%{name}/NEWS-gas
318 install -m 644 ld/NEWS $RPM_BUILD_ROOT%{_docdir}/%{name}/NEWS-ld
319 %else
320 # installing cross-TARGET-binutils and TARGET-binutils
321 make DESTDIR=$RPM_BUILD_ROOT install
322 # Replace hard links by symlinks, so that rpmlint doesn't complain
323 T=$(basename %buildroot/usr/%{TARGET}*)
324 for f in %buildroot/usr/$T/bin/* ; do
325    ln -sf /usr/bin/$T-$(basename $f) $f
326 done
327 %if "%{TARGET}" == "avr"
328 install -c gas-nesc/as-new $RPM_BUILD_ROOT%{_prefix}/bin/%{TARGET}-nesc-as
329 ln -sf ../../bin/%{TARGET}-nesc-as $RPM_BUILD_ROOT%{_prefix}/%{TARGET}/bin/nesc-as
330 %endif
331 rm -rf $RPM_BUILD_ROOT%{_mandir}
332 rm -rf $RPM_BUILD_ROOT%{_infodir}
333 rm -rf $RPM_BUILD_ROOT%{_prefix}/lib*
334 rm -rf $RPM_BUILD_ROOT%{_prefix}/include
335 rm -f $RPM_BUILD_ROOT%{_prefix}/bin/*-c++filt
336 > ../binutils.lang
337 %endif
338 cd $RPM_BUILD_DIR/binutils-%version
339
340
341 %if 0%{!?cross:1}
342 %docs_package
343 %post
344 "%_sbindir/update-alternatives" --install \
345     "%_bindir/ld" ld "%_bindir/ld.bfd" 1
346
347 %post gold
348 "%_sbindir/update-alternatives" --install \
349     "%_bindir/ld" ld "%_bindir/ld.gold" 2
350
351
352 %preun
353 if [ "$1" = 0 ]; then
354     "%_sbindir/update-alternatives" --remove ld "%_bindir/ld.bfd";
355 fi;
356
357 %preun gold
358 if [ "$1" = 0 ]; then
359     "%_sbindir/update-alternatives" --remove ld "%_bindir/ld.gold";
360 fi;
361
362 %endif
363
364 %files 
365 %defattr(-,root,root)
366 %if 0%{!?cross:1}
367 %{_docdir}/%{name}
368 %{_prefix}/%{HOST}/bin/*
369 %{_prefix}/%{HOST}/lib/ldscripts
370 %ghost %_sysconfdir/alternatives/ld
371 %{_libdir}/ldscripts
372 %{_bindir}/*
373 %ifarch %gold_archs
374 %exclude %{_bindir}/gold
375 %exclude %{_bindir}/ld.gold
376 %endif
377 %doc %{_infodir}/*.gz
378 %{_libdir}/lib*-%{version}*.so
379 %else
380 %{_prefix}/%{TARGET}*
381 %{_prefix}/bin/*
382 %endif
383
384 %ifarch %gold_archs
385 %files gold 
386 %defattr(-,root,root)
387 %{_bindir}/gold
388 %{_bindir}/ld.gold
389 %endif
390
391 %if 0%{!?cross:1}
392 %files devel
393 %defattr(-,root,root)
394 %{_prefix}/include/*.h
395 %{_libdir}/lib*.*a
396 %endif
397
398 %changelog