1 ###############################################################################
2 # IPFire.org - An Open Source Firewall Solution #
3 # Copyright (C) - IPFire Development Team <info@ipfire.org> #
4 ###############################################################################
6 # Configure build to compile with graphite
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, ...).
20 The gcc package contains the GNU Compiler Collection. \
21 You'll need this package in order to compile C code.
24 # This is the at least required version of binutils.
25 binutils_version = 2.24
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
34 binutils >= %{binutils_version}
50 # If graphite support is enabled, we require the devel packages for build.
51 if "%{build_graphite}" == "1"
52 requires += isl-devel >= 0.14
55 # Build libquadmath (only on x86).
58 # Build liblsan (only on x86_64).
61 # Build libtasn (only on x86_64).
67 # Build libcilkrts (only x86)
70 # A couple of configure arguments depending on the architecture and
74 make_bootstrap = profiledbootstrap
76 if "%{DISTRO_ARCH}" == "x86_64"
77 configure_options = --disable-multilib
86 if "%{DISTRO_ARCH}" == "i686"
87 configure_options = --with-arch=%{DISTRO_ARCH} --with-tune=generic
94 if "%{DISTRO_ARCH}" == "aarch64"
98 if "%{DISTRO_ARCH}" == "armv7hl"
99 make_bootstrap = bootstrap
101 configure_options += --disable-sjlj-exceptions
103 configure_options += \
104 --with-tune=cortex-a8 \
105 --with-arch=armv7-a \
107 --with-fpu=vfpv3-d16 \
108 --with-abi=aapcs-linux
113 if "%{DISTRO_ARCH}" == "armv5tel"
114 make_bootstrap = bootstrap
116 configure_options += --disable-sjlj-exceptions
117 configure_options += --with-float=soft
122 if "%{build_graphite}" == "1"
123 configure_options += \
128 mkdir -v %{DIR_SRC}/gcc-build
130 # Remove unneeded features that will save some compile time
131 rm -rf lib{gfortran,java,objc} gcc/{fortran,java,objc,objcp}
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
136 sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
139 echo "%{DISTRO_NAME} %{version}-%{release}" > gcc/DEV-PHASE
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
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
151 sed -i gcc/Makefile.in \
152 -e "s/-fno-exceptions/& -fno-asynchronous-unwind-tables/"
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./'
161 #./contrib/gcc_update --touch
168 cd %{DIR_SRC}/gcc-build
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')
184 *-fasynchronous-unwind-tables*)
185 sed -i -e "s/-fno-exceptions /-fno-exceptions -fno-asynchronous-unwind-tables/" \
186 ../%{thisapp}/Makefile.in
191 CXXFLAGS="${CXXFLAGS}" \
192 XCFLAGS="${CFLAGS}" \
193 TCFLAGS="${CFLAGS}" \
194 ../%{thisapp}/configure \
195 --build=%{DISTRO_BUILDTARGET} \
198 --libexecdir=%{libdir} \
200 --with-boot-ldflags="%{LDFLAGS}" \
203 --enable-threads=posix \
204 --enable-__cxa_atexit \
205 --enable-clocale=gnu \
206 --enable-languages=c,c++,lto \
208 --enable-checking=release \
209 --enable-default-pie \
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 \
219 --enable-initfini-array \
221 --enable-gnu-indirect-function \
224 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58012
225 # XXX disabled flags: --disable-static
227 # GCC does not support a parallel build.
228 make %{make_bootstrap} BOOT_CFLAGS="${CFLAGS}"
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
235 make -C gcc generated-manpages
236 for i in %{DIR_APP}/gcc/doc/*.texi; do mv -f $i.orig $i; done
240 # cd %{DIR_SRC}/gcc-build && make -k check || true
241 # cd %{DIR_APP} && ./contrib/test_summary
245 cd %{DIR_SRC}/gcc-build
246 make install DESTDIR=%{BUILDROOT}
248 # Check if the installation path exists.
249 FULLPATH="%{BUILDROOT}%{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}"
250 [ -d "${FULLPATH}" ] || exit 1
252 mkdir -pv %{BUILDROOT}%{prefix}/lib
253 ln -sfv ../bin/cpp %{BUILDROOT}%{prefix}/lib/cpp
254 ln -sfv gcc %{BUILDROOT}/usr/bin/cc
256 # Fix libgcc_s symlinks.
257 rm -f ${FULLPATH}/libgcc_s.so %{BUILDROOT}%{libdir}/libgcc_s.so
258 case "%{DISTRO_ARCH}" in
260 cat <<EOF >${FULLPATH}/libgcc_s.so
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 )
269 ln -svf ../../../../..%{libdir}/libgcc_s.so.1 ${FULLPATH}/libgcc_s.so
272 chmod 755 %{BUILDROOT}%{libdir}/libgcc_s.so.1
274 # Remove some GNU debugger stuff.
275 rm -vf %{BUILDROOT}%{libdir}/lib*.py
277 # Install missing header file(s) on ARM.
278 case "%{DISTRO_ARCH}" in
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/
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.*
293 ln -svf ../../../libstdc++.so.6.0.22 ${FULLPATH}/libstdc++.so
294 mv -vf %{BUILDROOT}%{libdir}/lib{std,sup}c++.a ${FULLPATH}
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.*
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.*
308 if [ "%{build_liblsan}" = "1" ]; then
309 ln -svf ../../../liblsan.so.0.0.0 ${FULLPATH}/liblsan.so
310 chmod 755 %{BUILDROOT}%{libdir}/liblsan.so.*
314 if [ "%{build_libtsan}" = "1" ]; then
315 ln -svf ../../../libtsan.so.0.0.0 ${FULLPATH}/libtsan.so
316 chmod 755 %{BUILDROOT}%{libdir}/libtsan.so.*
320 if [ "%{build_libubsan}" = "1" ]; then
321 ln -svf ../../../libubsan.so.0.0.0 ${FULLPATH}/libubsan.so
322 chmod 755 %{BUILDROOT}%{libdir}/libubsan.so.*
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.*
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
345 binutils >= %{binutils_version}
355 # We do not ship libgcc-devel anymore.
356 provides += libgcc-devel = %{thisver}
357 obsoletes += libgcc-devel < %{thisver}
361 summary = C++ support for GCC.
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.
370 libstdc++ = %{thisver}
371 libstdc++-devel = %{thisver}
376 %{libdir}/gcc/*/*/cc1plus
377 /usr/share/man/man*/*++*
382 summary = The C Preprocessor.
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
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).
402 You should install this package if you are a C programmer and you use
405 group = Development/Languages
410 %{mandir}/man1/cpp.1*
411 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/cc1
415 requires = gcc-c++ = %{thisver}
419 summary = GCC shared support library.
421 This package contains GCC shared support library which is needed
422 e.g. for exception handling support.
426 %{libdir}/libgcc*.so.*
436 summary = GNU Standard C++ Library.
438 The libstdc++ package contains a rewritten standard compliant GCC Standard
443 %{libdir}/libstdc++*.so.*
447 package libstdc++-devel
448 summary = Header files and libraries for C++ development.
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.
456 libstdc++ = %{thisver}
461 %{libdir}/libstdc++*.so
465 package libstdc++-static
466 summary = Static libraries for the GNU standard C++ library
467 description = %{summary}
470 libstdc++-devel = %{thisver}
474 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libstdc++.a
475 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libsupc++.a
480 summary = GCC OpenMP v3.0 shared support library.
482 This package contains GCC shared support library which is needed
483 for OpenMP v3.0 support.
487 %{libdir}/libgomp*.so.*
491 if "%{build_libquadmath}" == "1"
493 summary = GCC __float128 shared support library.
495 This package contains GCC shared support library which is needed
496 for __float128 math support and for Fortran REAL*16 support.
500 %{libdir}/libquadmath*.so.*
504 package libquadmath-devel
505 summary = Development files for GCC __float128 support.
507 This package contains headers for building Fortran programs using
508 REAL*16 and programs using __float128 math.
513 libquadmath = %{thisver}
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
526 summary = The GNU Transactional Memory library.
528 This package contains the GNU Transactional Memory library
529 which is a GCC transactional memory support runtime library.
533 %{libdir}/libitm.so.1*
538 summary = The GNU Transactional Memory support.
540 This package contains headers and support files for the
541 GNU Transactional Memory library.
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
558 summary = The GNU Atomic library
560 This package contains the GNU Atomic library which is a
561 GCC support runtime library for atomisc operations not
562 supported by hardware.
566 %{libdir}/libatomic.so.1*
571 summary = The Address Sanitizer runtime library
573 This package contains the Address Sanitizer library
574 which is used for -fsanitize=address instrumented programs.
578 %{libdir}/libasan.so.2*
582 if "%{build_libtsan}" == "1"
584 summary = The Thread Sanitizer runtime library
586 This package contains the Thread Sanitizer library
587 which is used for -fsanitize=thread instrumented programs.
591 %{libdir}/libtsan.so.0*
596 if "%{build_libubsan}" == "1"
598 summary = The Undefined Behavior Sanitizer runtime library
600 This package contains the Undefined Behavior Sanitizer library
601 which is used for -fsanitize=undefined instrumented programs.
605 %{libdir}/libubsan.so.0*
610 if "%{build_liblsan}" == "1"
612 summary = The Leak Sanitizer runtime library
614 This package contains the Leak Sanitizer library
615 which is used for -fsanitize=leak instrumented programs.
619 %{libdir}/liblsan.so.0*
624 if "%{build_libcilkrts}" == "1"
626 summary = The Cilk+ runtime library
628 This package contains the Cilk+ runtime library.
632 %{libdir}/libcilkrts.so.5*
637 package gcc-plugin-devel
638 summary = Support for compiling GCC plugins.
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.
649 libmpc-devel >= 0.8.1
653 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/plugin
657 package %{name}-debuginfo