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.
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
26 cloog_version = 0.18.1
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
35 binutils >= %{binutils_version}
51 # If cloog support is enabled, we require the devel packages for build.
52 if "%{build_cloog}" == "1"
53 requires += cloog-devel >= %{cloog_version}
57 # Build libquadmath (only on x86).
60 # Build liblsan (only on x86_64).
63 # Build libtasn (only on x86_64).
66 # Build libcilkrts (only x86)
69 # A couple of configure arguments depending on the architecture and
73 make_bootstrap = profiledbootstrap
75 if "%{DISTRO_ARCH}" == "x86_64"
76 configure_options = --disable-multilib
84 if "%{DISTRO_ARCH}" == "i686"
85 configure_options = --with-arch=%{DISTRO_ARCH} --with-tune=generic
91 if "%{DISTRO_ARCH}" == "armv5tel"
92 make_bootstrap = bootstrap
94 configure_options += --disable-sjlj-exceptions
95 configure_options += --with-float=soft
98 if "%{DISTRO_ARCH}" == "armv7hl"
99 make_bootstrap = bootstrap
101 configure_options += --disable-sjlj-exceptions
103 configure_options += \
104 --with-cpu=cortex-a8 \
105 --with-tune=cortex-a8 \
106 --with-arch=armv7-a \
108 --with-fpu=vfpv3-d16 \
109 --with-abi=aapcs-linux
112 if "%{build_cloog}" == "1"
113 configure_options += \
114 --with-cloog=%{prefix} \
115 --with-isl=%{prefix} \
116 --enable-cloog-backend=isl
119 # CFLAGS for hardening.
120 HARD_CFLAGS = -DENABLE_ESP -DEFAULT_PIE_SSP -DEFAULT_RELRO -DEFAULT_BIND_NOW
123 mkdir -v %{DIR_SRC}/gcc-build
125 # Remove unneeded features that will save some compile time
126 rm -rf lib{gfortran,java,objc} gcc/{fortran,java,objc,objcp}
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
131 sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
134 echo "%{DISTRO_NAME} %{version}-%{release}" > gcc/DEV-PHASE
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
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
146 sed -i gcc/Makefile.in \
147 -e "s/-fno-exceptions/& -fno-asynchronous-unwind-tables/"
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) |'
157 # However, genautomata crashes with a "Bus Error" when compiled
159 sed -i gcc/Makefile.in \
160 -e 's|^build/genautomata$(build_exeext) .*|& -fno-PIC|'
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./'
169 #./contrib/gcc_update --touch
173 cd %{DIR_SRC}/gcc-build
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')
188 *-fasynchronous-unwind-tables*)
189 sed -i -e "s/-fno-exceptions /-fno-exceptions -fno-asynchronous-unwind-tables/" \
190 ../%{thisapp}/Makefile.in
195 CXXFLAGS="${CXXFLAGS}" \
196 XCFLAGS="${CFLAGS}" \
197 TCFLAGS="${CFLAGS}" \
198 ../%{thisapp}/configure \
199 --build=%{DISTRO_BUILDTARGET} \
202 --libexecdir=%{libdir} \
206 --enable-threads=posix \
207 --enable-__cxa_atexit \
208 --enable-clocale=gnu \
209 --enable-languages=c,c++,lto \
211 --enable-checking=release \
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 \
221 --enable-initfini-array \
225 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58012
226 # XXX disabled flags: --disable-static
228 # GCC does not support a parallel build.
229 make %{make_bootstrap} BOOT_CFLAGS="${CFLAGS}"
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
236 make -C gcc generated-manpages
237 for i in %{DIR_APP}/gcc/doc/*.texi; do mv -f $i.orig $i; done
241 # cd %{DIR_SRC}/gcc-build && make -k check || true
242 # cd %{DIR_APP} && ./contrib/test_summary
246 cd %{DIR_SRC}/gcc-build
247 make install DESTDIR=%{BUILDROOT}
249 # Check if the installation path exists.
250 FULLPATH="%{BUILDROOT}%{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}"
251 [ -d "${FULLPATH}" ] || exit 1
253 mkdir -pv %{BUILDROOT}%{prefix}/lib
254 ln -sfv ../bin/cpp %{BUILDROOT}%{prefix}/lib/cpp
255 ln -sfv gcc %{BUILDROOT}/usr/bin/cc
257 # Fix libgcc_s symlinks.
258 rm -f ${FULLPATH}/libgcc_s.so %{BUILDROOT}%{libdir}/libgcc_s.so
259 case "%{DISTRO_ARCH}" in
261 cat <<EOF >${FULLPATH}/libgcc_s.so
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 )
270 ln -svf ../../../../..%{libdir}/libgcc_s.so.1 ${FULLPATH}/libgcc_s.so
273 chmod 755 %{BUILDROOT}%{libdir}/libgcc_s.so.1
275 # Remove some GNU debugger stuff.
276 rm -vf %{BUILDROOT}%{libdir}/lib*.py
278 # Install missing header file(s) on ARM.
279 case "%{DISTRO_ARCH}" in
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/
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.*
294 ln -svf ../../../libstdc++.so.6.0.20 ${FULLPATH}/libstdc++.so
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 ln -svf ../../../libubsan.so.0.0.0 ${FULLPATH}/libubsan.so
321 chmod 755 %{BUILDROOT}%{libdir}/libubsan.so.*
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.*
331 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc.a
332 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc_eh.a
341 binutils >= %{binutils_version}
351 # We do not ship libgcc-devel anymore.
352 provides += libgcc-devel = %{thisver}
353 obsoletes += libgcc-devel < %{thisver}
355 if "%{build_cloog}" == "1"
356 requires += cloog >= %{cloog_version}
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
466 summary = GCC OpenMP v3.0 shared support library.
468 This package contains GCC shared support library which is needed
469 for OpenMP v3.0 support.
473 %{libdir}/libgomp*.so.*
477 if "%{build_libquadmath}" == "1"
479 summary = GCC __float128 shared support library.
481 This package contains GCC shared support library which is needed
482 for __float128 math support and for Fortran REAL*16 support.
486 %{libdir}/libquadmath*.so.*
490 package libquadmath-devel
491 summary = Development files for GCC __float128 support.
493 This package contains headers for building Fortran programs using
494 REAL*16 and programs using __float128 math.
499 libquadmath = %{thisver}
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
512 summary = The GNU Transactional Memory library.
514 This package contains the GNU Transactional Memory library
515 which is a GCC transactional memory support runtime library.
519 %{libdir}/libitm.so.1*
524 summary = The GNU Transactional Memory support.
526 This package contains headers and support files for the
527 GNU Transactional Memory library.
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
544 summary = The GNU Atomic library
546 This package contains the GNU Atomic library which is a
547 GCC support runtime library for atomisc operations not
548 supported by hardware.
552 %{libdir}/libatomic.so.1*
557 summary = The Address Sanitizer runtime library
559 This package contains the Address Sanitizer library
560 which is used for -fsanitize=address instrumented programs.
564 %{libdir}/libasan.so.1*
568 if "%{build_libtsan}" == "1"
570 summary = The Thread Sanitizer runtime library
572 This package contains the Thread Sanitizer library
573 which is used for -fsanitize=thread instrumented programs.
577 %{libdir}/libtsan.so.0*
583 summary = The Undefined Behavior Sanitizer runtime library
585 This package contains the Undefined Behavior Sanitizer library
586 which is used for -fsanitize=undefined instrumented programs.
590 %{libdir}/libubsan.so.0*
594 if "%{build_liblsan}" == "1"
596 summary = The Leak Sanitizer runtime library
598 This package contains the Leak Sanitizer library
599 which is used for -fsanitize=leak instrumented programs.
603 %{libdir}/liblsan.so.0*
608 if "%{build_libcilkrts}" == "1"
610 summary = The Cilk+ runtime library
612 This package contains the Cilk+ runtime library.
616 %{libdir}/libcilkrts.so.5*
621 package gcc-plugin-devel
622 summary = Support for compiling GCC plugins.
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.
633 libmpc-devel >= 0.8.1
637 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/plugin
641 package %{name}-debuginfo