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
55 # Build libquadmath (only on x86).
58 # A couple of configure arguments depending on the architecture and
62 make_bootstrap = profiledbootstrap
64 if "%{DISTRO_ARCH}" == "x86_64"
65 configure_options = --disable-multilib
70 if "%{DISTRO_ARCH}" == "i686"
71 configure_options = --with-arch=%{DISTRO_ARCH} --with-tune=generic
76 if "%{DISTRO_ARCH}" == "armv5tel"
77 make_bootstrap = bootstrap
79 configure_options += --disable-sjlj-exceptions
80 configure_options += --with-float=soft
83 if "%{DISTRO_ARCH}" == "armv7hl"
84 make_bootstrap = bootstrap
86 configure_options += --disable-sjlj-exceptions
88 configure_options += \
89 --with-cpu=cortex-a8 \
90 --with-tune=cortex-a8 \
93 --with-fpu=vfpv3-d16 \
94 --with-abi=aapcs-linux
97 if "%{build_cloog_ppl}" == "1"
98 configure_options += --with-cloog --with-ppl
101 # CFLAGS for hardening.
102 HARD_CFLAGS = -DEFAULT_PIE -DEFAULT_SSP -DEFAULT_PIE_SSP -DEFAULT_ESP_SPP \
103 -DENABLE_ESP_SSP -DEFAULT_RELRO -DEFAULT_BIND_NOW
106 mkdir -v %{DIR_SRC}/gcc-build
108 # Remove unneeded features that will save some compile time
109 rm -rf lib{gfortran,java,objc} gcc/{fortran,java,objc,objcp}
111 # Apply a sed substitution that will suppress the installation of
112 # libiberty.a. The version of libiberty.a provided by Binutils will be used
114 sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
117 echo "%{DISTRO_NAME} %{version}-%{release}" > gcc/DEV-PHASE
119 # Libgomp uses -Werror regardless of --disable-werror, and this will cause a
120 # build failure when -D_FORTIFY_SOURCE=2 causes build time warnings:
121 sed -e "s/-Werror//" -i libgomp/configure
123 # The fixincludes script is known to occasionally erroneously attempt to
124 # "fix" the system headers installed so far. As the headers up to this point
125 # are known to not require fixing, issue the following command to prevent
126 # the fixincludes script from running:
127 sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
129 sed -i gcc/Makefile.in \
130 -e "s/-fno-exceptions/& -fno-asynchronous-unwind-tables/"
132 # we want to be able to control the pie patch logic via something other
133 # than ALL_CFLAGS and ALL_CXXFLAGS...
134 sed -i gcc/Makefile.in \
135 -e '/^ALL_CFLAGS/iHARD_CFLAGS = ' \
136 -e 's|^ALL_CFLAGS = |ALL_CFLAGS = $(HARD_CFLAGS) |' \
137 -e '/^ALL_CXXFLAGS/iHARD_CFLAGS = ' \
138 -e 's|^ALL_CXXFLAGS = |ALL_CXXFLAGS = $(HARD_CFLAGS) |'
140 # Enable the GCC hardening by default.
141 sed -i gcc/Makefile.in \
142 -e "s|^HARD_CFLAGS = |HARD_CFLAGS = %{HARD_CFLAGS} |"
144 # Compile the compiler with -fPIC as well.
145 # However, genautomata crashes with a "Bus Error" when compiled
147 sed -i gcc/Makefile.in \
148 -e "s|^ESP_NOPIE_CFLAGS = .*|ESP_NOPIE_CFLAGS =|" \
149 -e 's|^build/genautomata$(build_exeext) .*|& -fno-PIC|'
151 # Default to -gdwarf-4 -fno-debug-types-section rather than -gdwarf-2
152 sed -i gcc/common.opt \
153 -e '/UInteger Var(dwarf_version)/s/Init(2)/Init(4)/' \
154 -e '/flag_debug_types_section/s/Init(1)/Init(0)/' \
155 -e '/dwarf_record_gcc_switches/s/Init(0)/Init(1)/' \
156 -e 's/\(may be either 2, 3 or 4; the default version is \)2\./\14./'
158 ./contrib/gcc_update --touch
162 cd %{DIR_SRC}/gcc-build
166 CFLAGS=$(echo ${CFLAGS} | sed -e 's/\(-Wp,\)\?-D_FORTIFY_SOURCE=[12]//g')
167 CFLAGS=$(echo ${CFLAGS} | sed -e 's/-m64//g;s/-m32//g;s/-m31//g')
168 CFLAGS=$(echo ${CFLAGS} | sed -e 's/-march=i.86//g')
169 CFLAGS=$(echo ${CFLAGS} | sed -e 's/ -pipe / /g')
170 CFLAGS=$(echo "${CFLAGS}" | sed -e 's/[[:blank:]]\+/ /g')
171 CXXFLAGS=$(echo ${CFLAGS} | sed -e 's/ -Wall//g')
174 CXXFLAGS="${CXXFLAGS}" \
175 XCFLAGS="${CFLAGS}" \
176 TCFLAGS="${CFLAGS}" \
177 ../%{thisapp}/configure \
178 --build=%{DISTRO_BUILDTARGET} \
181 --libexecdir=%{libdir} \
182 --mandir=/usr/share/man \
185 --enable-threads=posix \
186 --enable-__cxa_atexit \
187 --enable-clocale=gnu \
188 --enable-languages=c,c++,lto \
190 --enable-checking=release \
191 --disable-build-with-cxx \
192 --disable-build-poststage1-with-cxx \
197 --with-bugurl=http://bugtracker.ipfire.org \
198 --disable-libunwind-exceptions \
199 --enable-gnu-unique-object \
200 --enable-linker-build-id \
201 --with-linker-hash-style=gnu \
204 # GCC does not support a parallel build.
205 make %{make_bootstrap} BOOT_CFLAGS="${CFLAGS}"
207 # Generate man pages.
208 perl -pi -e 's/head3/head2/' ../contrib/texi2pod.pl
209 for i in %{DIR_APP}/gcc/doc/*.texi; do
210 cp -a $i $i.orig; sed 's/ftable/table/' $i.orig > $i
212 make -C gcc generated-manpages
213 for i in %{DIR_APP}/gcc/doc/*.texi; do mv -f $i.orig $i; done
217 # cd %{DIR_SRC}/gcc-build && make check
218 # cd %{DIR_APP} && ./contrib/test_summary
222 cd %{DIR_SRC}/gcc-build
223 make install DESTDIR=%{BUILDROOT}
225 # Check if the installation path exists.
226 FULLPATH="%{BUILDROOT}%{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}"
227 [ -d "${FULLPATH}" ] || exit 1
229 mkdir -pv %{BUILDROOT}%{prefix}/lib
230 ln -sfv ../bin/cpp %{BUILDROOT}%{prefix}/lib/cpp
231 ln -sfv gcc %{BUILDROOT}/usr/bin/cc
233 # Fix libgcc_s symlinks.
234 rm -f ${FULLPATH}/libgcc_s.so %{BUILDROOT}%{libdir}/libgcc_s.so
235 case "%{DISTRO_ARCH}" in
237 cat <<EOF >${FULLPATH}/libgcc_s.so
239 Use the shared library, but some functions are only in
240 the static library, so try that secondarily. */
241 OUTPUT_FORMAT(elf32-littlearm)
242 GROUP ( %{libdir}/libgcc_s.so.1 libgcc.a )
246 ln -svf ../../../../..%{libdir}/libgcc_s.so.1 ${FULLPATH}/libgcc_s.so
249 chmod 755 %{BUILDROOT}%{libdir}/libgcc_s.so.1
251 # Remove some GNU debugger stuff.
252 rm -vf %{BUILDROOT}%{libdir}/lib*.py
254 # Install missing header file(s) on ARM.
255 case "%{DISTRO_ARCH}" in
257 cp -vf %{DIR_APP}/gcc/config/vxworks-dummy.h \
258 ${FULLPATH}/plugin/include/config/
259 cp -vf %{DIR_APP}/gcc/config/arm/arm-cores.def \
260 ${FULLPATH}/plugin/include/config/arm/
265 mv -vf %{BUILDROOT}%{libdir}/libgomp.spec ${FULLPATH}/
266 ln -svf ../../../libgomp.so.1.0.0 ${FULLPATH}/libgomp.so
267 chmod 755 %{BUILDROOT}%{libdir}/libgomp.so.1.*
270 ln -svf ../../../libstdc++.so.6.0.17 ${FULLPATH}/libstdc++.so
273 ln -svf ../../../libmudflap.so.0.0.0 ${FULLPATH}/libmudflap.so
274 ln -svf ../../../libmudflapth.so.0.0.0 ${FULLPATH}/libmudflapth.so
275 chmod 755 %{BUILDROOT}%{libdir}/libmudflap{,th}.so.0.*
278 if [ "%{build_libquadmath}" = "1" ]; then
279 ln -svf ../../../libquadmath.so.0.0.0 ${FULLPATH}/libquadmath.so
280 chmod 755 %{BUILDROOT}%{libdir}/libquadmath.so.0.*
284 mv -vf %{BUILDROOT}%{libdir}/libitm.spec ${FULLPATH}/
285 ln -svf ../../../libitm.so.1.0.0 ${FULLPATH}/libitm.so
286 chmod 755 %{BUILDROOT}%{libdir}/libitm.so.1.*
290 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc.a
291 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc_eh.a
300 binutils >= %{required_binutils_version}
310 # We do not ship libgcc-devel anymore.
311 provides += libgcc-devel = %{thisver}
312 obsoletes += libgcc-devel < %{thisver}
314 if "%{build_cloog_ppl}" == "1"
315 requires += cloog-ppl >= 0.15
320 summary = C++ support for GCC.
322 This package adds C++ support to the GNU Compiler Collection.
323 It includes support for most of the current C++ specification,
324 including templates and exception handling.
329 libstdc++ = %{thisver}
330 libstdc++-devel = %{thisver}
335 %{libdir}/gcc/*/*/cc1plus
336 /usr/share/man/man*/*++*
341 summary = The C Preprocessor.
343 Cpp is the GNU C-Compatible Compiler Preprocessor.
344 Cpp is a macro processor which is used automatically
345 by the C compiler to transform your program before actual
346 compilation. It is called a macro processor because it allows
347 you to define macros, abbreviations for longer
350 The C preprocessor provides four separate functionalities: the
351 inclusion of header files (files of declarations that can be
352 substituted into your program); macro expansion (you can define macros,
353 and the C preprocessor will replace the macros with their definitions
354 throughout the program); conditional compilation (using special
355 preprocessing directives, you can include or exclude parts of the
356 program according to various conditions); and line control (if you use
357 a program to combine or rearrange source files into an intermediate
358 file which is then compiled, you can use line control to inform the
359 compiler about where each source line originated).
361 You should install this package if you are a C programmer and you use
364 group = Development/Languages
369 %{mandir}/man1/cpp.1*
370 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/cc1
374 requires = gcc-c++ = %{thisver}
378 summary = GCC shared support library.
380 This package contains GCC shared support library which is needed
381 e.g. for exception handling support.
385 %{libdir}/libgcc*.so.*
390 summary = GNU Standard C++ Library.
392 The libstdc++ package contains a rewritten standard compliant GCC Standard
397 %{libdir}/libstdc++*.so.*
401 package libstdc++-devel
402 summary = Header files and libraries for C++ development.
404 This is the GNU implementation of the standard C++ libraries. This
405 package includes the header files and libraries needed for C++
406 development. This includes rewritten implementation of STL.
410 libstdc++ = %{thisver}
415 %{libdir}/libstdc++*.so
420 summary = GCC OpenMP v3.0 shared support library.
422 This package contains GCC shared support library which is needed
423 for OpenMP v3.0 support.
427 %{libdir}/libgomp*.so.*
432 summary = GCC mudflap shared support library.
434 This package contains GCC shared support library which is needed
439 %{libdir}/libmudflap*.so.*
443 package libmudflap-devel
444 summary = Development files for GCC mudflap support.
446 This package contains headers for building mudflap-instrumented programs.
448 To instrument a non-threaded program, add -fmudflap
449 option to GCC and when linking add -lmudflap, for threaded programs
450 also add -fmudflapth and -lmudflapth.
454 libmudflap = %{thisver}
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}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/quadmath.h
491 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/quadmath_weak.h
492 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libquadmath.so
498 summary = The GNU Transactional Memory library.
500 This package contains the GNU Transactional Memory library
501 which is a GCC transactional memory support runtime library.
505 %{libdir}/libitm.so.1*
510 summary = The GNU Transactional Memory support.
512 This package contains headers and support files for the
513 GNU Transactional Memory library.
522 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/itm.h
523 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/itm_weak.h
524 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libitm.so
528 package gcc-plugin-devel
529 summary = Support for compiling GCC plugins.
531 This package contains header files and other support files
532 for compiling GCC plugins. The GCC plugin ABI is currently
533 not stable, so plugins must be rebuilt any time GCC is updated.
540 libmpc-devel >= 0.8.1
544 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/plugin
548 package %{name}-debuginfo