]> git.ipfire.org Git - ipfire-3.x.git/blob - gcc/gcc.nm
gcc: Honour LDFLAGS
[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 graphite
7 build_graphite = 1
8
9 name = gcc
10 version = 6.2.0
11 release = 2
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
27 source_dl = http://ftp.gnu.org/gnu/gcc/%{thisapp}/
28 source_dl += ftp://gcc.gnu.org/pub/gcc/infrastructure/
29 sources = %{thisapp}.tar.gz
30
31 build
32 requires
33 autogen
34 binutils >= %{binutils_version}
35 dejagnu
36 elfutils-devel
37 expect
38 filesystem >= 002
39 flex
40 glibc-devel >= 2.16
41 gmp-devel
42 libffi-devel
43 libmpc-devel >= 0.8.1
44 mpfr-devel
45 perl
46 texinfo
47 zlib-devel
48 end
49
50 # If graphite support is enabled, we require the devel packages for build.
51 if "%{build_graphite}" == "1"
52 requires += isl-devel >= 0.14
53 end
54
55 # Build libquadmath (only on x86).
56 build_libquadmath = 0
57
58 # Build liblsan (only on x86_64).
59 build_liblsan = 0
60
61 # Build libtasn (only on x86_64).
62 build_libtsan = 0
63
64 # Build libubsan
65 build_libubsan = 0
66
67 # Build libcilkrts (only x86)
68 build_libcilkrts = 0
69
70 # A couple of configure arguments depending on the architecture and
71 # configuration.
72 configure_options =
73
74 make_bootstrap = profiledbootstrap
75
76 if "%{DISTRO_ARCH}" == "x86_64"
77 configure_options = --disable-multilib
78
79 build_libquadmath = 1
80 build_liblsan = 1
81 build_libtsan = 1
82 build_libubsan = 1
83 build_libcilkrts = 1
84 end
85
86 if "%{DISTRO_ARCH}" == "i686"
87 configure_options = --with-arch=%{DISTRO_ARCH} --with-tune=generic
88
89 build_libquadmath = 1
90 build_libubsan = 1
91 build_libcilkrts = 1
92 end
93
94 if "%{DISTRO_ARCH}" == "aarch64"
95 build_libubsan = 1
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-tune=cortex-a8 \
105 --with-arch=armv7-a \
106 --with-float=hard \
107 --with-fpu=vfpv3-d16 \
108 --with-abi=aapcs-linux
109
110 build_libubsan = 1
111 end
112
113 if "%{DISTRO_ARCH}" == "armv5tel"
114 make_bootstrap = bootstrap
115
116 configure_options += --disable-sjlj-exceptions
117 configure_options += --with-float=soft
118
119 build_libubsan = 1
120 end
121
122 if "%{build_graphite}" == "1"
123 configure_options += \
124 --with-isl
125 end
126
127 prepare_cmds
128 mkdir -v %{DIR_SRC}/gcc-build
129
130 # Remove unneeded features that will save some compile time
131 rm -rf lib{gfortran,java,objc} gcc/{fortran,java,objc,objcp}
132
133 # Apply a sed substitution that will suppress the installation of
134 # libiberty.a. The version of libiberty.a provided by Binutils will be used
135 # instead:
136 sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
137
138 # Branding gcc
139 echo "%{DISTRO_NAME} %{version}-%{release}" > gcc/DEV-PHASE
140
141 # Libgomp uses -Werror regardless of --disable-werror, and this will cause a
142 # build failure when -D_FORTIFY_SOURCE=2 causes build time warnings:
143 sed -e "s/-Werror//" -i libgomp/configure
144
145 # The fixincludes script is known to occasionally erroneously attempt to
146 # "fix" the system headers installed so far. As the headers up to this point
147 # are known to not require fixing, issue the following command to prevent
148 # the fixincludes script from running:
149 sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
150
151 sed -i gcc/Makefile.in \
152 -e "s/-fno-exceptions/& -fno-asynchronous-unwind-tables/"
153
154 # Default to -gdwarf-4 -fno-debug-types-section rather than -gdwarf-2
155 sed -i gcc/common.opt \
156 -e '/UInteger Var(dwarf_version)/s/Init(2)/Init(4)/' \
157 -e '/flag_debug_types_section/s/Init(1)/Init(0)/' \
158 -e '/dwarf_record_gcc_switches/s/Init(0)/Init(1)/' \
159 -e 's/\(may be either 2, 3 or 4; the default version is \)2\./\14./'
160
161 #./contrib/gcc_update --touch
162 end
163
164 export CC=gcc
165 export CXX=g++
166
167 build
168 cd %{DIR_SRC}/gcc-build
169
170 # Modify CFLAGS
171 CFLAGS="%{CFLAGS}"
172 CFLAGS=$(echo ${CFLAGS} | sed -e 's/\(-Wp,\)\?-D_FORTIFY_SOURCE=[12]//g')
173 CFLAGS=$(echo ${CFLAGS} | sed -e 's/-Werror=format-security//g')
174 CFLAGS=$(echo ${CFLAGS} | sed -e 's/-m64//g;s/-m32//g;s/-m31//g')
175 CFLAGS=$(echo ${CFLAGS} | sed -e 's/-mfpmath=sse/-mfpmath=sse -msse2/g')
176 CFLAGS=$(echo ${CFLAGS} | sed -e 's/-march=i.86//g')
177 CFLAGS=$(echo ${CFLAGS} | sed -e 's/ -pipe / /g')
178 CFLAGS=$(echo "${CFLAGS}" | sed -e 's/[[:blank:]]\+/ /g')
179 CXXFLAGS=$(echo ${CFLAGS} | sed -e 's/ -Wall//g')
180 CXXFLAGS=$(echo ${CXXFLAGS} | sed -e 's/ -fexceptions / /g')
181 #CXXFLAGS=$(echo ${CXXFLAGS} | sed -e 's/ -Werror=format-security / -Wformat -Werror=format-security /g')
182
183 case "${CFLAGS}" in
184 *-fasynchronous-unwind-tables*)
185 sed -i -e "s/-fno-exceptions /-fno-exceptions -fno-asynchronous-unwind-tables/" \
186 ../%{thisapp}/Makefile.in
187 ;;
188 esac
189
190 CFLAGS="${CFLAGS}" \
191 CXXFLAGS="${CXXFLAGS}" \
192 XCFLAGS="${CFLAGS}" \
193 TCFLAGS="${CFLAGS}" \
194 ../%{thisapp}/configure \
195 --build=%{DISTRO_BUILDTARGET} \
196 --prefix=/usr \
197 --libdir=%{libdir} \
198 --libexecdir=%{libdir} \
199 --mandir=%{mandir} \
200 --with-boot-ldflags="%{LDFLAGS}" \
201 --enable-esp \
202 --enable-shared \
203 --enable-threads=posix \
204 --enable-__cxa_atexit \
205 --enable-clocale=gnu \
206 --enable-languages=c,c++,lto \
207 --enable-bootstrap \
208 --enable-checking=release \
209 --enable-default-pie \
210 --disable-werror \
211 --disable-libssp \
212 --with-system-zlib \
213 --with-bugurl=http://bugtracker.ipfire.org \
214 --disable-libunwind-exceptions \
215 --enable-gnu-unique-object \
216 --enable-linker-build-id \
217 --with-linker-hash-style=gnu \
218 --enable-plugin \
219 --enable-initfini-array \
220 --disable-libgcj \
221 --enable-gnu-indirect-function \
222 %{configure_options}
223
224 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58012
225 # XXX disabled flags: --disable-static
226
227 # GCC does not support a parallel build.
228 make %{make_bootstrap} BOOT_CFLAGS="${CFLAGS}"
229
230 # Generate man pages.
231 perl -pi -e 's/head3/head2/' ../contrib/texi2pod.pl
232 for i in %{DIR_APP}/gcc/doc/*.texi; do
233 cp -a $i $i.orig; sed 's/ftable/table/' $i.orig > $i
234 done
235 make -C gcc generated-manpages
236 for i in %{DIR_APP}/gcc/doc/*.texi; do mv -f $i.orig $i; done
237 end
238
239 #test
240 # cd %{DIR_SRC}/gcc-build && make -k check || true
241 # cd %{DIR_APP} && ./contrib/test_summary
242 #end
243
244 install
245 cd %{DIR_SRC}/gcc-build
246 make install DESTDIR=%{BUILDROOT}
247
248 # Check if the installation path exists.
249 FULLPATH="%{BUILDROOT}%{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}"
250 [ -d "${FULLPATH}" ] || exit 1
251
252 mkdir -pv %{BUILDROOT}%{prefix}/lib
253 ln -sfv ../bin/cpp %{BUILDROOT}%{prefix}/lib/cpp
254 ln -sfv gcc %{BUILDROOT}/usr/bin/cc
255
256 # Fix libgcc_s symlinks.
257 rm -f ${FULLPATH}/libgcc_s.so %{BUILDROOT}%{libdir}/libgcc_s.so
258 case "%{DISTRO_ARCH}" in
259 arm*)
260 cat <<EOF >${FULLPATH}/libgcc_s.so
261 /* GNU ld script
262 Use the shared library, but some functions are only in
263 the static library, so try that secondarily. */
264 OUTPUT_FORMAT(elf32-littlearm)
265 GROUP ( %{libdir}/libgcc_s.so.1 libgcc.a )
266 EOF
267 ;;
268 *)
269 ln -svf ../../../../..%{libdir}/libgcc_s.so.1 ${FULLPATH}/libgcc_s.so
270 ;;
271 esac
272 chmod 755 %{BUILDROOT}%{libdir}/libgcc_s.so.1
273
274 # Remove some GNU debugger stuff.
275 rm -vf %{BUILDROOT}%{libdir}/lib*.py
276
277 # Install missing header file(s) on ARM.
278 case "%{DISTRO_ARCH}" in
279 arm*)
280 cp -vf %{DIR_APP}/gcc/config/vxworks-dummy.h \
281 ${FULLPATH}/plugin/include/config/
282 cp -vf %{DIR_APP}/gcc/config/arm/arm-cores.def \
283 ${FULLPATH}/plugin/include/config/arm/
284 ;;
285 esac
286
287 # libgomp
288 mv -vf %{BUILDROOT}%{libdir}/libgomp.spec ${FULLPATH}/
289 ln -svf ../../../libgomp.so.1.0.0 ${FULLPATH}/libgomp.so
290 chmod 755 %{BUILDROOT}%{libdir}/libgomp.so.1.*
291
292 # libstdc++
293 ln -svf ../../../libstdc++.so.6.0.22 ${FULLPATH}/libstdc++.so
294 mv -vf %{BUILDROOT}%{libdir}/lib{std,sup}c++.a ${FULLPATH}
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 if [ "%{build_libubsan}" = "1" ]; then
321 ln -svf ../../../libubsan.so.0.0.0 ${FULLPATH}/libubsan.so
322 chmod 755 %{BUILDROOT}%{libdir}/libubsan.so.*
323 fi
324
325 # libcilkrts
326 if [ "%{build_libcilkrts}" = "1" ]; then
327 ln -svf ../../../libcilkrts.so.5.0.0 ${FULLPATH}/libcilkrts.so
328 chmod 755 %{BUILDROOT}%{libdir}/libcilkrts.so.5.*
329 fi
330 end
331
332 keep_libraries
333 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc.a
334 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc_eh.a
335 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libstdc++.a
336 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libsupc++.a
337 end
338 end
339
340 packages
341 package %{name}
342 groups += Build
343
344 requires
345 binutils >= %{binutils_version}
346 filesystem >= 002
347 glibc >= 2.16
348 glibc-devel
349 gmp-devel
350 cpp = %{thisver}
351 libgcc = %{thisver}
352 libgomp = %{thisver}
353 end
354
355 # We do not ship libgcc-devel anymore.
356 provides += libgcc-devel = %{thisver}
357 obsoletes += libgcc-devel < %{thisver}
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 libstdc++-static
466 summary = Static libraries for the GNU standard C++ library
467 description = %{summary}
468
469 requires
470 libstdc++-devel = %{thisver}
471 end
472
473 files
474 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libstdc++.a
475 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libsupc++.a
476 end
477 end
478
479 package libgomp
480 summary = GCC OpenMP v3.0 shared support library.
481 description
482 This package contains GCC shared support library which is needed
483 for OpenMP v3.0 support.
484 end
485
486 files
487 %{libdir}/libgomp*.so.*
488 end
489 end
490
491 if "%{build_libquadmath}" == "1"
492 package libquadmath
493 summary = GCC __float128 shared support library.
494 description
495 This package contains GCC shared support library which is needed
496 for __float128 math support and for Fortran REAL*16 support.
497 end
498
499 files
500 %{libdir}/libquadmath*.so.*
501 end
502 end
503
504 package libquadmath-devel
505 summary = Development files for GCC __float128 support.
506 description
507 This package contains headers for building Fortran programs using
508 REAL*16 and programs using __float128 math.
509 end
510
511 requires
512 gcc = %{thisver}
513 libquadmath = %{thisver}
514 end
515
516 files
517 %{libdir}/libquadmath.so
518 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/quadmath.h
519 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/quadmath_weak.h
520 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libquadmath.so
521 end
522 end
523 end
524
525 package libitm
526 summary = The GNU Transactional Memory library.
527 description
528 This package contains the GNU Transactional Memory library
529 which is a GCC transactional memory support runtime library.
530 end
531
532 files
533 %{libdir}/libitm.so.1*
534 end
535 end
536
537 package libitm-devel
538 summary = The GNU Transactional Memory support.
539 description
540 This package contains headers and support files for the
541 GNU Transactional Memory library.
542 end
543
544 requires
545 gcc = %{thisver}
546 libitm = %{thisver}
547 end
548
549 files
550 %{libdir}/libitm.so
551 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/itm.h
552 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/itm_weak.h
553 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libitm.so
554 end
555 end
556
557 package libatomic
558 summary = The GNU Atomic library
559 description
560 This package contains the GNU Atomic library which is a
561 GCC support runtime library for atomisc operations not
562 supported by hardware.
563 end
564
565 files
566 %{libdir}/libatomic.so.1*
567 end
568 end
569
570 package libasan
571 summary = The Address Sanitizer runtime library
572 description
573 This package contains the Address Sanitizer library
574 which is used for -fsanitize=address instrumented programs.
575 end
576
577 files
578 %{libdir}/libasan.so.2*
579 end
580 end
581
582 if "%{build_libtsan}" == "1"
583 package libtsan
584 summary = The Thread Sanitizer runtime library
585 description
586 This package contains the Thread Sanitizer library
587 which is used for -fsanitize=thread instrumented programs.
588 end
589
590 files
591 %{libdir}/libtsan.so.0*
592 end
593 end
594 end
595
596 if "%{build_libubsan}" == "1"
597 package libubsan
598 summary = The Undefined Behavior Sanitizer runtime library
599 description
600 This package contains the Undefined Behavior Sanitizer library
601 which is used for -fsanitize=undefined instrumented programs.
602 end
603
604 files
605 %{libdir}/libubsan.so.0*
606 end
607 end
608 end
609
610 if "%{build_liblsan}" == "1"
611 package liblsan
612 summary = The Leak Sanitizer runtime library
613 description
614 This package contains the Leak Sanitizer library
615 which is used for -fsanitize=leak instrumented programs.
616 end
617
618 files
619 %{libdir}/liblsan.so.0*
620 end
621 end
622 end
623
624 if "%{build_libcilkrts}" == "1"
625 package libcilkrts
626 summary = The Cilk+ runtime library
627 description
628 This package contains the Cilk+ runtime library.
629 end
630
631 files
632 %{libdir}/libcilkrts.so.5*
633 end
634 end
635 end
636
637 package gcc-plugin-devel
638 summary = Support for compiling GCC plugins.
639 description
640 This package contains header files and other support files
641 for compiling GCC plugins. The GCC plugin ABI is currently
642 not stable, so plugins must be rebuilt any time GCC is updated.
643 end
644
645 requires
646 gcc = %{thisver}
647 gmp-devel >= 4.1.2-8
648 mpfr-devel >= 2.2.1
649 libmpc-devel >= 0.8.1
650 end
651
652 files
653 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/plugin
654 end
655 end
656
657 package %{name}-debuginfo
658 template DEBUGINFO
659 end
660 end