]> git.ipfire.org Git - people/ms/ipfire-3.x.git/blob - gcc/gcc.nm
gcc: Update to version 4.9.1
[people/ms/ipfire-3.x.git] / gcc / gcc.nm
1 ###############################################################################
2 # IPFire.org - An Open Source Firewall Solution #
3 # Copyright (C) - IPFire Development Team <info@ipfire.org> #
4 ###############################################################################
5
6 # Configure build to compile with cloog.
7 build_cloog = 1
8
9 name = gcc
10 version = 4.9.1
11 release = 1
12
13 maintainer = Michael Tremer <michael.tremer@ipfire.org>
14 groups = Development/Compilers
15 url = http://gcc.gnu.org/
16 license = GPLv3+ and GPLv2+ with exceptions
17 summary = Various compilers (C, C++, Objective-C, Java, ...).
18
19 description
20 The gcc package contains the GNU Compiler Collection. \
21 You'll need this package in order to compile C code.
22 end
23
24 # This is the at least required version of binutils.
25 binutils_version = 2.24
26 cloog_version = 0.18.1
27
28 source_dl = http://ftp.gnu.org/gnu/gcc/%{thisapp}/
29 source_dl += ftp://gcc.gnu.org/pub/gcc/infrastructure/
30 sources = %{thisapp}.tar.gz
31
32 build
33 requires
34 autogen
35 binutils >= %{binutils_version}
36 dejagnu
37 elfutils-devel
38 expect
39 filesystem >= 002
40 flex
41 glibc-devel >= 2.16
42 gmp-devel
43 libffi-devel
44 libmpc-devel
45 mpfr-devel
46 perl
47 texinfo
48 zlib-devel
49 end
50
51 # If cloog support is enabled, we require the devel packages for build.
52 if "%{build_cloog}" == "1"
53 requires += cloog-devel >= %{cloog_version}
54 requires += isl-devel
55 end
56
57 # Build libquadmath (only on x86).
58 build_libquadmath = 0
59
60 # Build liblsan (only on x86_64).
61 build_liblsan = 0
62
63 # Build libtasn (only on x86_64).
64 build_libtsan = 0
65
66 # Build libcilkrts (only x86)
67 build_libcilkrts = 0
68
69 # A couple of configure arguments depending on the architecture and
70 # configuration.
71 configure_options =
72
73 make_bootstrap = profiledbootstrap
74
75 if "%{DISTRO_ARCH}" == "x86_64"
76 configure_options = --disable-multilib
77
78 build_libquadmath = 1
79 build_liblsan = 1
80 build_libtsan = 1
81 build_libcilkrts = 1
82 end
83
84 if "%{DISTRO_ARCH}" == "i686"
85 configure_options = --with-arch=%{DISTRO_ARCH} --with-tune=generic
86
87 build_libquadmath = 1
88 build_libcilkrts = 1
89 end
90
91 if "%{DISTRO_ARCH}" == "armv5tel"
92 make_bootstrap = bootstrap
93
94 configure_options += --disable-sjlj-exceptions
95 configure_options += --with-float=soft
96 end
97
98 if "%{DISTRO_ARCH}" == "armv7hl"
99 make_bootstrap = bootstrap
100
101 configure_options += --disable-sjlj-exceptions
102
103 configure_options += \
104 --with-cpu=cortex-a8 \
105 --with-tune=cortex-a8 \
106 --with-arch=armv7-a \
107 --with-float=hard \
108 --with-fpu=vfpv3-d16 \
109 --with-abi=aapcs-linux
110 end
111
112 if "%{build_cloog}" == "1"
113 configure_options += \
114 --with-cloog=%{prefix} \
115 --with-isl=%{prefix} \
116 --enable-cloog-backend=isl
117 end
118
119 # CFLAGS for hardening.
120 HARD_CFLAGS = -DENABLE_ESP -DEFAULT_PIE_SSP -DEFAULT_RELRO -DEFAULT_BIND_NOW
121
122 prepare_cmds
123 mkdir -v %{DIR_SRC}/gcc-build
124
125 # Remove unneeded features that will save some compile time
126 rm -rf lib{gfortran,java,objc} gcc/{fortran,java,objc,objcp}
127
128 # Apply a sed substitution that will suppress the installation of
129 # libiberty.a. The version of libiberty.a provided by Binutils will be used
130 # instead:
131 sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
132
133 # Branding gcc
134 echo "%{DISTRO_NAME} %{version}-%{release}" > gcc/DEV-PHASE
135
136 # Libgomp uses -Werror regardless of --disable-werror, and this will cause a
137 # build failure when -D_FORTIFY_SOURCE=2 causes build time warnings:
138 sed -e "s/-Werror//" -i libgomp/configure
139
140 # The fixincludes script is known to occasionally erroneously attempt to
141 # "fix" the system headers installed so far. As the headers up to this point
142 # are known to not require fixing, issue the following command to prevent
143 # the fixincludes script from running:
144 sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
145
146 sed -i gcc/Makefile.in \
147 -e "s/-fno-exceptions/& -fno-asynchronous-unwind-tables/"
148
149 # we want to be able to control the pie patch logic via something other
150 # than ALL_CFLAGS and ALL_CXXFLAGS...
151 sed -i gcc/Makefile.in \
152 -e '/^ALL_CFLAGS/iHARD_CFLAGS = %{HARD_CFLAGS}' \
153 -e 's|^ALL_CFLAGS = |ALL_CFLAGS = $(HARD_CFLAGS) |' \
154 -e '/^ALL_CXXFLAGS/iHARD_CFLAGS = %{HARD_CFLAGS}' \
155 -e 's|^ALL_CXXFLAGS = |ALL_CXXFLAGS = $(HARD_CFLAGS) |'
156
157 # However, genautomata crashes with a "Bus Error" when compiled
158 # with PIC.
159 sed -i gcc/Makefile.in \
160 -e 's|^build/genautomata$(build_exeext) .*|& -fno-PIC|'
161
162 # Default to -gdwarf-4 -fno-debug-types-section rather than -gdwarf-2
163 sed -i gcc/common.opt \
164 -e '/UInteger Var(dwarf_version)/s/Init(2)/Init(4)/' \
165 -e '/flag_debug_types_section/s/Init(1)/Init(0)/' \
166 -e '/dwarf_record_gcc_switches/s/Init(0)/Init(1)/' \
167 -e 's/\(may be either 2, 3 or 4; the default version is \)2\./\14./'
168
169 #./contrib/gcc_update --touch
170 end
171
172 build
173 cd %{DIR_SRC}/gcc-build
174
175 # Modify CFLAGS
176 CFLAGS="%{CFLAGS}"
177 CFLAGS=$(echo ${CFLAGS} | sed -e 's/\(-Wp,\)\?-D_FORTIFY_SOURCE=[12]//g')
178 CFLAGS=$(echo ${CFLAGS} | sed -e 's/-m64//g;s/-m32//g;s/-m31//g')
179 CFLAGS=$(echo ${CFLAGS} | sed -e 's/-mfpmath=sse/-mfpmath=sse -msse2/g')
180 CFLAGS=$(echo ${CFLAGS} | sed -e 's/-march=i.86//g')
181 CFLAGS=$(echo ${CFLAGS} | sed -e 's/ -pipe / /g')
182 CFLAGS=$(echo "${CFLAGS}" | sed -e 's/[[:blank:]]\+/ /g')
183 CXXFLAGS=$(echo ${CFLAGS} | sed -e 's/ -Wall//g')
184 CXXFLAGS=$(echo ${CXXFLAGS} | sed -e 's/ -fexceptions / /g')
185 CXXFLAGS=$(echo ${CXXFLAGS} | sed -e 's/ -Werror=format-security / -Wformat -Werror=format-security /g')
186
187 case "${CFLAGS}" in
188 *-fasynchronous-unwind-tables*)
189 sed -i -e "s/-fno-exceptions /-fno-exceptions -fno-asynchronous-unwind-tables/" \
190 ../%{thisapp}/Makefile.in
191 ;;
192 esac
193
194 CFLAGS="${CFLAGS}" \
195 CXXFLAGS="${CXXFLAGS}" \
196 XCFLAGS="${CFLAGS}" \
197 TCFLAGS="${CFLAGS}" \
198 ../%{thisapp}/configure \
199 --build=%{DISTRO_BUILDTARGET} \
200 --prefix=/usr \
201 --libdir=%{libdir} \
202 --libexecdir=%{libdir} \
203 --mandir=%{mandir} \
204 --enable-esp \
205 --enable-shared \
206 --enable-threads=posix \
207 --enable-__cxa_atexit \
208 --enable-clocale=gnu \
209 --enable-languages=c,c++,lto \
210 --enable-bootstrap \
211 --enable-checking=release \
212 --disable-werror \
213 --disable-libssp \
214 --with-system-zlib \
215 --with-bugurl=http://bugtracker.ipfire.org \
216 --disable-libunwind-exceptions \
217 --enable-gnu-unique-object \
218 --enable-linker-build-id \
219 --with-linker-hash-style=gnu \
220 --enable-plugin \
221 --enable-initfini-array \
222 --disable-libgcj \
223 %{configure_options}
224
225 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58012
226 # XXX disabled flags: --disable-static
227
228 # GCC does not support a parallel build.
229 make %{make_bootstrap} BOOT_CFLAGS="${CFLAGS}"
230
231 # Generate man pages.
232 perl -pi -e 's/head3/head2/' ../contrib/texi2pod.pl
233 for i in %{DIR_APP}/gcc/doc/*.texi; do
234 cp -a $i $i.orig; sed 's/ftable/table/' $i.orig > $i
235 done
236 make -C gcc generated-manpages
237 for i in %{DIR_APP}/gcc/doc/*.texi; do mv -f $i.orig $i; done
238 end
239
240 #test
241 # cd %{DIR_SRC}/gcc-build && make -k check || true
242 # cd %{DIR_APP} && ./contrib/test_summary
243 #end
244
245 install
246 cd %{DIR_SRC}/gcc-build
247 make install DESTDIR=%{BUILDROOT}
248
249 # Check if the installation path exists.
250 FULLPATH="%{BUILDROOT}%{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}"
251 [ -d "${FULLPATH}" ] || exit 1
252
253 mkdir -pv %{BUILDROOT}%{prefix}/lib
254 ln -sfv ../bin/cpp %{BUILDROOT}%{prefix}/lib/cpp
255 ln -sfv gcc %{BUILDROOT}/usr/bin/cc
256
257 # Fix libgcc_s symlinks.
258 rm -f ${FULLPATH}/libgcc_s.so %{BUILDROOT}%{libdir}/libgcc_s.so
259 case "%{DISTRO_ARCH}" in
260 arm*)
261 cat <<EOF >${FULLPATH}/libgcc_s.so
262 /* GNU ld script
263 Use the shared library, but some functions are only in
264 the static library, so try that secondarily. */
265 OUTPUT_FORMAT(elf32-littlearm)
266 GROUP ( %{libdir}/libgcc_s.so.1 libgcc.a )
267 EOF
268 ;;
269 *)
270 ln -svf ../../../../..%{libdir}/libgcc_s.so.1 ${FULLPATH}/libgcc_s.so
271 ;;
272 esac
273 chmod 755 %{BUILDROOT}%{libdir}/libgcc_s.so.1
274
275 # Remove some GNU debugger stuff.
276 rm -vf %{BUILDROOT}%{libdir}/lib*.py
277
278 # Install missing header file(s) on ARM.
279 case "%{DISTRO_ARCH}" in
280 arm*)
281 cp -vf %{DIR_APP}/gcc/config/vxworks-dummy.h \
282 ${FULLPATH}/plugin/include/config/
283 cp -vf %{DIR_APP}/gcc/config/arm/arm-cores.def \
284 ${FULLPATH}/plugin/include/config/arm/
285 ;;
286 esac
287
288 # libgomp
289 mv -vf %{BUILDROOT}%{libdir}/libgomp.spec ${FULLPATH}/
290 ln -svf ../../../libgomp.so.1.0.0 ${FULLPATH}/libgomp.so
291 chmod 755 %{BUILDROOT}%{libdir}/libgomp.so.1.*
292
293 # libstdc++
294 ln -svf ../../../libstdc++.so.6.0.20 ${FULLPATH}/libstdc++.so
295
296 # libquadmath
297 if [ "%{build_libquadmath}" = "1" ]; then
298 ln -svf ../../../libquadmath.so.0.0.0 ${FULLPATH}/libquadmath.so
299 chmod 755 %{BUILDROOT}%{libdir}/libquadmath.so.0.*
300 fi
301
302 # libitm
303 mv -vf %{BUILDROOT}%{libdir}/libitm.spec ${FULLPATH}/
304 ln -svf ../../../libitm.so.1.0.0 ${FULLPATH}/libitm.so
305 chmod 755 %{BUILDROOT}%{libdir}/libitm.so.1.*
306
307 # liblsan
308 if [ "%{build_liblsan}" = "1" ]; then
309 ln -svf ../../../liblsan.so.0.0.0 ${FULLPATH}/liblsan.so
310 chmod 755 %{BUILDROOT}%{libdir}/liblsan.so.*
311 fi
312
313 # libtsan
314 if [ "%{build_libtsan}" = "1" ]; then
315 ln -svf ../../../libtsan.so.0.0.0 ${FULLPATH}/libtsan.so
316 chmod 755 %{BUILDROOT}%{libdir}/libtsan.so.*
317 fi
318
319 # libubsan
320 ln -svf ../../../libubsan.so.0.0.0 ${FULLPATH}/libubsan.so
321 chmod 755 %{BUILDROOT}%{libdir}/libubsan.so.*
322
323 # libcilkrts
324 if [ "%{build_libcilkrts}" = "1" ]; then
325 ln -svf ../../../libcilkrts.so.5.0.0 ${FULLPATH}/libcilkrts.so
326 chmod 755 %{BUILDROOT}%{libdir}/libcilkrts.so.5.*
327 fi
328 end
329
330 keep_libraries
331 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc.a
332 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc_eh.a
333 end
334 end
335
336 packages
337 package %{name}
338 groups += Build
339
340 requires
341 binutils >= %{binutils_version}
342 filesystem >= 002
343 glibc >= 2.16
344 glibc-devel
345 gmp-devel
346 cpp = %{thisver}
347 libgcc = %{thisver}
348 libgomp = %{thisver}
349 end
350
351 # We do not ship libgcc-devel anymore.
352 provides += libgcc-devel = %{thisver}
353 obsoletes += libgcc-devel < %{thisver}
354
355 if "%{build_cloog}" == "1"
356 requires += cloog >= %{cloog_version}
357 end
358 end
359
360 package %{name}-c++
361 summary = C++ support for GCC.
362 description
363 This package adds C++ support to the GNU Compiler Collection.
364 It includes support for most of the current C++ specification,
365 including templates and exception handling.
366 end
367
368 requires
369 gcc = %{thisver}
370 libstdc++ = %{thisver}
371 libstdc++-devel = %{thisver}
372 end
373
374 files
375 /usr/bin/*++
376 %{libdir}/gcc/*/*/cc1plus
377 /usr/share/man/man*/*++*
378 end
379 end
380
381 package cpp
382 summary = The C Preprocessor.
383 description
384 Cpp is the GNU C-Compatible Compiler Preprocessor.
385 Cpp is a macro processor which is used automatically
386 by the C compiler to transform your program before actual
387 compilation. It is called a macro processor because it allows
388 you to define macros, abbreviations for longer
389 constructs.
390
391 The C preprocessor provides four separate functionalities: the
392 inclusion of header files (files of declarations that can be
393 substituted into your program); macro expansion (you can define macros,
394 and the C preprocessor will replace the macros with their definitions
395 throughout the program); conditional compilation (using special
396 preprocessing directives, you can include or exclude parts of the
397 program according to various conditions); and line control (if you use
398 a program to combine or rearrange source files into an intermediate
399 file which is then compiled, you can use line control to inform the
400 compiler about where each source line originated).
401
402 You should install this package if you are a C programmer and you use
403 macros.
404 end
405 group = Development/Languages
406
407 files
408 %{prefix}/lib/cpp
409 %{bindir}/cpp
410 %{mandir}/man1/cpp.1*
411 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/cc1
412 end
413
414 provides = /lib/cpp
415 requires = gcc-c++ = %{thisver}
416 end
417
418 package libgcc
419 summary = GCC shared support library.
420 description
421 This package contains GCC shared support library which is needed
422 e.g. for exception handling support.
423 end
424
425 files
426 %{libdir}/libgcc*.so.*
427 end
428
429 obsoletes
430 libmudflap
431 libmudflap-devel
432 end
433 end
434
435 package libstdc++
436 summary = GNU Standard C++ Library.
437 description
438 The libstdc++ package contains a rewritten standard compliant GCC Standard
439 C++ Library.
440 end
441
442 files
443 %{libdir}/libstdc++*.so.*
444 end
445 end
446
447 package libstdc++-devel
448 summary = Header files and libraries for C++ development.
449 description
450 This is the GNU implementation of the standard C++ libraries. This
451 package includes the header files and libraries needed for C++
452 development. This includes rewritten implementation of STL.
453 end
454
455 requires
456 libstdc++ = %{thisver}
457 end
458
459 files
460 %{includedir}/c++
461 %{libdir}/libstdc++*.so
462 end
463 end
464
465 package libgomp
466 summary = GCC OpenMP v3.0 shared support library.
467 description
468 This package contains GCC shared support library which is needed
469 for OpenMP v3.0 support.
470 end
471
472 files
473 %{libdir}/libgomp*.so.*
474 end
475 end
476
477 if "%{build_libquadmath}" == "1"
478 package libquadmath
479 summary = GCC __float128 shared support library.
480 description
481 This package contains GCC shared support library which is needed
482 for __float128 math support and for Fortran REAL*16 support.
483 end
484
485 files
486 %{libdir}/libquadmath*.so.*
487 end
488 end
489
490 package libquadmath-devel
491 summary = Development files for GCC __float128 support.
492 description
493 This package contains headers for building Fortran programs using
494 REAL*16 and programs using __float128 math.
495 end
496
497 requires
498 gcc = %{thisver}
499 libquadmath = %{thisver}
500 end
501
502 files
503 %{libdir}/libquadmath.so
504 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/quadmath.h
505 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/quadmath_weak.h
506 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libquadmath.so
507 end
508 end
509 end
510
511 package libitm
512 summary = The GNU Transactional Memory library.
513 description
514 This package contains the GNU Transactional Memory library
515 which is a GCC transactional memory support runtime library.
516 end
517
518 files
519 %{libdir}/libitm.so.1*
520 end
521 end
522
523 package libitm-devel
524 summary = The GNU Transactional Memory support.
525 description
526 This package contains headers and support files for the
527 GNU Transactional Memory library.
528 end
529
530 requires
531 gcc = %{thisver}
532 libitm = %{thisver}
533 end
534
535 files
536 %{libdir}/libitm.so
537 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/itm.h
538 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/itm_weak.h
539 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libitm.so
540 end
541 end
542
543 package libatomic
544 summary = The GNU Atomic library
545 description
546 This package contains the GNU Atomic library which is a
547 GCC support runtime library for atomisc operations not
548 supported by hardware.
549 end
550
551 files
552 %{libdir}/libatomic.so.1*
553 end
554 end
555
556 package libasan
557 summary = The Address Sanitizer runtime library
558 description
559 This package contains the Address Sanitizer library
560 which is used for -fsanitize=address instrumented programs.
561 end
562
563 files
564 %{libdir}/libasan.so.1*
565 end
566 end
567
568 if "%{build_libtsan}" == "1"
569 package libtsan
570 summary = The Thread Sanitizer runtime library
571 description
572 This package contains the Thread Sanitizer library
573 which is used for -fsanitize=thread instrumented programs.
574 end
575
576 files
577 %{libdir}/libtsan.so.0*
578 end
579 end
580 end
581
582 package libubsan
583 summary = The Undefined Behavior Sanitizer runtime library
584 description
585 This package contains the Undefined Behavior Sanitizer library
586 which is used for -fsanitize=undefined instrumented programs.
587 end
588
589 files
590 %{libdir}/libubsan.so.0*
591 end
592 end
593
594 if "%{build_liblsan}" == "1"
595 package liblsan
596 summary = The Leak Sanitizer runtime library
597 description
598 This package contains the Leak Sanitizer library
599 which is used for -fsanitize=leak instrumented programs.
600 end
601
602 files
603 %{libdir}/liblsan.so.0*
604 end
605 end
606 end
607
608 if "%{build_libcilkrts}" == "1"
609 package libcilkrts
610 summary = The Cilk+ runtime library
611 description
612 This package contains the Cilk+ runtime library.
613 end
614
615 files
616 %{libdir}/libcilkrts.so.5*
617 end
618 end
619 end
620
621 package gcc-plugin-devel
622 summary = Support for compiling GCC plugins.
623 description
624 This package contains header files and other support files
625 for compiling GCC plugins. The GCC plugin ABI is currently
626 not stable, so plugins must be rebuilt any time GCC is updated.
627 end
628
629 requires
630 gcc = %{thisver}
631 gmp-devel >= 4.1.2-8
632 mpfr-devel >= 2.2.1
633 libmpc-devel >= 0.8.1
634 end
635
636 files
637 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/plugin
638 end
639 end
640
641 package %{name}-debuginfo
642 template DEBUGINFO
643 end
644 end