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
32 gcc46-c++-builtin-redecl.patch0 \
33 gcc46-pr33763.patch0 \
34 gcc46-libgomp-omp_h-multilib.patch0 \
35 gcc46-libtool-no-rpath.patch0 \
36 gcc46-cloog-dl.patch0 \
37 gcc46-pr38757.patch0 \
38 gcc46-no-add-needed.patch0 \
39 gcc46-unwind-debughook-sdt.patch0 \
40 gcc46-ppl-0.10.patch \
41 gcc46-Woverlength-string.patch0 \
42 gcc46-Woverlength-string-asm.patch0 \
43 gcc-4.6.3-piepatches-20120408.patch
48 binutils>=%{required_binutils_version}
63 # If cloog support is enabled, we require the devel packages for build.
64 if "%{build_cloog_ppl}" == "1"
65 requires += cloog-ppl-devel
69 # Build libquadmath (only on x86).
72 # A couple of configure arguments depending on the architecture and
76 make_bootstrap = profiledbootstrap
78 if "%{DISTRO_ARCH}" == "x86_64"
79 configure_options = --disable-multilib
84 if "%{DISTRO_ARCH}" == "i686"
85 configure_options = --with-arch=%{DISTRO_ARCH} --with-tune=generic
90 if "%{DISTRO_ARCH}" == "armv5tel"
91 make_bootstrap = bootstrap
93 configure_options += --disable-sjlj-exceptions
94 configure_options += --with-float=soft
97 if "%{DISTRO_ARCH}" == "armv7hl"
98 make_bootstrap = bootstrap
100 configure_options += --disable-sjlj-exceptions
102 configure_options += \
103 --with-cpu=cortex-a8 \
104 --with-tune=cortex-a8 \
105 --with-arch=armv7-a \
107 --with-fpu=vfpv3-d16 \
108 --with-abi=aapcs-linux
111 if "%{build_cloog_ppl}" == "1"
112 configure_options += --with-cloog --with-ppl
115 # CFLAGS for hardening.
116 HARD_CFLAGS = -DEFAULT_PIE -DEFAULT_SSP -DEFAULT_PIE_SSP -DEFAULT_ESP_SPP \
117 -DENABLE_ESP_SSP -DEFAULT_RELRO -DEFAULT_BIND_NOW
120 mkdir -v %{DIR_SRC}/gcc-build
122 # Remove unneeded features that will save some compile time
123 rm -rf lib{gfortran,java,objc} gcc/{fortran,java,objc,objcp}
125 # Apply a sed substitution that will suppress the installation of
126 # libiberty.a. The version of libiberty.a provided by Binutils will be used
128 sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
131 echo "%{DISTRO_NAME} %{version}-%{release}" > gcc/DEV-PHASE
133 # Libgomp uses -Werror regardless of --disable-werror, and this will cause a
134 # build failure when -D_FORTIFY_SOURCE=2 causes build time warnings:
135 sed -e "s/-Werror//" -i libgomp/configure
137 # The fixincludes script is known to occasionally erroneously attempt to
138 # "fix" the system headers installed so far. As the headers up to this point
139 # are known to not require fixing, issue the following command to prevent
140 # the fixincludes script from running:
141 sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
143 sed -i gcc/Makefile.in \
144 -e "s/-fno-exceptions/& -fno-asynchronous-unwind-tables/"
146 # we want to be able to control the pie patch logic via something other
148 sed -i gcc/Makefile.in \
149 -e '/^ALL_CFLAGS/iHARD_CFLAGS = ' \
150 -e 's|^ALL_CFLAGS = |ALL_CFLAGS = $(HARD_CFLAGS) |'
152 # Enable the GCC hardening by default.
153 sed -i gcc/Makefile.in \
154 -e "s|^HARD_CFLAGS = |HARD_CFLAGS = %{HARD_CFLAGS} |"
156 # Compile the compiler with -fPIC as well.
157 sed -i gcc/Makefile.in \
158 -e "s|^ESP_NOPIE_CFLAGS = .*|ESP_NOPIE_CFLAGS =|"
160 # Default to -gdwarf-4 -fno-debug-types-section rather than -gdwarf-2
161 sed -i gcc/common.opt \
162 -e '/UInteger Var(dwarf_version)/s/Init(2)/Init(4)/' \
163 -e '/flag_debug_types_section/s/Init(1)/Init(0)/' \
164 -e '/dwarf_record_gcc_switches/s/Init(0)/Init(1)/' \
165 -e 's/\(may be either 2, 3 or 4; the default version is \)2\./\14./'
167 ./contrib/gcc_update --touch
171 cd %{DIR_SRC}/gcc-build
175 CFLAGS=$(echo ${CFLAGS} | sed -e 's/\(-Wp,\)\?-D_FORTIFY_SOURCE=[12]//g')
176 CFLAGS=$(echo ${CFLAGS} | sed -e 's/-m64//g;s/-m32//g;s/-m31//g')
177 CFLAGS=$(echo ${CFLAGS} | sed -e 's/-march=i.86//g')
178 CFLAGS=$(echo ${CFLAGS} | sed -e 's/ -pipe / /g')
179 CFLAGS=$(echo "${CFLAGS}" | sed -e 's/[[:blank:]]\+/ /g')
180 CXXFLAGS=$(echo ${CFLAGS} | sed -e 's/ -Wall//g')
183 CXXFLAGS="${CXXFLAGS}" \
184 XCFLAGS="${CFLAGS}" \
185 TCFLAGS="${CFLAGS}" \
186 ../%{thisapp}/configure \
187 --build=%{DISTRO_BUILDTARGET} \
190 --libexecdir=%{libdir} \
191 --mandir=/usr/share/man \
194 --enable-threads=posix \
195 --enable-__cxa_atexit \
196 --enable-clocale=gnu \
197 --enable-languages=c,c++,lto \
199 --enable-checking=release \
204 --with-bugurl=http://bugtracker.ipfire.org \
205 --disable-libunwind-exceptions \
206 --enable-gnu-unique-object \
207 --enable-linker-build-id \
210 # GCC does not support a parallel build.
211 make %{make_bootstrap} BOOT_CFLAGS="${CFLAGS}"
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
248 # Remove some GNU debugger stuff.
249 rm -vf %{BUILDROOT}%{libdir}/lib*.py
251 # Install missing header file(s) on ARM.
252 case "%{DISTRO_ARCH}" in
254 cp -vf %{DIR_APP}/gcc/config/vxworks-dummy.h \
255 ${FULLPATH}/plugin/include/config/
256 cp -vf %{DIR_APP}/gcc/config/arm/arm-cores.def \
257 ${FULLPATH}/plugin/include/config/arm/
262 mv -vf %{BUILDROOT}%{libdir}/libgomp.spec ${FULLPATH}/
263 ln -svf ../../../libgomp.so.1.0.0 ${FULLPATH}/libgomp.so
264 chmod 755 %{BUILDROOT}%{libdir}/libgomp.so.1.*
267 ln -svf ../../../libstdc++.so.6.0.16 ${FULLPATH}/libstdc++.so
270 ln -svf ../../../libmudflap.so.0.0.0 ${FULLPATH}/libmudflap.so
271 ln -svf ../../../libmudflapth.so.0.0.0 ${FULLPATH}/libmudflapth.so
272 chmod 755 %{BUILDROOT}%{libdir}/libmudflap{,th}.so.0.*
275 if [ "%{build_libquadmath}" = "1" ]; then
276 ln -svf ../../../libquadmath.so.0.0.0 ${FULLPATH}/libquadmath.so
277 chmod 755 %{BUILDROOT}%{libdir}/libquadmath.so.0.*
282 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc.a
283 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc_eh.a
292 binutils >= %{required_binutils_version}
301 # We do not ship libgcc-devel anymore.
302 provides += libgcc-devel = %{thisver}
303 obsoletes += libgcc-devel < %{thisver}
305 if "%{build_cloog_ppl}" == "1"
306 requires += cloog-ppl >= 0.15
311 summary = C++ support for GCC.
313 This package adds C++ support to the GNU Compiler Collection.
314 It includes support for most of the current C++ specification,
315 including templates and exception handling.
320 libstdc++ = %{thisver}
321 libstdc++-devel = %{thisver}
326 %{libdir}/gcc/*/*/cc1plus
327 /usr/share/man/man*/*++*
332 summary = The C Preprocessor.
334 Cpp is the GNU C-Compatible Compiler Preprocessor.
335 Cpp is a macro processor which is used automatically
336 by the C compiler to transform your program before actual
337 compilation. It is called a macro processor because it allows
338 you to define macros, abbreviations for longer
341 The C preprocessor provides four separate functionalities: the
342 inclusion of header files (files of declarations that can be
343 substituted into your program); macro expansion (you can define macros,
344 and the C preprocessor will replace the macros with their definitions
345 throughout the program); conditional compilation (using special
346 preprocessing directives, you can include or exclude parts of the
347 program according to various conditions); and line control (if you use
348 a program to combine or rearrange source files into an intermediate
349 file which is then compiled, you can use line control to inform the
350 compiler about where each source line originated).
352 You should install this package if you are a C programmer and you use
355 group = Development/Languages
360 %{mandir}/man1/cpp.1*
361 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/cc1
368 summary = GCC shared support library.
370 This package contains GCC shared support library which is needed
371 e.g. for exception handling support.
375 %{libdir}/libgcc*.so.*
380 summary = GNU Standard C++ Library.
382 The libstdc++ package contains a rewritten standard compliant GCC Standard
387 %{libdir}/libstdc++*.so.*
391 package libstdc++-devel
392 summary = Header files and libraries for C++ development.
394 This is the GNU implementation of the standard C++ libraries. This
395 package includes the header files and libraries needed for C++
396 development. This includes rewritten implementation of STL.
400 libstdc++ = %{thisver}
405 %{libdir}/libstdc++*.so
410 summary = GCC OpenMP v3.0 shared support library.
412 This package contains GCC shared support library which is needed
413 for OpenMP v3.0 support.
417 %{libdir}/libgomp*.so.*
422 summary = GCC mudflap shared support library.
424 This package contains GCC shared support library which is needed
429 %{libdir}/libmudflap*.so.*
433 package libmudflap-devel
434 summary = Development files for GCC mudflap support.
436 This package contains headers for building mudflap-instrumented programs.
438 To instrument a non-threaded program, add -fmudflap
439 option to GCC and when linking add -lmudflap, for threaded programs
440 also add -fmudflapth and -lmudflapth.
444 libmudflap = %{thisver}
448 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/mf-runtime.h
449 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libmudflap.so
450 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libmudflapth.so
454 if "%{build_libquadmath}" == "1"
456 summary = GCC __float128 shared support library.
458 This package contains GCC shared support library which is needed
459 for __float128 math support and for Fortran REAL*16 support.
463 %{libdir}/libquadmath*.so.*
467 package libquadmath-devel
468 summary = Development files for GCC __float128 support.
470 This package contains headers for building Fortran programs using
471 REAL*16 and programs using __float128 math.
476 libquadmath = %{thisver}
480 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/quadmath.h
481 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/quadmath_weak.h
482 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libquadmath.so
487 package gcc-plugin-devel
488 summary = Support for compiling GCC plugins.
490 This package contains header files and other support files
491 for compiling GCC plugins. The GCC plugin ABI is currently
492 not stable, so plugins must be rebuilt any time GCC is updated.
499 libmpc-devel >= 0.8.1
503 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/plugin
507 package %{name}-debuginfo