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 cloog and ppl.
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 required_binutils_version = 2.21.51.0.8-1
27 source_dl = http://ftp.gnu.org/gnu/gcc/%{thisapp}/
28 sources = %{thisapp}.tar.gz
33 binutils >= %{required_binutils_version}
49 # If cloog support is enabled, we require the devel packages for build.
50 if "%{build_cloog_ppl}" == "1"
51 requires += cloog-ppl-devel >= 0.15.11-2
52 requires += ppl-devel >= 1.0
55 # Build libquadmath (only on x86).
58 # Build libtasn (only on x86_64).
61 # A couple of configure arguments depending on the architecture and
65 make_bootstrap = profiledbootstrap
67 if "%{DISTRO_ARCH}" == "x86_64"
68 configure_options = --disable-multilib
74 if "%{DISTRO_ARCH}" == "i686"
75 configure_options = --with-arch=%{DISTRO_ARCH} --with-tune=generic
80 if "%{DISTRO_ARCH}" == "armv5tel"
81 make_bootstrap = bootstrap
83 configure_options += --disable-sjlj-exceptions
84 configure_options += --with-float=soft
87 if "%{DISTRO_ARCH}" == "armv7hl"
88 make_bootstrap = bootstrap
90 configure_options += --disable-sjlj-exceptions
92 configure_options += \
93 --with-cpu=cortex-a8 \
94 --with-tune=cortex-a8 \
97 --with-fpu=vfpv3-d16 \
98 --with-abi=aapcs-linux
101 if "%{build_cloog_ppl}" == "1"
102 configure_options += --with-cloog --with-ppl \
103 --disable-ppl-version-check
106 # CFLAGS for hardening.
107 HARD_CFLAGS = -DENABLE_ESP -DEFAULT_PIE_SSP -DEFAULT_RELRO -DEFAULT_BIND_NOW
110 mkdir -v %{DIR_SRC}/gcc-build
112 # Remove unneeded features that will save some compile time
113 rm -rf lib{gfortran,java,objc} gcc/{fortran,java,objc,objcp}
115 # Apply a sed substitution that will suppress the installation of
116 # libiberty.a. The version of libiberty.a provided by Binutils will be used
118 sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
121 echo "%{DISTRO_NAME} %{version}-%{release}" > gcc/DEV-PHASE
123 # Libgomp uses -Werror regardless of --disable-werror, and this will cause a
124 # build failure when -D_FORTIFY_SOURCE=2 causes build time warnings:
125 sed -e "s/-Werror//" -i libgomp/configure
127 # The fixincludes script is known to occasionally erroneously attempt to
128 # "fix" the system headers installed so far. As the headers up to this point
129 # are known to not require fixing, issue the following command to prevent
130 # the fixincludes script from running:
131 sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
133 sed -i gcc/Makefile.in \
134 -e "s/-fno-exceptions/& -fno-asynchronous-unwind-tables/"
136 # we want to be able to control the pie patch logic via something other
137 # than ALL_CFLAGS and ALL_CXXFLAGS...
138 sed -i gcc/Makefile.in \
139 -e '/^ALL_CFLAGS/iHARD_CFLAGS = %{HARD_CFLAGS}' \
140 -e 's|^ALL_CFLAGS = |ALL_CFLAGS = $(HARD_CFLAGS) |' \
141 -e '/^ALL_CXXFLAGS/iHARD_CFLAGS = %{HARD_CFLAGS}' \
142 -e 's|^ALL_CXXFLAGS = |ALL_CXXFLAGS = $(HARD_CFLAGS) |'
144 # However, genautomata crashes with a "Bus Error" when compiled
146 sed -i gcc/Makefile.in \
147 -e 's|^build/genautomata$(build_exeext) .*|& -fno-PIC|'
149 # Default to -gdwarf-4 -fno-debug-types-section rather than -gdwarf-2
150 sed -i gcc/common.opt \
151 -e '/UInteger Var(dwarf_version)/s/Init(2)/Init(4)/' \
152 -e '/flag_debug_types_section/s/Init(1)/Init(0)/' \
153 -e '/dwarf_record_gcc_switches/s/Init(0)/Init(1)/' \
154 -e 's/\(may be either 2, 3 or 4; the default version is \)2\./\14./'
156 #./contrib/gcc_update --touch
160 cd %{DIR_SRC}/gcc-build
164 CFLAGS=$(echo ${CFLAGS} | sed -e 's/\(-Wp,\)\?-D_FORTIFY_SOURCE=[12]//g')
165 CFLAGS=$(echo ${CFLAGS} | sed -e 's/-m64//g;s/-m32//g;s/-m31//g')
166 CFLAGS=$(echo ${CFLAGS} | sed -e 's/-march=i.86//g')
167 CFLAGS=$(echo ${CFLAGS} | sed -e 's/ -pipe / /g')
168 CFLAGS=$(echo "${CFLAGS}" | sed -e 's/[[:blank:]]\+/ /g')
169 CXXFLAGS=$(echo ${CFLAGS} | sed -e 's/ -Wall//g')
172 CXXFLAGS="${CXXFLAGS}" \
173 XCFLAGS="${CFLAGS}" \
174 TCFLAGS="${CFLAGS}" \
175 ../%{thisapp}/configure \
176 --build=%{DISTRO_BUILDTARGET} \
179 --libexecdir=%{libdir} \
183 --enable-threads=posix \
184 --enable-__cxa_atexit \
185 --enable-clocale=gnu \
186 --enable-languages=c,c++,lto \
188 --enable-checking=release \
193 --with-bugurl=http://bugtracker.ipfire.org \
194 --disable-libunwind-exceptions \
195 --enable-gnu-unique-object \
196 --enable-linker-build-id \
197 --with-linker-hash-style=gnu \
199 --enable-initfini-array \
202 # GCC does not support a parallel build.
203 make %{make_bootstrap} BOOT_CFLAGS="${CFLAGS}"
205 # Generate man pages.
206 perl -pi -e 's/head3/head2/' ../contrib/texi2pod.pl
207 for i in %{DIR_APP}/gcc/doc/*.texi; do
208 cp -a $i $i.orig; sed 's/ftable/table/' $i.orig > $i
210 make -C gcc generated-manpages
211 for i in %{DIR_APP}/gcc/doc/*.texi; do mv -f $i.orig $i; done
215 # cd %{DIR_SRC}/gcc-build && make check
216 # cd %{DIR_APP} && ./contrib/test_summary
220 cd %{DIR_SRC}/gcc-build
221 make install DESTDIR=%{BUILDROOT}
223 # Check if the installation path exists.
224 FULLPATH="%{BUILDROOT}%{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}"
225 [ -d "${FULLPATH}" ] || exit 1
227 mkdir -pv %{BUILDROOT}%{prefix}/lib
228 ln -sfv ../bin/cpp %{BUILDROOT}%{prefix}/lib/cpp
229 ln -sfv gcc %{BUILDROOT}/usr/bin/cc
231 # Fix libgcc_s symlinks.
232 rm -f ${FULLPATH}/libgcc_s.so %{BUILDROOT}%{libdir}/libgcc_s.so
233 case "%{DISTRO_ARCH}" in
235 cat <<EOF >${FULLPATH}/libgcc_s.so
237 Use the shared library, but some functions are only in
238 the static library, so try that secondarily. */
239 OUTPUT_FORMAT(elf32-littlearm)
240 GROUP ( %{libdir}/libgcc_s.so.1 libgcc.a )
244 ln -svf ../../../../..%{libdir}/libgcc_s.so.1 ${FULLPATH}/libgcc_s.so
247 chmod 755 %{BUILDROOT}%{libdir}/libgcc_s.so.1
249 # Remove some GNU debugger stuff.
250 rm -vf %{BUILDROOT}%{libdir}/lib*.py
252 # Install missing header file(s) on ARM.
253 case "%{DISTRO_ARCH}" in
255 cp -vf %{DIR_APP}/gcc/config/vxworks-dummy.h \
256 ${FULLPATH}/plugin/include/config/
257 cp -vf %{DIR_APP}/gcc/config/arm/arm-cores.def \
258 ${FULLPATH}/plugin/include/config/arm/
263 mv -vf %{BUILDROOT}%{libdir}/libgomp.spec ${FULLPATH}/
264 ln -svf ../../../libgomp.so.1.0.0 ${FULLPATH}/libgomp.so
265 chmod 755 %{BUILDROOT}%{libdir}/libgomp.so.1.*
268 ln -svf ../../../libstdc++.so.6.0.18 ${FULLPATH}/libstdc++.so
271 ln -svf ../../../libmudflap.so.0.0.0 ${FULLPATH}/libmudflap.so
272 ln -svf ../../../libmudflapth.so.0.0.0 ${FULLPATH}/libmudflapth.so
273 chmod 755 %{BUILDROOT}%{libdir}/libmudflap{,th}.so.0.*
276 if [ "%{build_libquadmath}" = "1" ]; then
277 ln -svf ../../../libquadmath.so.0.0.0 ${FULLPATH}/libquadmath.so
278 chmod 755 %{BUILDROOT}%{libdir}/libquadmath.so.0.*
282 mv -vf %{BUILDROOT}%{libdir}/libitm.spec ${FULLPATH}/
283 ln -svf ../../../libitm.so.1.0.0 ${FULLPATH}/libitm.so
284 chmod 755 %{BUILDROOT}%{libdir}/libitm.so.1.*
288 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc.a
289 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc_eh.a
298 binutils >= %{required_binutils_version}
308 # We do not ship libgcc-devel anymore.
309 provides += libgcc-devel = %{thisver}
310 obsoletes += libgcc-devel < %{thisver}
312 if "%{build_cloog_ppl}" == "1"
313 requires += cloog-ppl >= 0.15
318 summary = C++ support for GCC.
320 This package adds C++ support to the GNU Compiler Collection.
321 It includes support for most of the current C++ specification,
322 including templates and exception handling.
327 libstdc++ = %{thisver}
328 libstdc++-devel = %{thisver}
333 %{libdir}/gcc/*/*/cc1plus
334 /usr/share/man/man*/*++*
339 summary = The C Preprocessor.
341 Cpp is the GNU C-Compatible Compiler Preprocessor.
342 Cpp is a macro processor which is used automatically
343 by the C compiler to transform your program before actual
344 compilation. It is called a macro processor because it allows
345 you to define macros, abbreviations for longer
348 The C preprocessor provides four separate functionalities: the
349 inclusion of header files (files of declarations that can be
350 substituted into your program); macro expansion (you can define macros,
351 and the C preprocessor will replace the macros with their definitions
352 throughout the program); conditional compilation (using special
353 preprocessing directives, you can include or exclude parts of the
354 program according to various conditions); and line control (if you use
355 a program to combine or rearrange source files into an intermediate
356 file which is then compiled, you can use line control to inform the
357 compiler about where each source line originated).
359 You should install this package if you are a C programmer and you use
362 group = Development/Languages
367 %{mandir}/man1/cpp.1*
368 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/cc1
372 requires = gcc-c++ = %{thisver}
376 summary = GCC shared support library.
378 This package contains GCC shared support library which is needed
379 e.g. for exception handling support.
383 %{libdir}/libgcc*.so.*
388 summary = GNU Standard C++ Library.
390 The libstdc++ package contains a rewritten standard compliant GCC Standard
395 %{libdir}/libstdc++*.so.*
399 package libstdc++-devel
400 summary = Header files and libraries for C++ development.
402 This is the GNU implementation of the standard C++ libraries. This
403 package includes the header files and libraries needed for C++
404 development. This includes rewritten implementation of STL.
408 libstdc++ = %{thisver}
413 %{libdir}/libstdc++*.so
418 summary = GCC OpenMP v3.0 shared support library.
420 This package contains GCC shared support library which is needed
421 for OpenMP v3.0 support.
425 %{libdir}/libgomp*.so.*
430 summary = GCC mudflap shared support library.
432 This package contains GCC shared support library which is needed
437 %{libdir}/libmudflap*.so.*
441 package libmudflap-devel
442 summary = Development files for GCC mudflap support.
444 This package contains headers for building mudflap-instrumented programs.
446 To instrument a non-threaded program, add -fmudflap
447 option to GCC and when linking add -lmudflap, for threaded programs
448 also add -fmudflapth and -lmudflapth.
452 libmudflap = %{thisver}
456 %{libdir}/libmudflap.so
457 %{libdir}/libmudflapth.so
458 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/mf-runtime.h
459 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libmudflap.so
460 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libmudflapth.so
464 if "%{build_libquadmath}" == "1"
466 summary = GCC __float128 shared support library.
468 This package contains GCC shared support library which is needed
469 for __float128 math support and for Fortran REAL*16 support.
473 %{libdir}/libquadmath*.so.*
477 package libquadmath-devel
478 summary = Development files for GCC __float128 support.
480 This package contains headers for building Fortran programs using
481 REAL*16 and programs using __float128 math.
486 libquadmath = %{thisver}
490 %{libdir}/libquadmath.so
491 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/quadmath.h
492 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/quadmath_weak.h
493 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libquadmath.so
499 summary = The GNU Transactional Memory library.
501 This package contains the GNU Transactional Memory library
502 which is a GCC transactional memory support runtime library.
506 %{libdir}/libitm.so.1*
511 summary = The GNU Transactional Memory support.
513 This package contains headers and support files for the
514 GNU Transactional Memory library.
524 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/itm.h
525 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/itm_weak.h
526 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libitm.so
531 summary = The GNU Atomic library
533 This package contains the GNU Atomic library which is a
534 GCC support runtime library for atomisc operations not
535 supported by hardware.
539 %{libdir}/libatomic.so.1*
544 summary = The Address Sanitizer runtime library
546 This package contains the Address Sanitizer library
547 which is used for -fsanitize=address instrumented programs.
551 %{libdir}/libasan.so.0*
555 if "%{build_libtsan}" == "1"
557 summary = The Thread Sanitizer runtime library
559 This package contains the Thread Sanitizer library
560 which is used for -fsanitize=thread instrumented programs.
564 %{libdir}/libtsan.so.0*
569 package gcc-plugin-devel
570 summary = Support for compiling GCC plugins.
572 This package contains header files and other support files
573 for compiling GCC plugins. The GCC plugin ABI is currently
574 not stable, so plugins must be rebuilt any time GCC is updated.
581 libmpc-devel >= 0.8.1
585 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/plugin
589 package %{name}-debuginfo