]>
Commit | Line | Data |
---|---|---|
b5b0b447 ER |
1 | # |
2 | # Conditional build: | |
3 | %bcond_without cloog # cloog | |
4 | # Targets: | |
5 | %bcond_without aarch64 # enable aarch64 | |
6 | %bcond_without alpha # enable alpha | |
7 | %bcond_without arm # enable arm | |
8 | %bcond_without avr32 # enable avr32 | |
9 | %bcond_without blackfin # enable blackfin | |
10 | %bcond_without c6x # enable c6x | |
11 | %bcond_without cris # enable cris | |
12 | %bcond_without frv # enable frv | |
13 | %bcond_without h8300 # enable h8300 | |
14 | %bcond_without hppa # enable hppa | |
15 | %bcond_without hppa64 # enable hppa64 | |
16 | %bcond_without ia64 # enable ia64 | |
17 | %bcond_without m32r # enable m32r | |
18 | %bcond_without m68k # enable m68k | |
19 | %bcond_without microblaze # enable microblaze | |
20 | %bcond_without mips64 # enable mips64 | |
21 | %bcond_without mn10300 # enable mn10300 | |
22 | %bcond_without nios2 # enable nios2 | |
23 | %bcond_without powerpc64 # enable powerpc64 | |
24 | %bcond_without s390x # enable s390x | |
25 | %bcond_without sh # enable sh | |
26 | %bcond_without sh64 # enable sh64 | |
27 | %bcond_without sparc64 # enable sparc64 | |
28 | %bcond_without tile # enable tile | |
29 | %bcond_without x86_64 # enable x86_64 | |
30 | %bcond_without xtensa # enable xtensa | |
31 | ||
32 | # built compiler generates lots of ICEs | |
33 | # - none at this time | |
34 | ||
35 | # gcc considers obsolete | |
36 | %undefine with_score | |
37 | ||
38 | # gcc doesn't build | |
39 | # - sh64 doesn't build on pld: | |
40 | # ../../gcc-4.9.2-20141212/gcc/genmultilib[264]: shift: nothing to shift | |
41 | # Makefile:1851: recipe for target 's-mlib' failed | |
42 | %undefine with_sh64 | |
43 | # packaging error, files packaged to gcc-hppa-linux-gnu and gcc-hppa64-linux-gnu | |
44 | %undefine with_hppa64 | |
45 | ||
46 | # 32-bit packages we don't build as we can use the 64-bit package instead | |
47 | %undefine with_i386 | |
48 | %undefine with_mips | |
49 | %undefine with_powerpc | |
50 | %undefine with_s390 | |
51 | %undefine with_sh4 | |
52 | %undefine with_sparc | |
53 | ||
54 | # gcc doesn't support | |
55 | %undefine with_metag | |
56 | %undefine with_openrisc | |
57 | ||
58 | # not available in binutils-2.22 | |
59 | %undefine with_unicore32 | |
60 | ||
61 | %define multilib_64_archs sparc64 ppc64 s390x x86_64 | |
62 | ||
63 | # we won't build libgcc for these as it depends on C library or kernel headers | |
64 | %define no_libgcc_targets nios2*|tile-* | |
65 | ||
66 | ############################################################################### | |
67 | # | |
68 | # The gcc versioning information. In a sed command below, the specfile winds | |
69 | # pre-release version numbers in BASE-VER back to the last actually-released | |
70 | # number. | |
71 | %define DATE 20141212 | |
72 | %define SVNREV 218667 | |
73 | ||
74 | %define srcdir gcc-%{version}-%{DATE} | |
75 | %define cross_binutils_version 2.24 | |
76 | %define isl_version 0.12.2 | |
77 | %define cloog_version 0.18.1 | |
78 | ||
79 | Summary: Cross C compiler | |
80 | Name: cross-gcc | |
81 | Version: 4.9.2 | |
82 | Release: 0.1 | |
83 | # libgcc, libgfortran, libmudflap, libgomp, libstdc++ and crtstuff have GCC Runtime Exception. | |
84 | License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD | |
85 | Group: Development/Languages | |
86 | URL: http://gcc.gnu.org/ | |
87 | # The source for this package was pulled from upstream's vcs. Use the | |
88 | # following commands to generate the tarball: | |
89 | # svn export svn://gcc.gnu.org/svn/gcc/branches/redhat/gcc-4_7-branch@%{SVNREV} gcc-%{version}-%{DATE} | |
90 | # tar cf - gcc-%{version}-%{DATE} | bzip2 -9 > gcc-%{version}-%{DATE}.tar.bz2 | |
91 | Source0: http://pkgs.fedoraproject.org/repo/pkgs/cross-gcc/%{srcdir}.tar.bz2/ccd8cac944582f8d2ddf5274a15df176/%{srcdir}.tar.bz2 | |
92 | # Source0-md5: ccd8cac944582f8d2ddf5274a15df176 | |
93 | Source1: ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-%{isl_version}.tar.bz2 | |
94 | # Source1-md5: e039bfcfb6c2ab039b8ee69bf883e824 | |
95 | Source2: ftp://gcc.gnu.org/pub/gcc/infrastructure/cloog-%{cloog_version}.tar.gz | |
96 | # Source2-md5: e34fca0540d840e5d0f6427e98c92252 | |
97 | Patch0: gcc49-hack.patch | |
98 | Patch1: gcc49-java-nomulti.patch | |
99 | Patch2: gcc49-ppc32-retaddr.patch | |
100 | Patch3: gcc49-rh330771.patch | |
101 | Patch4: gcc49-i386-libgomp.patch | |
102 | Patch5: gcc49-sparc-config-detection.patch | |
103 | Patch6: gcc49-libgomp-omp_h-multilib.patch | |
104 | Patch7: gcc49-libtool-no-rpath.patch | |
105 | Patch8: gcc49-cloog-dl.patch | |
106 | Patch9: gcc49-cloog-dl2.patch | |
107 | Patch10: gcc49-pr38757.patch | |
108 | Patch11: gcc49-libstdc++-docs.patch | |
109 | Patch12: gcc49-no-add-needed.patch | |
110 | Patch13: gcc49-color-auto.patch | |
111 | Patch14: gcc49-libgo-p224.patch | |
112 | Patch15: gcc49-aarch64-async-unw-tables.patch | |
113 | Patch16: gcc49-aarch64-unwind-opt.patch | |
114 | Patch17: gcc49-pr64269.patch | |
115 | Patch900: cross-intl-filename.patch | |
116 | # ia64 - http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44553 | |
117 | # m68k - http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53557 | |
118 | # alpha - http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55344 | |
119 | Patch901: cross-gcc-with-libgcc.patch | |
120 | Patch903: cross-gcc-bfin.patch | |
121 | Patch904: cross-gcc-c6x.patch | |
122 | Patch1100: cloog-0.18.1-ppc64le-config.patch | |
123 | BuildRequires: cross-binutils-common >= %{cross_binutils_version} | |
124 | BuildRequires: binutils >= 2.20.51.0.2-12 | |
125 | BuildRequires: bison | |
126 | BuildRequires: dejagnu | |
127 | BuildRequires: flex | |
128 | BuildRequires: gettext | |
129 | BuildRequires: sharutils | |
130 | BuildRequires: texinfo | |
131 | BuildRequires: zlib-devel | |
132 | # make sure pthread.h doesn't contain __thread tokens | |
133 | # make sure glibc supports stack protector | |
134 | # make sure glibc supports DT_GNU_HASH | |
135 | BuildRequires: elfutils-devel >= 0.147 | |
136 | BuildRequires: glibc-devel >= 2.4.90-13 | |
137 | BuildRequires: gmp-devel >= 4.2 | |
138 | BuildRequires: libmpc-devel >= 0.8.1 | |
139 | BuildRequires: mpfr-devel >= 2.3.1 | |
140 | Provides: bundled(libiberty) | |
141 | BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n) | |
142 | ||
143 | %define builddir %{_builddir}/%{name}-%{version} | |
144 | ||
629150be ER |
145 | # functions with printf format attribute but with special parser and also |
146 | # receiving non constant format strings | |
147 | %define Werror_cflags %{nil} | |
148 | ||
82693282 ER |
149 | # -march= from host is invalid when configuring targets |
150 | %define filterout_c -march=.* | |
151 | %define filterout_cxx -march=.* | |
152 | ||
b5b0b447 ER |
153 | %description |
154 | Cross-build GNU C compiler collection. | |
155 | ||
156 | %package common | |
157 | Summary: Cross-build GNU C compiler documentation and translation files | |
158 | Group: Development/Languages | |
159 | %if "%{_rpmversion}" >= "5" | |
160 | BuildArch: noarch | |
161 | %endif | |
162 | ||
163 | %description common | |
164 | Documentation, manual pages and translation files for cross-build GNU | |
165 | C compiler. | |
166 | ||
167 | This is the common part of a set of cross-build GNU C compiler | |
168 | packages for building kernels for other architectures. No support for | |
169 | cross-building user space programs is currently supplied as that would | |
170 | massively multiply the number of packages. | |
171 | ||
172 | %define do_package() \ | |
173 | %if %{expand:%%{?with_%{2}:1}%%{!?with_%{2}:0}} \ | |
174 | %package -n gcc-%1 \ | |
175 | Summary: Cross-build binary utilities for %1 \ | |
176 | Group: Development/Languages \ | |
177 | BuildRequires: binutils-%1 >= %{cross_binutils_version}\ | |
178 | Requires: %{name}-common = %{version}-%{release}\ | |
179 | Requires: binutils-%1 >= %{cross_binutils_version}\ | |
180 | \ | |
181 | %description -n gcc-%1 \ | |
182 | Cross-build GNU C compiler. \ | |
183 | \ | |
184 | Only building kernels is currently supported. Support for cross-building \ | |
185 | user space programs is not currently provided as that would massively multiply \ | |
186 | the number of packages. \ | |
187 | \ | |
188 | %package -n gcc-c++-%1 \ | |
189 | Summary: Cross-build binary utilities for %1 \ | |
190 | Group: Development/Languages \ | |
191 | Requires: gcc-%1 = %{version}-%{release}\ | |
192 | \ | |
193 | %description -n gcc-c++-%1 \ | |
194 | Cross-build GNU C++ compiler. \ | |
195 | \ | |
196 | Only the compiler is provided; not libstdc++. Support for cross-building \ | |
197 | user space programs is not currently provided as that would massively multiply \ | |
198 | the number of packages. \ | |
199 | %endif | |
200 | ||
201 | %define do_symlink() \ | |
202 | %if %{expand:%%{?with_%{2}:1}%%{!?with_%{2}:0}} \ | |
203 | %package -n gcc-%1 \ | |
204 | Summary: Cross-build binary utilities for %1 \ | |
205 | Group: Development/Languages \ | |
206 | Requires: gcc-%3 = %{version}-%{release}\ | |
207 | \ | |
208 | %description -n gcc-%1 \ | |
209 | Cross-build GNU C++ compiler. \ | |
210 | \ | |
211 | Only building kernels is currently supported. Support for cross-building \ | |
212 | user space programs is not currently provided as that would massively multiply \ | |
213 | the number of packages. \ | |
214 | \ | |
215 | %package -n gcc-c++-%1 \ | |
216 | Summary: Cross-build binary utilities for %1 \ | |
217 | Group: Development/Languages \ | |
218 | Requires: gcc-%1 = %{version}-%{release}\ | |
219 | Requires: gcc-c++-%3 = %{version}-%{release}\ | |
220 | \ | |
221 | %description -n gcc-c++-%1 \ | |
222 | Cross-build GNU C++ compiler. \ | |
223 | \ | |
224 | Only the compiler is provided; not libstdc++. Support for cross-building \ | |
225 | user space programs is not currently provided as that would massively multiply \ | |
226 | the number of packages. \ | |
227 | %endif | |
228 | ||
229 | %do_package alpha-linux-gnu alpha | |
230 | %do_package arm-linux-gnu arm | |
231 | %do_package aarch64-linux-gnu aarch64 | |
232 | %do_package avr32-linux-gnu avr32 | |
233 | %do_package bfin-linux-gnu blackfin | |
234 | %do_package c6x-linux-gnu c6x | |
235 | %do_package cris-linux-gnu cris | |
236 | %do_package frv-linux-gnu frv | |
237 | %do_package h8300-linux-gnu h8300 | |
238 | %do_package hppa-linux-gnu hppa | |
239 | %do_package hppa64-linux-gnu hppa64 | |
240 | %do_package i386-linux-gnu i386 | |
241 | %do_package ia64-linux-gnu ia64 | |
242 | %do_package m32r-linux-gnu m32r | |
243 | %do_package m68k-linux-gnu m68k | |
244 | %do_package metag-linux-gnu metag | |
245 | %do_package microblaze-linux-gnu microblaze | |
246 | %do_package mips-linux-gnu mips | |
247 | %do_package mips64-linux-gnu mips64 | |
248 | %do_package mn10300-linux-gnu mn10300 | |
249 | %do_package nios2-linux-gnu nios2 | |
250 | %do_package openrisc-linux-gnu openrisc | |
251 | %do_package powerpc-linux-gnu powerpc | |
252 | %do_package powerpc64-linux-gnu powerpc64 | |
253 | %do_symlink ppc-linux-gnu powerpc powerpc-linux-gnu | |
254 | %do_symlink ppc64-linux-gnu powerpc64 powerpc64-linux-gnu | |
255 | %do_package s390-linux-gnu s390 | |
256 | %do_package s390x-linux-gnu s390x | |
257 | %do_package score-linux-gnu score | |
258 | %do_package sh-linux-gnu sh | |
259 | %do_package sh4-linux-gnu sh4 | |
260 | %do_package sh64-linux-gnu sh64 | |
261 | %do_package sparc-linux-gnu sparc | |
262 | %do_package sparc64-linux-gnu sparc64 | |
263 | %do_package tile-linux-gnu tile | |
264 | %do_package unicore32-linux-gnu unicore32 | |
265 | %do_package x86_64-linux-gnu x86_64 | |
266 | %do_package xtensa-linux-gnu xtensa | |
267 | ||
268 | %prep | |
269 | %setup -qc -a 1 -a 2 | |
270 | cd %{srcdir} | |
271 | %patch0 -p0 | |
272 | %patch1 -p0 | |
273 | %patch2 -p0 | |
274 | %patch3 -p0 | |
275 | %patch4 -p0 | |
276 | %patch5 -p0 | |
277 | %patch6 -p0 | |
278 | %patch7 -p0 | |
279 | %if %{with cloog} | |
280 | %patch8 -p0 | |
281 | %patch9 -p0 | |
282 | %endif | |
283 | %patch10 -p0 | |
284 | # % if %{with libstdcxx_docs} | |
285 | # % patch11 -p0 | |
286 | # % endif | |
287 | %patch12 -p0 | |
288 | %patch13 -p0 | |
289 | %patch14 -p0 | |
290 | rm -f libgo/go/crypto/elliptic/p224{,_test}.go | |
291 | %patch15 -p0 | |
292 | %patch16 -p0 | |
293 | %patch17 -p0 | |
294 | ||
295 | %patch900 -p0 | |
296 | %patch901 -p1 | |
297 | %patch903 -p0 | |
298 | %patch904 -p0 | |
299 | ||
300 | cd .. | |
301 | %patch1100 -p0 | |
302 | cd %{srcdir} | |
303 | ||
304 | # Move the version number back | |
305 | sed -i -e 's/4\.9\.3/4.9.2/' gcc/BASE-VER | |
306 | echo 'PLD-Linux Cross %{version}-%{release}' > gcc/DEV-PHASE | |
307 | ||
308 | # Default to -gdwarf-4 -fno-debug-types-section rather than -gdwarf-2 | |
309 | sed -i '/UInteger Var(dwarf_version)/s/Init(2)/Init(4)/' gcc/common.opt | |
310 | sed -i '/flag_debug_types_section/s/Init(1)/Init(0)/' gcc/common.opt | |
311 | sed -i '/dwarf_record_gcc_switches/s/Init(0)/Init(1)/' gcc/common.opt | |
312 | sed -i 's/\(may be either 2, 3 or 4; the default version is \)2\./\14./' gcc/doc/invoke.texi | |
313 | ||
314 | ./contrib/gcc_update --touch | |
315 | ||
316 | LC_ALL=C sed -i -e 's/\xa0/ /' gcc/doc/options.texi | |
317 | ||
318 | cat > target.list <<EOF | |
319 | %{?with_alpha:alpha-linux-gnu} | |
320 | %{?with_arm:arm-linux-gnu} | |
321 | %{?with_aarch64:aarch64-linux-gnu} | |
322 | %{?with_avr32:avr32-linux-gnu} | |
323 | %{?with_blackfin:bfin-linux-gnu} | |
324 | %{?with_c6x:c6x-linux-gnu} | |
325 | %{?with_cris:cris-linux-gnu} | |
326 | %{?with_frv:frv-linux-gnu} | |
327 | %{?with_h8300:h8300-linux-gnu} | |
328 | %{?with_hppa:hppa-linux-gnu} | |
329 | %{?with_hppa64:hppa64-linux-gnu} | |
330 | %{?with_i386:i386-linux-gnu} | |
331 | %{?with_ia64:ia64-linux-gnu} | |
332 | %{?with_m32r:m32r-linux-gnu} | |
333 | %{?with_m68k:m68k-linux-gnu} | |
334 | %{?with_metag:metag-linux-gnu} | |
335 | %{?with_microblaze:microblaze-linux-gnu} | |
336 | %{?with_mips:mips-linux-gnu} | |
337 | %{?with_mips64:mips64-linux-gnu} | |
338 | %{?with_mn10300:mn10300-linux-gnu} | |
339 | %{?with_nios2:nios2-linux-gnu} | |
340 | %{?with_openrisc:openrisc-linux-gnu} | |
341 | %{?with_powerpc:powerpc-linux-gnu} | |
342 | %{?with_powerpc64:powerpc64-linux-gnu} | |
343 | %{?with_s390:s390-linux-gnu} | |
344 | %{?with_s390x:s390x-linux-gnu} | |
345 | %{?with_score:score-linux-gnu} | |
346 | %{?with_sh:sh-linux-gnu} | |
347 | %{?with_sh4:sh4-linux-gnu} | |
348 | %{?with_sh64:sh64-linux-gnu} | |
349 | %{?with_sparc:sparc-linux-gnu} | |
350 | %{?with_sparc64:sparc64-linux-gnu} | |
351 | %{?with_tile:tile-linux-gnu} | |
352 | %{?with_unicore32:unicore32-linux-gnu} | |
353 | %{?with_x86_64:x86_64-linux-gnu} | |
354 | %{?with_xtensa:xtensa-linux-gnu} | |
355 | EOF | |
356 | ||
357 | if [ $(wc -w < target.list) = 0 ]; then | |
358 | echo >&2 "No targets selected" | |
359 | exit 8 | |
360 | fi | |
361 | ||
362 | %build | |
363 | ||
364 | # Undo the broken autoconf change in recent Fedora versions | |
365 | export CONFIG_SITE=NONE | |
366 | ||
367 | # | |
368 | # Configure and build the ISL and CLooG libraries | |
369 | # | |
370 | %if %{with cloog} | |
371 | ||
372 | %define isl_source %{builddir}/isl-%{isl_version} | |
373 | %define isl_build %{builddir}/isl-build | |
374 | %define isl_install %{builddir}/isl-install | |
375 | ||
376 | mkdir %{isl_build} %{isl_install} | |
377 | %ifarch s390 s390x | |
378 | ISL_FLAG_PIC=-fPIC | |
379 | %else | |
380 | ISL_FLAG_PIC=-fpic | |
381 | %endif | |
382 | cd %{isl_build} | |
383 | %{isl_source}/configure \ | |
384 | --disable-silent-rules \ | |
385 | --disable-shared \ | |
386 | CC="%{__cc}" \ | |
387 | CXX="%{__cxx}" \ | |
388 | CFLAGS="${CFLAGS:-%rpmcflags} $ISL_FLAG_PIC" \ | |
389 | --prefix=%{isl_install} | |
390 | %{__make} | |
391 | %{__make} install | |
392 | cd .. | |
393 | ||
394 | %define cloog_source %{builddir}/cloog-%{cloog_version} | |
395 | %define cloog_build %{builddir}/cloog-build | |
396 | %define cloog_install %{builddir}/cloog-install | |
397 | ||
398 | install -d %{cloog_build} %{builddir}/cloog-install | |
399 | cd %{cloog_build} | |
400 | cat >> %{cloog_source}/source/isl/constraints.c << \EOF | |
401 | #include <isl/flow.h> | |
402 | static void __attribute__((used)) *s1 = (void *) isl_union_map_compute_flow; | |
403 | static void __attribute__((used)) *s2 = (void *) isl_map_dump; | |
404 | EOF | |
405 | sed -i 's|libcloog|libgcc49privatecloog|g' %{cloog_source}/{,test/}Makefile.{am,in} | |
406 | ||
407 | %{cloog_source}/configure \ | |
408 | --disable-silent-rules \ | |
409 | --with-isl=system \ | |
410 | --with-isl-prefix=%{isl_install} \ | |
411 | CC="%{__cc}" \ | |
412 | CXX="%{__cxx}" \ | |
413 | CFLAGS="${CFLAGS:-%rpmcflags}" \ | |
414 | CXXFLAGS="${CXXFLAGS:-%rpmcxxflags}" \ | |
415 | --prefix=%{cloog_install} | |
416 | sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool | |
417 | sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool | |
418 | %{__make} | |
419 | %{__make} install | |
420 | cd %{cloog_install}/lib | |
421 | rm libgcc49privatecloog-isl.so{,.4} | |
422 | mv libgcc49privatecloog-isl.so.4.0.0 libcloog-isl.so.4 | |
423 | ln -sf libcloog-isl.so.4 libcloog-isl.so | |
424 | ln -sf libcloog-isl.so.4 libcloog.so | |
425 | ||
426 | %endif | |
427 | ||
428 | # | |
429 | # Configure the compiler | |
430 | # | |
b5b0b447 ER |
431 | config_target() { |
432 | echo "=== CONFIGURING $1" | |
433 | ||
434 | arch=$1 | |
435 | prefix=$arch- | |
436 | build_dir=$1 | |
437 | ||
438 | case $arch in | |
439 | arm-*) target=arm-linux-gnueabi;; | |
440 | aarch64-*) target=aarch64-linux-gnu;; | |
441 | avr32-*) target=avr-linux;; | |
442 | bfin-*) target=bfin-uclinux;; | |
443 | c6x-*) target=c6x-uclinux;; | |
444 | h8300-*) target=h8300-elf;; | |
445 | mn10300-*) target=am33_2.0-linux;; | |
446 | m68knommu-*) target=m68k-linux;; | |
447 | openrisc-*) target=or32-linux;; | |
448 | parisc-*) target=hppa-linux;; | |
449 | score-*) target=score-elf;; | |
450 | sh64-*) target=sh64-linux;; | |
451 | tile-*) target=tilegx-linux;; | |
452 | v850-*) target=v850e-linux;; | |
453 | x86-*) target=x86_64-linux;; | |
454 | *) target=$arch;; | |
455 | esac | |
456 | ||
457 | echo $arch: target is $target | |
458 | #export CFLAGS="$RPM_OPT_FLAGS" | |
459 | ||
460 | CONFIG_FLAGS= | |
461 | case $arch in | |
462 | arm) | |
463 | CONFIG_FLAGS="--with-cpu=cortex-a8 --with-tune=cortex-a8 --with-arch=armv7-a --with-float=hard --with-fpu=vfpv3-d16 --with-abi=aapcs-linux" | |
464 | ;; | |
465 | powerpc-*|powerpc64-*) | |
466 | CONFIG_FLAGS="--with-cpu-32=power4 --with-tune-32=power6 --with-cpu-64=power4 --with-tune-64=power6 --enable-secureplt" | |
467 | ;; | |
468 | s390*-*) | |
469 | CONFIG_FLAGS="--with-arch=z9-109 --with-tune=z10 --enable-decimal-float" | |
470 | ;; | |
471 | sh-*) | |
472 | CONFIG_FLAGS="--with-multilib-list=m1,m2,m2e,m4,m4-single,m4-single-only,m2a,m2a-single,!m2a,!m2a-single" | |
473 | ;; | |
474 | sh64-*) | |
475 | CONFIG_FLAGS="--with-multilib-list=m5-32media,m5-32media-nofpu,m5-compact,m5-compact-nofpu,m5-64media,m5-64media-nofpu" | |
476 | ;; | |
477 | sparc-*) | |
478 | CONFIG_FLAGS="--disable-linux-futex" | |
479 | ;; | |
480 | tile-*) | |
481 | #CONFIG_FLAGS="--with-arch_32=tilepro" | |
482 | ;; | |
483 | x86-*) | |
484 | CONFIG_FLAGS="--with-arch_32=i686" | |
485 | ;; | |
486 | esac | |
487 | ||
488 | case $arch in | |
489 | alpha|powerpc*|s390*|sparc*) | |
490 | CONFIG_FLAGS="$CONFIG_FLAGS --with-long-double-128" ;; | |
491 | esac | |
492 | ||
493 | install -d $build_dir | |
494 | cd $build_dir | |
495 | ||
496 | # We could optimize the cross builds size by --enable-shared but the produced | |
497 | # binaries may be less convenient in the embedded environment. | |
498 | AR_FOR_TARGET=%{_bindir}/$arch-ar \ | |
499 | AS_FOR_TARGET=%{_bindir}/$arch-as \ | |
500 | DLLTOOL_FOR_TARGET=%{_bindir}/$arch-dlltool \ | |
501 | LD_FOR_TARGET=%{_bindir}/$arch-ld \ | |
502 | NM_FOR_TARGET=%{_bindir}/$arch-nm \ | |
503 | OBJDUMP_FOR_TARGET=%{_bindir}/$arch-objdump \ | |
504 | RANLIB_FOR_TARGET=%{_bindir}/$arch-ranlib \ | |
505 | STRIP_FOR_TARGET=%{_bindir}/$arch-strip \ | |
506 | WINDRES_FOR_TARGET=%{_bindir}/$arch-windres \ | |
507 | WINDMC_FOR_TARGET=%{_bindir}/$arch-windmc \ | |
508 | CC="%{__cc}" \ | |
509 | CFLAGS="%{rpmcflags}" \ | |
510 | CXXFLAGS="%{rpmcxxflags}" \ | |
ec60f96f ER |
511 | LDFLAGS="-Wl,-z,relro" \ |
512 | ../configure \ | |
b5b0b447 ER |
513 | --bindir=%{_bindir} \ |
514 | --build=%{_target_platform} \ | |
515 | --datadir=%{_datadir} \ | |
516 | --disable-decimal-float \ | |
517 | --disable-dependency-tracking \ | |
518 | --disable-gold \ | |
519 | --disable-libgomp \ | |
520 | --disable-libmudflap \ | |
521 | --disable-libquadmath \ | |
522 | --disable-libssp \ | |
523 | --disable-nls \ | |
524 | --disable-plugin \ | |
525 | --disable-shared \ | |
526 | --disable-silent-rules \ | |
527 | --disable-sjlj-exceptions \ | |
528 | --disable-threads \ | |
529 | --with-ld=/usr/bin/$arch-ld \ | |
530 | --enable-checking=$checking \ | |
531 | --enable-gnu-unique-object \ | |
532 | --enable-initfini-array \ | |
533 | --enable-languages=c,c++ \ | |
534 | --enable-linker-build-id \ | |
535 | --enable-nls \ | |
536 | --enable-obsolete \ | |
537 | --enable-targets=all \ | |
538 | --exec-prefix=%{_exec_prefix} \ | |
539 | --host=%{_target_platform} \ | |
540 | --includedir=%{_includedir} \ | |
541 | --infodir=%{_infodir} \ | |
542 | --libexecdir=%{_libexecdir} \ | |
543 | --localstatedir=%{_localstatedir} \ | |
544 | --mandir=%{_mandir} \ | |
545 | --prefix=%{_prefix} \ | |
546 | --program-prefix=$prefix \ | |
547 | --sbindir=%{_sbindir} \ | |
548 | --sharedstatedir=%{_sharedstatedir} \ | |
549 | --sysconfdir=%{_sysconfdir} \ | |
550 | --target=$target \ | |
551 | --with-bugurl="http://bugs.pld-linux.org" \ | |
552 | --with-linker-hash-style=gnu \ | |
553 | --with-newlib \ | |
554 | --with-sysroot=%{_prefix}/$arch/sys-root \ | |
555 | --with-system-libunwind \ | |
556 | --with-system-zlib \ | |
557 | --without-headers \ | |
558 | %if %{with cloog} | |
559 | --with-isl=%{isl_install} --with-cloog=%{cloog_install} \ | |
560 | %else | |
561 | --without-isl --without-cloog \ | |
562 | %endif | |
563 | $CONFIG_FLAGS | |
564 | %if 0 | |
565 | --libdir=%{_libdir} # we want stuff in /usr/lib/gcc/ not /usr/lib64/gcc | |
566 | %endif | |
567 | cd .. | |
568 | } | |
569 | ||
ec60f96f | 570 | cd %{builddir}/%{srcdir} |
b5b0b447 ER |
571 | for target in $(cat target.list); do |
572 | config_target $target | |
573 | done | |
574 | ||
575 | build_target() { | |
576 | echo "=== BUILDING $1" | |
577 | ||
578 | arch=$1 | |
579 | build_dir=$1 | |
580 | ||
581 | AR_FOR_TARGET=%{_bindir}/$arch-ar \ | |
582 | AS_FOR_TARGET=%{_bindir}/$arch-as \ | |
583 | DLLTOOL_FOR_TARGET=%{_bindir}/$arch-dlltool \ | |
584 | LD_FOR_TARGET=%{_bindir}/$arch-ld \ | |
585 | NM_FOR_TARGET=%{_bindir}/$arch-nm \ | |
586 | OBJDUMP_FOR_TARGET=%{_bindir}/$arch-objdump \ | |
587 | RANLIB_FOR_TARGET=%{_bindir}/$arch-ranlib \ | |
588 | STRIP_FOR_TARGET=%{_bindir}/$arch-strip \ | |
589 | WINDRES_FOR_TARGET=%{_bindir}/$arch-windres \ | |
590 | WINDMC_FOR_TARGET=%{_bindir}/$arch-windmc \ | |
591 | %{__make} -C $build_dir tooldir=%{_prefix} all-gcc | |
592 | ||
593 | case $arch in | |
594 | %{no_libgcc_targets}) | |
595 | ;; | |
596 | *) | |
597 | %{__make} -C $build_dir tooldir=%{_prefix} all-target-libgcc | |
598 | ;; | |
599 | esac | |
600 | } | |
601 | ||
602 | for target in $(cat target.list); do | |
603 | build_target $target | |
604 | done | |
605 | ||
606 | %install | |
607 | rm -rf $RPM_BUILD_ROOT | |
608 | ||
609 | install_bin() { | |
610 | echo "=== INSTALLING $1" | |
611 | ||
612 | arch=$1 | |
613 | cpu=${1%%%%-*} | |
614 | ||
615 | case $arch in | |
616 | %{no_libgcc_targets}) with_libgcc="";; | |
617 | *) with_libgcc="install-target-libgcc";; | |
618 | esac | |
619 | ||
620 | %{__make} -C $arch DESTDIR=$RPM_BUILD_ROOT install-gcc ${with_libgcc} | |
621 | ||
622 | # We want links for ppc and ppc64 also if we make powerpc or powerpc64 | |
623 | case $cpu in | |
624 | powerpc*) | |
625 | cd $RPM_BUILD_ROOT%{_bindir} | |
626 | for i in $cpu-*; do | |
627 | ln -s $i ppc${i#powerpc} | |
628 | done | |
629 | cd - | |
630 | ;; | |
631 | esac | |
632 | } | |
633 | ||
ec60f96f | 634 | cd %{builddir}/%{srcdir} |
b5b0b447 ER |
635 | for target in $(cat target.list); do |
636 | install -d $RPM_BUILD_ROOT%{_prefix}/$target/sys-root | |
637 | install_bin $target | |
638 | done | |
639 | ||
640 | grep ^powerpc target.list | sed -e s/powerpc/ppc/ > symlink-target.list | |
641 | ||
642 | # We have to copy cloog somewhere graphite can dlopen it from | |
643 | %if %{with cloog} | |
644 | for i in $RPM_BUILD_ROOT%{_prefix}/lib/gcc/*/%{version}; do | |
645 | cp -a %{cloog_install}/lib/libcloog-isl.so.4 $i | |
646 | done | |
647 | %endif | |
648 | ||
649 | # For cross-gcc we drop the documentation. | |
650 | rm -rf $RPM_BUILD_ROOT%{_infodir} | |
651 | ||
652 | # Remove binaries we will not be including, so that they don't end up in | |
653 | # gcc-debuginfo | |
654 | rm -f $RPM_BUILD_ROOT%{_libdir}/{libffi*,libiberty.a} | |
655 | rm -f $RPM_BUILD_ROOT%{_libexecdir}/gcc/*/%{version}/install-tools/{mkheaders,fixincl} | |
656 | rm -f $RPM_BUILD_ROOT%{_bindir}/*-gcc-%{version} || : | |
657 | rm -f $RPM_BUILD_ROOT%{_bindir}/*-ar || : | |
658 | rm -f $RPM_BUILD_ROOT%{_bindir}/*-nm || : | |
659 | rm -f $RPM_BUILD_ROOT%{_bindir}/*-ranlib || : | |
660 | rmdir $RPM_BUILD_ROOT%{_includedir} | |
661 | ||
662 | find $RPM_BUILD_ROOT%{_datadir} -name gcc.mo | | |
663 | while read x; do | |
664 | y=$(dirname $x) | |
665 | mv $x $y/cross-gcc.mo | |
666 | done | |
667 | ||
ec60f96f | 668 | cd %{builddir} |
b5b0b447 ER |
669 | %find_lang cross-gcc |
670 | ||
671 | rm $RPM_BUILD_ROOT%{_mandir}/man7/*.7 | |
672 | rmdir $RPM_BUILD_ROOT%{_mandir}/man7 | |
673 | ||
674 | # All the installed manual pages and translation files for each program are the | |
675 | # same, so symlink them to the common package | |
676 | cd $RPM_BUILD_ROOT%{_mandir}/man1 | |
677 | for i in cross-cpp.1 cross-gcc.1 cross-g++.1 cross-gcov.1; do | |
678 | j=${i#cross-} | |
679 | ||
680 | for k in *-$j; do | |
681 | if [ $k != $i -a ! -L $k ]; then | |
682 | mv $k $i | |
683 | ln -s $i $k | |
684 | fi | |
685 | done | |
686 | done | |
687 | ||
688 | # Add manpages the additional symlink-only targets | |
689 | %if %{with powerpc}%{with powerpc64} | |
690 | for i in powerpc*; do | |
691 | ln -s $i ppc${i#powerpc} | |
692 | done | |
693 | %endif | |
694 | cd - | |
695 | ||
696 | install_lang() { | |
697 | arch=$1 | |
698 | cpu=${arch%%%%-*} | |
699 | ||
700 | case $cpu in | |
701 | avr32) target_cpu=avr;; | |
702 | bfin) target_cpu=bfin;; | |
703 | h8300) target_cpu=h8300;; | |
704 | mn10300) target_cpu=am33_2.0;; | |
705 | openrisc) target_cpu=openrisc;; | |
706 | parisc) target_cpu=hppa;; | |
707 | score) target_cpu=score;; | |
708 | tile) target_cpu=tilegx;; | |
709 | v850) target_cpu=v850e;; | |
710 | x86) target_cpu=x86_64;; | |
711 | *) target_cpu=$cpu;; | |
712 | esac | |
713 | ||
714 | ( | |
715 | echo "%%defattr(-,root,root,-)" | |
716 | echo "%{_bindir}/$arch*-cpp" | |
717 | echo "%{_bindir}/$arch*-gcc" | |
718 | echo "%{_bindir}/$arch*-gcov" | |
719 | echo "%{_mandir}/man1/$arch*-cpp*" | |
720 | echo "%{_mandir}/man1/$arch*-gcc*" | |
721 | echo "%{_mandir}/man1/$arch*-gcov*" | |
722 | case $cpu in | |
ec60f96f | 723 | ppc*|ppc64*) |
b5b0b447 | 724 | ;; |
ec60f96f | 725 | *) |
b5b0b447 ER |
726 | echo "/usr/lib/gcc/$target_cpu-*/" |
727 | echo "%{_libexecdir}/gcc/$target_cpu*/*/cc1" | |
728 | echo "%{_libexecdir}/gcc/$target_cpu*/*/collect2" | |
729 | echo "%{_libexecdir}/gcc/$target_cpu*/*/[abd-z]*" | |
730 | echo "%{_prefix}/$arch/sys-root" | |
731 | esac | |
732 | ||
733 | ) >files.$arch | |
734 | ||
735 | ( | |
736 | echo "%%defattr(-,root,root,-)" | |
737 | echo "%{_bindir}/$arch*-c++" | |
738 | echo "%{_bindir}/$arch*-g++" | |
739 | echo "%{_mandir}/man1/$arch*-g++*" | |
740 | case $cpu in | |
ec60f96f | 741 | ppc*|ppc64*) |
b5b0b447 | 742 | ;; |
ec60f96f | 743 | *) |
b5b0b447 ER |
744 | echo "%{_libexecdir}/gcc/$target_cpu*/*/cc1plus" |
745 | esac | |
746 | ) > files-c++.$arch | |
747 | } | |
748 | ||
ec60f96f ER |
749 | cd %{builddir} |
750 | for target in $(cat %{srcdir}/target.list %{srcdir}/symlink-target.list); do | |
b5b0b447 ER |
751 | install_lang $target |
752 | done | |
753 | ||
754 | %define __ar_no_strip $RPM_BUILD_DIR/%{name}-%{version}/ar-no-strip | |
755 | cat >%{__ar_no_strip} <<'EOF' | |
756 | #!/bin/sh | |
757 | f=$2 | |
758 | if [ ${f##*/} = libgcc.a -o ${f##*/} = libgcov.a ]; then | |
759 | : | |
760 | else | |
761 | %{__strip} $* | |
762 | fi | |
763 | EOF | |
764 | chmod +x %{__ar_no_strip} | |
765 | %undefine __strip | |
766 | %define __strip %{__ar_no_strip} | |
767 | ||
768 | %clean | |
769 | rm -rf $RPM_BUILD_ROOT | |
770 | ||
771 | %files common -f cross-gcc.lang | |
772 | %doc %{srcdir}/COPYING* | |
773 | %doc %{srcdir}/README | |
774 | %{_mandir}/man1/cross-* | |
775 | ||
776 | %define do_files() \ | |
777 | %files -n gcc-%1 -f files.%1 \ | |
778 | %files -n gcc-c++-%1 -f files-c++.%1 \ | |
779 | ||
780 | %{?with_alpha:%do_files alpha-linux-gnu} | |
781 | %{?with_arm:%do_files arm-linux-gnu} | |
782 | %{?with_aarch64:%do_files aarch64-linux-gnu} | |
783 | %{?with_avr32:%do_files avr32-linux-gnu} | |
784 | %{?with_blackfin:%do_files bfin-linux-gnu} | |
785 | %{?with_c6x:%do_files c6x-linux-gnu} | |
786 | %{?with_cris:%do_files cris-linux-gnu} | |
787 | %{?with_frv:%do_files frv-linux-gnu} | |
788 | %{?with_h8300:%do_files h8300-linux-gnu} | |
789 | %{?with_hppa:%do_files hppa-linux-gnu} | |
790 | %{?with_hppa64:%do_files hppa64-linux-gnu} | |
791 | %{?with_i386:%do_files i386-linux-gnu} | |
792 | %{?with_ia64:%do_files ia64-linux-gnu} | |
793 | %{?with_m32r:%do_files m32r-linux-gnu} | |
794 | %{?with_m68k:%do_files m68k-linux-gnu} | |
795 | %{?with_metag:%do_files metag-linux-gnu} | |
796 | %{?with_microblaze:%do_files microblaze-linux-gnu} | |
797 | %{?with_mips:%do_files mips-linux-gnu} | |
798 | %{?with_mips64:%do_files mips64-linux-gnu} | |
799 | %{?with_mn10300:%do_files mn10300-linux-gnu} | |
800 | %{?with_nios2:%do_files nios2-linux-gnu} | |
801 | %{?with_openrisc:%do_files openrisc-linux-gnu} | |
802 | %{?with_powerpc:%do_files powerpc-linux-gnu} | |
803 | %{?with_powerpc64:%do_files powerpc64-linux-gnu} | |
804 | %{?with_powerpc:%do_files ppc-linux-gnu} | |
805 | %{?with_powerpc64:%do_files ppc64-linux-gnu} | |
806 | %{?with_s390:%do_files s390-linux-gnu} | |
807 | %{?with_s390x:%do_files s390x-linux-gnu} | |
808 | %{?with_score:%do_files score-linux-gnu} | |
809 | %{?with_sh:%do_files sh-linux-gnu} | |
810 | %{?with_sh4:%do_files sh4-linux-gnu} | |
811 | %{?with_sh64:%do_files sh64-linux-gnu} | |
812 | %{?with_sparc:%do_files sparc-linux-gnu} | |
813 | %{?with_sparc64:%do_files sparc64-linux-gnu} | |
814 | %{?with_tile:%do_files tile-linux-gnu} | |
815 | %{?with_unicore32:%do_files unicore32-linux-gnu} | |
816 | %{?with_x86_64:%do_files x86_64-linux-gnu} | |
817 | %{?with_xtensa:%do_files xtensa-linux-gnu} |