]>
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 | ||
b5b0b447 ER |
149 | %description |
150 | Cross-build GNU C compiler collection. | |
151 | ||
152 | %package common | |
153 | Summary: Cross-build GNU C compiler documentation and translation files | |
154 | Group: Development/Languages | |
155 | %if "%{_rpmversion}" >= "5" | |
156 | BuildArch: noarch | |
157 | %endif | |
158 | ||
159 | %description common | |
160 | Documentation, manual pages and translation files for cross-build GNU | |
161 | C compiler. | |
162 | ||
163 | This is the common part of a set of cross-build GNU C compiler | |
164 | packages for building kernels for other architectures. No support for | |
165 | cross-building user space programs is currently supplied as that would | |
166 | massively multiply the number of packages. | |
167 | ||
168 | %define do_package() \ | |
169 | %if %{expand:%%{?with_%{2}:1}%%{!?with_%{2}:0}} \ | |
170 | %package -n gcc-%1 \ | |
171 | Summary: Cross-build binary utilities for %1 \ | |
172 | Group: Development/Languages \ | |
173 | BuildRequires: binutils-%1 >= %{cross_binutils_version}\ | |
174 | Requires: %{name}-common = %{version}-%{release}\ | |
175 | Requires: binutils-%1 >= %{cross_binutils_version}\ | |
176 | \ | |
177 | %description -n gcc-%1 \ | |
178 | Cross-build GNU C compiler. \ | |
179 | \ | |
180 | Only building kernels is currently supported. Support for cross-building \ | |
181 | user space programs is not currently provided as that would massively multiply \ | |
182 | the number of packages. \ | |
183 | \ | |
184 | %package -n gcc-c++-%1 \ | |
185 | Summary: Cross-build binary utilities for %1 \ | |
186 | Group: Development/Languages \ | |
187 | Requires: gcc-%1 = %{version}-%{release}\ | |
188 | \ | |
189 | %description -n gcc-c++-%1 \ | |
190 | Cross-build GNU C++ compiler. \ | |
191 | \ | |
192 | Only the compiler is provided; not libstdc++. Support for cross-building \ | |
193 | user space programs is not currently provided as that would massively multiply \ | |
194 | the number of packages. \ | |
195 | %endif | |
196 | ||
197 | %define do_symlink() \ | |
198 | %if %{expand:%%{?with_%{2}:1}%%{!?with_%{2}:0}} \ | |
199 | %package -n gcc-%1 \ | |
200 | Summary: Cross-build binary utilities for %1 \ | |
201 | Group: Development/Languages \ | |
202 | Requires: gcc-%3 = %{version}-%{release}\ | |
203 | \ | |
204 | %description -n gcc-%1 \ | |
205 | Cross-build GNU C++ compiler. \ | |
206 | \ | |
207 | Only building kernels is currently supported. Support for cross-building \ | |
208 | user space programs is not currently provided as that would massively multiply \ | |
209 | the number of packages. \ | |
210 | \ | |
211 | %package -n gcc-c++-%1 \ | |
212 | Summary: Cross-build binary utilities for %1 \ | |
213 | Group: Development/Languages \ | |
214 | Requires: gcc-%1 = %{version}-%{release}\ | |
215 | Requires: gcc-c++-%3 = %{version}-%{release}\ | |
216 | \ | |
217 | %description -n gcc-c++-%1 \ | |
218 | Cross-build GNU C++ compiler. \ | |
219 | \ | |
220 | Only the compiler is provided; not libstdc++. Support for cross-building \ | |
221 | user space programs is not currently provided as that would massively multiply \ | |
222 | the number of packages. \ | |
223 | %endif | |
224 | ||
225 | %do_package alpha-linux-gnu alpha | |
226 | %do_package arm-linux-gnu arm | |
227 | %do_package aarch64-linux-gnu aarch64 | |
228 | %do_package avr32-linux-gnu avr32 | |
229 | %do_package bfin-linux-gnu blackfin | |
230 | %do_package c6x-linux-gnu c6x | |
231 | %do_package cris-linux-gnu cris | |
232 | %do_package frv-linux-gnu frv | |
233 | %do_package h8300-linux-gnu h8300 | |
234 | %do_package hppa-linux-gnu hppa | |
235 | %do_package hppa64-linux-gnu hppa64 | |
236 | %do_package i386-linux-gnu i386 | |
237 | %do_package ia64-linux-gnu ia64 | |
238 | %do_package m32r-linux-gnu m32r | |
239 | %do_package m68k-linux-gnu m68k | |
240 | %do_package metag-linux-gnu metag | |
241 | %do_package microblaze-linux-gnu microblaze | |
242 | %do_package mips-linux-gnu mips | |
243 | %do_package mips64-linux-gnu mips64 | |
244 | %do_package mn10300-linux-gnu mn10300 | |
245 | %do_package nios2-linux-gnu nios2 | |
246 | %do_package openrisc-linux-gnu openrisc | |
247 | %do_package powerpc-linux-gnu powerpc | |
248 | %do_package powerpc64-linux-gnu powerpc64 | |
249 | %do_symlink ppc-linux-gnu powerpc powerpc-linux-gnu | |
250 | %do_symlink ppc64-linux-gnu powerpc64 powerpc64-linux-gnu | |
251 | %do_package s390-linux-gnu s390 | |
252 | %do_package s390x-linux-gnu s390x | |
253 | %do_package score-linux-gnu score | |
254 | %do_package sh-linux-gnu sh | |
255 | %do_package sh4-linux-gnu sh4 | |
256 | %do_package sh64-linux-gnu sh64 | |
257 | %do_package sparc-linux-gnu sparc | |
258 | %do_package sparc64-linux-gnu sparc64 | |
259 | %do_package tile-linux-gnu tile | |
260 | %do_package unicore32-linux-gnu unicore32 | |
261 | %do_package x86_64-linux-gnu x86_64 | |
262 | %do_package xtensa-linux-gnu xtensa | |
263 | ||
264 | %prep | |
265 | %setup -qc -a 1 -a 2 | |
266 | cd %{srcdir} | |
267 | %patch0 -p0 | |
268 | %patch1 -p0 | |
269 | %patch2 -p0 | |
270 | %patch3 -p0 | |
271 | %patch4 -p0 | |
272 | %patch5 -p0 | |
273 | %patch6 -p0 | |
274 | %patch7 -p0 | |
275 | %if %{with cloog} | |
276 | %patch8 -p0 | |
277 | %patch9 -p0 | |
278 | %endif | |
279 | %patch10 -p0 | |
280 | # % if %{with libstdcxx_docs} | |
281 | # % patch11 -p0 | |
282 | # % endif | |
283 | %patch12 -p0 | |
284 | %patch13 -p0 | |
285 | %patch14 -p0 | |
286 | rm -f libgo/go/crypto/elliptic/p224{,_test}.go | |
287 | %patch15 -p0 | |
288 | %patch16 -p0 | |
289 | %patch17 -p0 | |
290 | ||
291 | %patch900 -p0 | |
292 | %patch901 -p1 | |
293 | %patch903 -p0 | |
294 | %patch904 -p0 | |
295 | ||
296 | cd .. | |
297 | %patch1100 -p0 | |
298 | cd %{srcdir} | |
299 | ||
300 | # Move the version number back | |
301 | sed -i -e 's/4\.9\.3/4.9.2/' gcc/BASE-VER | |
302 | echo 'PLD-Linux Cross %{version}-%{release}' > gcc/DEV-PHASE | |
303 | ||
304 | # Default to -gdwarf-4 -fno-debug-types-section rather than -gdwarf-2 | |
305 | sed -i '/UInteger Var(dwarf_version)/s/Init(2)/Init(4)/' gcc/common.opt | |
306 | sed -i '/flag_debug_types_section/s/Init(1)/Init(0)/' gcc/common.opt | |
307 | sed -i '/dwarf_record_gcc_switches/s/Init(0)/Init(1)/' gcc/common.opt | |
308 | sed -i 's/\(may be either 2, 3 or 4; the default version is \)2\./\14./' gcc/doc/invoke.texi | |
309 | ||
310 | ./contrib/gcc_update --touch | |
311 | ||
312 | LC_ALL=C sed -i -e 's/\xa0/ /' gcc/doc/options.texi | |
313 | ||
314 | cat > target.list <<EOF | |
315 | %{?with_alpha:alpha-linux-gnu} | |
316 | %{?with_arm:arm-linux-gnu} | |
317 | %{?with_aarch64:aarch64-linux-gnu} | |
318 | %{?with_avr32:avr32-linux-gnu} | |
319 | %{?with_blackfin:bfin-linux-gnu} | |
320 | %{?with_c6x:c6x-linux-gnu} | |
321 | %{?with_cris:cris-linux-gnu} | |
322 | %{?with_frv:frv-linux-gnu} | |
323 | %{?with_h8300:h8300-linux-gnu} | |
324 | %{?with_hppa:hppa-linux-gnu} | |
325 | %{?with_hppa64:hppa64-linux-gnu} | |
326 | %{?with_i386:i386-linux-gnu} | |
327 | %{?with_ia64:ia64-linux-gnu} | |
328 | %{?with_m32r:m32r-linux-gnu} | |
329 | %{?with_m68k:m68k-linux-gnu} | |
330 | %{?with_metag:metag-linux-gnu} | |
331 | %{?with_microblaze:microblaze-linux-gnu} | |
332 | %{?with_mips:mips-linux-gnu} | |
333 | %{?with_mips64:mips64-linux-gnu} | |
334 | %{?with_mn10300:mn10300-linux-gnu} | |
335 | %{?with_nios2:nios2-linux-gnu} | |
336 | %{?with_openrisc:openrisc-linux-gnu} | |
337 | %{?with_powerpc:powerpc-linux-gnu} | |
338 | %{?with_powerpc64:powerpc64-linux-gnu} | |
339 | %{?with_s390:s390-linux-gnu} | |
340 | %{?with_s390x:s390x-linux-gnu} | |
341 | %{?with_score:score-linux-gnu} | |
342 | %{?with_sh:sh-linux-gnu} | |
343 | %{?with_sh4:sh4-linux-gnu} | |
344 | %{?with_sh64:sh64-linux-gnu} | |
345 | %{?with_sparc:sparc-linux-gnu} | |
346 | %{?with_sparc64:sparc64-linux-gnu} | |
347 | %{?with_tile:tile-linux-gnu} | |
348 | %{?with_unicore32:unicore32-linux-gnu} | |
349 | %{?with_x86_64:x86_64-linux-gnu} | |
350 | %{?with_xtensa:xtensa-linux-gnu} | |
351 | EOF | |
352 | ||
353 | if [ $(wc -w < target.list) = 0 ]; then | |
354 | echo >&2 "No targets selected" | |
355 | exit 8 | |
356 | fi | |
357 | ||
358 | %build | |
359 | ||
360 | # Undo the broken autoconf change in recent Fedora versions | |
361 | export CONFIG_SITE=NONE | |
362 | ||
363 | # | |
364 | # Configure and build the ISL and CLooG libraries | |
365 | # | |
366 | %if %{with cloog} | |
367 | ||
368 | %define isl_source %{builddir}/isl-%{isl_version} | |
369 | %define isl_build %{builddir}/isl-build | |
370 | %define isl_install %{builddir}/isl-install | |
371 | ||
372 | mkdir %{isl_build} %{isl_install} | |
373 | %ifarch s390 s390x | |
374 | ISL_FLAG_PIC=-fPIC | |
375 | %else | |
376 | ISL_FLAG_PIC=-fpic | |
377 | %endif | |
378 | cd %{isl_build} | |
379 | %{isl_source}/configure \ | |
380 | --disable-silent-rules \ | |
381 | --disable-shared \ | |
382 | CC="%{__cc}" \ | |
383 | CXX="%{__cxx}" \ | |
384 | CFLAGS="${CFLAGS:-%rpmcflags} $ISL_FLAG_PIC" \ | |
385 | --prefix=%{isl_install} | |
386 | %{__make} | |
387 | %{__make} install | |
388 | cd .. | |
389 | ||
390 | %define cloog_source %{builddir}/cloog-%{cloog_version} | |
391 | %define cloog_build %{builddir}/cloog-build | |
392 | %define cloog_install %{builddir}/cloog-install | |
393 | ||
394 | install -d %{cloog_build} %{builddir}/cloog-install | |
395 | cd %{cloog_build} | |
396 | cat >> %{cloog_source}/source/isl/constraints.c << \EOF | |
397 | #include <isl/flow.h> | |
398 | static void __attribute__((used)) *s1 = (void *) isl_union_map_compute_flow; | |
399 | static void __attribute__((used)) *s2 = (void *) isl_map_dump; | |
400 | EOF | |
401 | sed -i 's|libcloog|libgcc49privatecloog|g' %{cloog_source}/{,test/}Makefile.{am,in} | |
402 | ||
403 | %{cloog_source}/configure \ | |
404 | --disable-silent-rules \ | |
405 | --with-isl=system \ | |
406 | --with-isl-prefix=%{isl_install} \ | |
407 | CC="%{__cc}" \ | |
408 | CXX="%{__cxx}" \ | |
409 | CFLAGS="${CFLAGS:-%rpmcflags}" \ | |
410 | CXXFLAGS="${CXXFLAGS:-%rpmcxxflags}" \ | |
411 | --prefix=%{cloog_install} | |
412 | sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool | |
413 | sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool | |
414 | %{__make} | |
415 | %{__make} install | |
416 | cd %{cloog_install}/lib | |
417 | rm libgcc49privatecloog-isl.so{,.4} | |
418 | mv libgcc49privatecloog-isl.so.4.0.0 libcloog-isl.so.4 | |
419 | ln -sf libcloog-isl.so.4 libcloog-isl.so | |
420 | ln -sf libcloog-isl.so.4 libcloog.so | |
421 | ||
422 | %endif | |
423 | ||
424 | # | |
425 | # Configure the compiler | |
426 | # | |
427 | cd %{builddir} | |
428 | config_target() { | |
429 | echo "=== CONFIGURING $1" | |
430 | ||
431 | arch=$1 | |
432 | prefix=$arch- | |
433 | build_dir=$1 | |
434 | ||
435 | case $arch in | |
436 | arm-*) target=arm-linux-gnueabi;; | |
437 | aarch64-*) target=aarch64-linux-gnu;; | |
438 | avr32-*) target=avr-linux;; | |
439 | bfin-*) target=bfin-uclinux;; | |
440 | c6x-*) target=c6x-uclinux;; | |
441 | h8300-*) target=h8300-elf;; | |
442 | mn10300-*) target=am33_2.0-linux;; | |
443 | m68knommu-*) target=m68k-linux;; | |
444 | openrisc-*) target=or32-linux;; | |
445 | parisc-*) target=hppa-linux;; | |
446 | score-*) target=score-elf;; | |
447 | sh64-*) target=sh64-linux;; | |
448 | tile-*) target=tilegx-linux;; | |
449 | v850-*) target=v850e-linux;; | |
450 | x86-*) target=x86_64-linux;; | |
451 | *) target=$arch;; | |
452 | esac | |
453 | ||
454 | echo $arch: target is $target | |
455 | #export CFLAGS="$RPM_OPT_FLAGS" | |
456 | ||
457 | CONFIG_FLAGS= | |
458 | case $arch in | |
459 | arm) | |
460 | 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" | |
461 | ;; | |
462 | powerpc-*|powerpc64-*) | |
463 | CONFIG_FLAGS="--with-cpu-32=power4 --with-tune-32=power6 --with-cpu-64=power4 --with-tune-64=power6 --enable-secureplt" | |
464 | ;; | |
465 | s390*-*) | |
466 | CONFIG_FLAGS="--with-arch=z9-109 --with-tune=z10 --enable-decimal-float" | |
467 | ;; | |
468 | sh-*) | |
469 | CONFIG_FLAGS="--with-multilib-list=m1,m2,m2e,m4,m4-single,m4-single-only,m2a,m2a-single,!m2a,!m2a-single" | |
470 | ;; | |
471 | sh64-*) | |
472 | CONFIG_FLAGS="--with-multilib-list=m5-32media,m5-32media-nofpu,m5-compact,m5-compact-nofpu,m5-64media,m5-64media-nofpu" | |
473 | ;; | |
474 | sparc-*) | |
475 | CONFIG_FLAGS="--disable-linux-futex" | |
476 | ;; | |
477 | tile-*) | |
478 | #CONFIG_FLAGS="--with-arch_32=tilepro" | |
479 | ;; | |
480 | x86-*) | |
481 | CONFIG_FLAGS="--with-arch_32=i686" | |
482 | ;; | |
483 | esac | |
484 | ||
485 | case $arch in | |
486 | alpha|powerpc*|s390*|sparc*) | |
487 | CONFIG_FLAGS="$CONFIG_FLAGS --with-long-double-128" ;; | |
488 | esac | |
489 | ||
490 | install -d $build_dir | |
491 | cd $build_dir | |
492 | ||
493 | # We could optimize the cross builds size by --enable-shared but the produced | |
494 | # binaries may be less convenient in the embedded environment. | |
495 | AR_FOR_TARGET=%{_bindir}/$arch-ar \ | |
496 | AS_FOR_TARGET=%{_bindir}/$arch-as \ | |
497 | DLLTOOL_FOR_TARGET=%{_bindir}/$arch-dlltool \ | |
498 | LD_FOR_TARGET=%{_bindir}/$arch-ld \ | |
499 | NM_FOR_TARGET=%{_bindir}/$arch-nm \ | |
500 | OBJDUMP_FOR_TARGET=%{_bindir}/$arch-objdump \ | |
501 | RANLIB_FOR_TARGET=%{_bindir}/$arch-ranlib \ | |
502 | STRIP_FOR_TARGET=%{_bindir}/$arch-strip \ | |
503 | WINDRES_FOR_TARGET=%{_bindir}/$arch-windres \ | |
504 | WINDMC_FOR_TARGET=%{_bindir}/$arch-windmc \ | |
505 | CC="%{__cc}" \ | |
506 | CFLAGS="%{rpmcflags}" \ | |
507 | CXXFLAGS="%{rpmcxxflags}" \ | |
508 | LDFLAGS="-Wl,-z,relro " \ | |
509 | ../%{srcdir}/configure \ | |
510 | --bindir=%{_bindir} \ | |
511 | --build=%{_target_platform} \ | |
512 | --datadir=%{_datadir} \ | |
513 | --disable-decimal-float \ | |
514 | --disable-dependency-tracking \ | |
515 | --disable-gold \ | |
516 | --disable-libgomp \ | |
517 | --disable-libmudflap \ | |
518 | --disable-libquadmath \ | |
519 | --disable-libssp \ | |
520 | --disable-nls \ | |
521 | --disable-plugin \ | |
522 | --disable-shared \ | |
523 | --disable-silent-rules \ | |
524 | --disable-sjlj-exceptions \ | |
525 | --disable-threads \ | |
526 | --with-ld=/usr/bin/$arch-ld \ | |
527 | --enable-checking=$checking \ | |
528 | --enable-gnu-unique-object \ | |
529 | --enable-initfini-array \ | |
530 | --enable-languages=c,c++ \ | |
531 | --enable-linker-build-id \ | |
532 | --enable-nls \ | |
533 | --enable-obsolete \ | |
534 | --enable-targets=all \ | |
535 | --exec-prefix=%{_exec_prefix} \ | |
536 | --host=%{_target_platform} \ | |
537 | --includedir=%{_includedir} \ | |
538 | --infodir=%{_infodir} \ | |
539 | --libexecdir=%{_libexecdir} \ | |
540 | --localstatedir=%{_localstatedir} \ | |
541 | --mandir=%{_mandir} \ | |
542 | --prefix=%{_prefix} \ | |
543 | --program-prefix=$prefix \ | |
544 | --sbindir=%{_sbindir} \ | |
545 | --sharedstatedir=%{_sharedstatedir} \ | |
546 | --sysconfdir=%{_sysconfdir} \ | |
547 | --target=$target \ | |
548 | --with-bugurl="http://bugs.pld-linux.org" \ | |
549 | --with-linker-hash-style=gnu \ | |
550 | --with-newlib \ | |
551 | --with-sysroot=%{_prefix}/$arch/sys-root \ | |
552 | --with-system-libunwind \ | |
553 | --with-system-zlib \ | |
554 | --without-headers \ | |
555 | %if %{with cloog} | |
556 | --with-isl=%{isl_install} --with-cloog=%{cloog_install} \ | |
557 | %else | |
558 | --without-isl --without-cloog \ | |
559 | %endif | |
560 | $CONFIG_FLAGS | |
561 | %if 0 | |
562 | --libdir=%{_libdir} # we want stuff in /usr/lib/gcc/ not /usr/lib64/gcc | |
563 | %endif | |
564 | cd .. | |
565 | } | |
566 | ||
567 | for target in $(cat target.list); do | |
568 | config_target $target | |
569 | done | |
570 | ||
571 | build_target() { | |
572 | echo "=== BUILDING $1" | |
573 | ||
574 | arch=$1 | |
575 | build_dir=$1 | |
576 | ||
577 | AR_FOR_TARGET=%{_bindir}/$arch-ar \ | |
578 | AS_FOR_TARGET=%{_bindir}/$arch-as \ | |
579 | DLLTOOL_FOR_TARGET=%{_bindir}/$arch-dlltool \ | |
580 | LD_FOR_TARGET=%{_bindir}/$arch-ld \ | |
581 | NM_FOR_TARGET=%{_bindir}/$arch-nm \ | |
582 | OBJDUMP_FOR_TARGET=%{_bindir}/$arch-objdump \ | |
583 | RANLIB_FOR_TARGET=%{_bindir}/$arch-ranlib \ | |
584 | STRIP_FOR_TARGET=%{_bindir}/$arch-strip \ | |
585 | WINDRES_FOR_TARGET=%{_bindir}/$arch-windres \ | |
586 | WINDMC_FOR_TARGET=%{_bindir}/$arch-windmc \ | |
587 | %{__make} -C $build_dir tooldir=%{_prefix} all-gcc | |
588 | ||
589 | case $arch in | |
590 | %{no_libgcc_targets}) | |
591 | ;; | |
592 | *) | |
593 | %{__make} -C $build_dir tooldir=%{_prefix} all-target-libgcc | |
594 | ;; | |
595 | esac | |
596 | } | |
597 | ||
598 | for target in $(cat target.list); do | |
599 | build_target $target | |
600 | done | |
601 | ||
602 | %install | |
603 | rm -rf $RPM_BUILD_ROOT | |
604 | ||
605 | install_bin() { | |
606 | echo "=== INSTALLING $1" | |
607 | ||
608 | arch=$1 | |
609 | cpu=${1%%%%-*} | |
610 | ||
611 | case $arch in | |
612 | %{no_libgcc_targets}) with_libgcc="";; | |
613 | *) with_libgcc="install-target-libgcc";; | |
614 | esac | |
615 | ||
616 | %{__make} -C $arch DESTDIR=$RPM_BUILD_ROOT install-gcc ${with_libgcc} | |
617 | ||
618 | # We want links for ppc and ppc64 also if we make powerpc or powerpc64 | |
619 | case $cpu in | |
620 | powerpc*) | |
621 | cd $RPM_BUILD_ROOT%{_bindir} | |
622 | for i in $cpu-*; do | |
623 | ln -s $i ppc${i#powerpc} | |
624 | done | |
625 | cd - | |
626 | ;; | |
627 | esac | |
628 | } | |
629 | ||
630 | for target in $(cat target.list); do | |
631 | install -d $RPM_BUILD_ROOT%{_prefix}/$target/sys-root | |
632 | install_bin $target | |
633 | done | |
634 | ||
635 | grep ^powerpc target.list | sed -e s/powerpc/ppc/ > symlink-target.list | |
636 | ||
637 | # We have to copy cloog somewhere graphite can dlopen it from | |
638 | %if %{with cloog} | |
639 | for i in $RPM_BUILD_ROOT%{_prefix}/lib/gcc/*/%{version}; do | |
640 | cp -a %{cloog_install}/lib/libcloog-isl.so.4 $i | |
641 | done | |
642 | %endif | |
643 | ||
644 | # For cross-gcc we drop the documentation. | |
645 | rm -rf $RPM_BUILD_ROOT%{_infodir} | |
646 | ||
647 | # Remove binaries we will not be including, so that they don't end up in | |
648 | # gcc-debuginfo | |
649 | rm -f $RPM_BUILD_ROOT%{_libdir}/{libffi*,libiberty.a} | |
650 | rm -f $RPM_BUILD_ROOT%{_libexecdir}/gcc/*/%{version}/install-tools/{mkheaders,fixincl} | |
651 | rm -f $RPM_BUILD_ROOT%{_bindir}/*-gcc-%{version} || : | |
652 | rm -f $RPM_BUILD_ROOT%{_bindir}/*-ar || : | |
653 | rm -f $RPM_BUILD_ROOT%{_bindir}/*-nm || : | |
654 | rm -f $RPM_BUILD_ROOT%{_bindir}/*-ranlib || : | |
655 | rmdir $RPM_BUILD_ROOT%{_includedir} | |
656 | ||
657 | find $RPM_BUILD_ROOT%{_datadir} -name gcc.mo | | |
658 | while read x; do | |
659 | y=$(dirname $x) | |
660 | mv $x $y/cross-gcc.mo | |
661 | done | |
662 | ||
663 | %find_lang cross-gcc | |
664 | ||
665 | rm $RPM_BUILD_ROOT%{_mandir}/man7/*.7 | |
666 | rmdir $RPM_BUILD_ROOT%{_mandir}/man7 | |
667 | ||
668 | # All the installed manual pages and translation files for each program are the | |
669 | # same, so symlink them to the common package | |
670 | cd $RPM_BUILD_ROOT%{_mandir}/man1 | |
671 | for i in cross-cpp.1 cross-gcc.1 cross-g++.1 cross-gcov.1; do | |
672 | j=${i#cross-} | |
673 | ||
674 | for k in *-$j; do | |
675 | if [ $k != $i -a ! -L $k ]; then | |
676 | mv $k $i | |
677 | ln -s $i $k | |
678 | fi | |
679 | done | |
680 | done | |
681 | ||
682 | # Add manpages the additional symlink-only targets | |
683 | %if %{with powerpc}%{with powerpc64} | |
684 | for i in powerpc*; do | |
685 | ln -s $i ppc${i#powerpc} | |
686 | done | |
687 | %endif | |
688 | cd - | |
689 | ||
690 | install_lang() { | |
691 | arch=$1 | |
692 | cpu=${arch%%%%-*} | |
693 | ||
694 | case $cpu in | |
695 | avr32) target_cpu=avr;; | |
696 | bfin) target_cpu=bfin;; | |
697 | h8300) target_cpu=h8300;; | |
698 | mn10300) target_cpu=am33_2.0;; | |
699 | openrisc) target_cpu=openrisc;; | |
700 | parisc) target_cpu=hppa;; | |
701 | score) target_cpu=score;; | |
702 | tile) target_cpu=tilegx;; | |
703 | v850) target_cpu=v850e;; | |
704 | x86) target_cpu=x86_64;; | |
705 | *) target_cpu=$cpu;; | |
706 | esac | |
707 | ||
708 | ( | |
709 | echo "%%defattr(-,root,root,-)" | |
710 | echo "%{_bindir}/$arch*-cpp" | |
711 | echo "%{_bindir}/$arch*-gcc" | |
712 | echo "%{_bindir}/$arch*-gcov" | |
713 | echo "%{_mandir}/man1/$arch*-cpp*" | |
714 | echo "%{_mandir}/man1/$arch*-gcc*" | |
715 | echo "%{_mandir}/man1/$arch*-gcov*" | |
716 | case $cpu in | |
717 | ppc*|ppc64*) | |
718 | ;; | |
719 | *) | |
720 | echo "/usr/lib/gcc/$target_cpu-*/" | |
721 | echo "%{_libexecdir}/gcc/$target_cpu*/*/cc1" | |
722 | echo "%{_libexecdir}/gcc/$target_cpu*/*/collect2" | |
723 | echo "%{_libexecdir}/gcc/$target_cpu*/*/[abd-z]*" | |
724 | echo "%{_prefix}/$arch/sys-root" | |
725 | esac | |
726 | ||
727 | ) >files.$arch | |
728 | ||
729 | ( | |
730 | echo "%%defattr(-,root,root,-)" | |
731 | echo "%{_bindir}/$arch*-c++" | |
732 | echo "%{_bindir}/$arch*-g++" | |
733 | echo "%{_mandir}/man1/$arch*-g++*" | |
734 | case $cpu in | |
735 | ppc*|ppc64*) | |
736 | ;; | |
737 | *) | |
738 | echo "%{_libexecdir}/gcc/$target_cpu*/*/cc1plus" | |
739 | esac | |
740 | ) > files-c++.$arch | |
741 | } | |
742 | ||
743 | for target in $(cat target.list symlink-target.list); do | |
744 | install_lang $target | |
745 | done | |
746 | ||
747 | %define __ar_no_strip $RPM_BUILD_DIR/%{name}-%{version}/ar-no-strip | |
748 | cat >%{__ar_no_strip} <<'EOF' | |
749 | #!/bin/sh | |
750 | f=$2 | |
751 | if [ ${f##*/} = libgcc.a -o ${f##*/} = libgcov.a ]; then | |
752 | : | |
753 | else | |
754 | %{__strip} $* | |
755 | fi | |
756 | EOF | |
757 | chmod +x %{__ar_no_strip} | |
758 | %undefine __strip | |
759 | %define __strip %{__ar_no_strip} | |
760 | ||
761 | %clean | |
762 | rm -rf $RPM_BUILD_ROOT | |
763 | ||
764 | %files common -f cross-gcc.lang | |
765 | %doc %{srcdir}/COPYING* | |
766 | %doc %{srcdir}/README | |
767 | %{_mandir}/man1/cross-* | |
768 | ||
769 | %define do_files() \ | |
770 | %files -n gcc-%1 -f files.%1 \ | |
771 | %files -n gcc-c++-%1 -f files-c++.%1 \ | |
772 | ||
773 | %{?with_alpha:%do_files alpha-linux-gnu} | |
774 | %{?with_arm:%do_files arm-linux-gnu} | |
775 | %{?with_aarch64:%do_files aarch64-linux-gnu} | |
776 | %{?with_avr32:%do_files avr32-linux-gnu} | |
777 | %{?with_blackfin:%do_files bfin-linux-gnu} | |
778 | %{?with_c6x:%do_files c6x-linux-gnu} | |
779 | %{?with_cris:%do_files cris-linux-gnu} | |
780 | %{?with_frv:%do_files frv-linux-gnu} | |
781 | %{?with_h8300:%do_files h8300-linux-gnu} | |
782 | %{?with_hppa:%do_files hppa-linux-gnu} | |
783 | %{?with_hppa64:%do_files hppa64-linux-gnu} | |
784 | %{?with_i386:%do_files i386-linux-gnu} | |
785 | %{?with_ia64:%do_files ia64-linux-gnu} | |
786 | %{?with_m32r:%do_files m32r-linux-gnu} | |
787 | %{?with_m68k:%do_files m68k-linux-gnu} | |
788 | %{?with_metag:%do_files metag-linux-gnu} | |
789 | %{?with_microblaze:%do_files microblaze-linux-gnu} | |
790 | %{?with_mips:%do_files mips-linux-gnu} | |
791 | %{?with_mips64:%do_files mips64-linux-gnu} | |
792 | %{?with_mn10300:%do_files mn10300-linux-gnu} | |
793 | %{?with_nios2:%do_files nios2-linux-gnu} | |
794 | %{?with_openrisc:%do_files openrisc-linux-gnu} | |
795 | %{?with_powerpc:%do_files powerpc-linux-gnu} | |
796 | %{?with_powerpc64:%do_files powerpc64-linux-gnu} | |
797 | %{?with_powerpc:%do_files ppc-linux-gnu} | |
798 | %{?with_powerpc64:%do_files ppc64-linux-gnu} | |
799 | %{?with_s390:%do_files s390-linux-gnu} | |
800 | %{?with_s390x:%do_files s390x-linux-gnu} | |
801 | %{?with_score:%do_files score-linux-gnu} | |
802 | %{?with_sh:%do_files sh-linux-gnu} | |
803 | %{?with_sh4:%do_files sh4-linux-gnu} | |
804 | %{?with_sh64:%do_files sh64-linux-gnu} | |
805 | %{?with_sparc:%do_files sparc-linux-gnu} | |
806 | %{?with_sparc64:%do_files sparc64-linux-gnu} | |
807 | %{?with_tile:%do_files tile-linux-gnu} | |
808 | %{?with_unicore32:%do_files unicore32-linux-gnu} | |
809 | %{?with_x86_64:%do_files x86_64-linux-gnu} | |
810 | %{?with_xtensa:%do_files xtensa-linux-gnu} |