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.0-piepatches-20110407.patch
48 binutils>=%{required_binutils_version}
62 # If cloog support is enabled, we require the devel packages for build.
63 if "%{build_cloog_ppl}" == "1"
64 requires += cloog-ppl-devel ppl-devel
67 # Build libquadmath (only on 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
82 if "%{DISTRO_ARCH}" == "i686"
83 configure_options = --with-arch=%{DISTRO_ARCH} --with-tune=generic
88 if "%{DISTRO_ARCH}" == "armv5tel"
89 make_bootstrap = bootstrap
91 configure_options += --disable-sjlj-exceptions
92 configure_options += --with-float=soft
95 if "${DISTRO_ARCH}" == "armv7hl"
96 configure_options += --disable-sjlj-exceptions
98 configure_options += \
99 --with-cpu=cortex-a8 \
100 --with-tune=cortex-a8 \
101 --with-arch=armv7-a \
103 --with-fpu=vfpv3-d16 \
104 --with-abi=aapcs-linux
107 if "%{build_cloog_ppl}" == "1"
108 configure_options += --with-cloog --with-ppl
111 # CFLAGS for hardening.
112 HARD_CFLAGS = -DEFAULT_PIE_SSP -DEFAULT_RELRO -DEFAULT_BIND_NOW
115 mkdir -v %{DIR_SRC}/gcc-build
117 # Remove unneeded features that will save some compile time
118 rm -rf lib{gfortran,java,objc} gcc/{fortran,java,objc,objcp}
120 # Apply a sed substitution that will suppress the installation of
121 # libiberty.a. The version of libiberty.a provided by Binutils will be used
123 sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
126 echo "%{DISTRO_NAME} %{version}-%{release}" > gcc/DEV-PHASE
128 # Libgomp uses -Werror regardless of --disable-werror, and this will cause a
129 # build failure when -D_FORTIFY_SOURCE=2 causes build time warnings:
130 sed -e "s/-Werror//" -i libgomp/configure
132 # The fixincludes script is known to occasionally erroneously attempt to
133 # "fix" the system headers installed so far. As the headers up to this point
134 # are known to not require fixing, issue the following command to prevent
135 # the fixincludes script from running:
136 sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
138 sed -i gcc/Makefile.in \
139 -e "s/-fno-exceptions/& -fno-asynchronous-unwind-tables/"
141 # we want to be able to control the pie patch logic via something other
143 sed -i gcc/Makefile.in \
144 -e '/^ALL_CFLAGS/iHARD_CFLAGS = ' \
145 -e 's|^ALL_CFLAGS = |ALL_CFLAGS = $(HARD_CFLAGS) |'
147 # Enable the GCC hardening by default.
148 sed -i gcc/Makefile.in \
149 -e "s|^HARD_CFLAGS = |HARD_CFLAGS = %{HARD_CFLAGS} |"
151 # Compile the compiler with -fPIC as well.
152 sed -i gcc/Makefile.in \
153 -e "s|^ESP_NOPIE_CFLAGS = .*|ESP_NOPIE_CFLAGS =|"
155 # Default to -gdwarf-4 -fno-debug-types-section rather than -gdwarf-2
156 sed -i gcc/common.opt \
157 -e '/UInteger Var(dwarf_version)/s/Init(2)/Init(4)/' \
158 -e '/flag_debug_types_section/s/Init(1)/Init(0)/' \
159 -e '/dwarf_record_gcc_switches/s/Init(0)/Init(1)/' \
160 -e 's/\(may be either 2, 3 or 4; the default version is \)2\./\14./'
162 ./contrib/gcc_update --touch
166 cd %{DIR_SRC}/gcc-build
170 CFLAGS=$(echo ${CFLAGS} | sed -e 's/\(-Wp,\)\?-D_FORTIFY_SOURCE=[12]//g')
171 CFLAGS=$(echo ${CFLAGS} | sed -e 's/-m64//g;s/-m32//g;s/-m31//g')
172 CFLAGS=$(echo ${CFLAGS} | sed -e 's/-march=i.86//g')
173 CFLAGS=$(echo ${CFLAGS} | sed -e 's/ -pipe / /g')
174 CFLAGS=$(echo "${CFLAGS}" | sed -e 's/[[:blank:]]\+/ /g')
175 CXXFLAGS=$(echo ${CFLAGS} | sed -e 's/ -Wall//g')
178 CXXFLAGS="${CXXFLAGS}" \
179 XCFLAGS="${CFLAGS}" \
180 TCFLAGS="${CFLAGS}" \
181 ../%{thisapp}/configure \
182 --build=%{DISTRO_BUILDTARGET} \
185 --libexecdir=%{libdir} \
186 --mandir=/usr/share/man \
189 --enable-threads=posix \
190 --enable-__cxa_atexit \
191 --enable-clocale=gnu \
192 --enable-languages=c,c++,lto \
194 --enable-checking=release \
199 --with-bugurl=http://bugtracker.ipfire.org \
200 --disable-libunwind-exceptions \
201 --enable-gnu-unique-object \
202 --enable-linker-build-id \
205 # GCC does not support a parallel build.
206 make %{make_bootstrap} BOOT_CFLAGS="${CFLAGS}"
210 # cd %{DIR_SRC}/gcc-build && make check
211 # cd %{DIR_APP} && ./contrib/test_summary
215 cd %{DIR_SRC}/gcc-build
216 make install DESTDIR=%{BUILDROOT}
218 # Check if the installation path exists.
219 FULLPATH="%{BUILDROOT}%{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}"
220 [ -d "${FULLPATH}" ] || exit 1
222 mkdir -pv %{BUILDROOT}/%{lib}
223 ln -sfv ../usr/bin/cpp %{BUILDROOT}/%{lib}/cpp
224 ln -sfv gcc %{BUILDROOT}/usr/bin/cc
226 # Move libgcc_s to /lib
227 rm -f ${FULLPATH}/libgcc_s.so %{BUILDROOT}%{libdir}/libgcc_s.so
228 mkdir -pv %{BUILDROOT}/%{lib}
229 mv -vf %{BUILDROOT}%{libdir}/libgcc_s.so.1 %{BUILDROOT}/%{lib}/
230 case "%{DISTRO_ARCH}" in
232 cat <<EOF >${FULLPATH}/libgcc_s.so
234 Use the shared library, but some functions are only in
235 the static library, so try that secondarily. */
236 OUTPUT_FORMAT(elf32-littlearm)
237 GROUP ( /%{lib}/libgcc_s.so.1 libgcc.a )
241 ln -svf ../../../../../%{lib}/libgcc_s.so.1 ${FULLPATH}/libgcc_s.so
245 # Remove some GNU debugger stuff.
246 rm -vf %{BUILDROOT}%{libdir}/lib*.py
249 mv -vf %{BUILDROOT}%{libdir}/libgomp.spec ${FULLPATH}/
250 ln -svf ../../../libgomp.so.1.0.0 ${FULLPATH}/libgomp.so
251 chmod 755 %{BUILDROOT}%{libdir}/libgomp.so.1.*
254 ln -svf ../../../libstdc++.so.6.0.16 ${FULLPATH}/libstdc++.so
257 ln -svf ../../../libmudflap.so.0.0.0 ${FULLPATH}/libmudflap.so
258 ln -svf ../../../libmudflapth.so.0.0.0 ${FULLPATH}/libmudflapth.so
259 chmod 755 %{BUILDROOT}%{libdir}/libmudflap{,th}.so.0.*
262 if [ "%{build_libquadmath}" = "1" ]; then
263 ln -svf ../../../libquadmath.so.0.0.0 ${FULLPATH}/libquadmath.so
264 chmod 755 %{BUILDROOT}%{libdir}/libquadmath.so.0.*
269 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc.a
270 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc_eh.a
279 binutils>=%{required_binutils_version}
287 # We do not ship libgcc-devel anymore.
288 provides += libgcc-devel=%{thisver}
289 obsoletes += libgcc-devel<%{thisver}
291 if "%{build_cloog_ppl}" == "1"
292 requires += cloog-ppl>=0.15
297 summary = C++ support for GCC.
299 This package adds C++ support to the GNU Compiler Collection.
300 It includes support for most of the current C++ specification,
301 including templates and exception handling.
307 libstdc++-devel=%{thisver}
312 %{libdir}/gcc/*/*/cc1plus
313 /usr/share/man/man*/*++*
318 summary = The C Preprocessor.
320 Cpp is the GNU C-Compatible Compiler Preprocessor.
321 Cpp is a macro processor which is used automatically
322 by the C compiler to transform your program before actual
323 compilation. It is called a macro processor because it allows
324 you to define macros, abbreviations for longer
327 The C preprocessor provides four separate functionalities: the
328 inclusion of header files (files of declarations that can be
329 substituted into your program); macro expansion (you can define macros,
330 and the C preprocessor will replace the macros with their definitions
331 throughout the program); conditional compilation (using special
332 preprocessing directives, you can include or exclude parts of the
333 program according to various conditions); and line control (if you use
334 a program to combine or rearrange source files into an intermediate
335 file which is then compiled, you can use line control to inform the
336 compiler about where each source line originated).
338 You should install this package if you are a C programmer and you use
341 group = Development/Languages
346 /usr/share/man/man1/cpp.1*
347 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/cc1
352 summary = GCC shared support library.
354 This package contains GCC shared support library which is needed
355 e.g. for exception handling support.
364 summary = GNU Standard C++ Library.
366 The libstdc++ package contains a rewritten standard compliant GCC Standard
371 %{libdir}/libstdc++*.so.*
375 package libstdc++-devel
376 summary = Header files and libraries for C++ development.
378 This is the GNU implementation of the standard C++ libraries. This
379 package includes the header files and libraries needed for C++
380 development. This includes rewritten implementation of STL.
389 %{libdir}/libstdc++*.so
394 summary = GCC OpenMP v3.0 shared support library.
396 This package contains GCC shared support library which is needed
397 for OpenMP v3.0 support.
401 %{libdir}/libgomp*.so.*
406 summary = GCC mudflap shared support library.
408 This package contains GCC shared support library which is needed
413 %{libdir}/libmudflap*.so.*
417 package libmudflap-devel
418 summary = Development files for GCC mudflap support.
420 This package contains headers for building mudflap-instrumented programs.
422 To instrument a non-threaded program, add -fmudflap
423 option to GCC and when linking add -lmudflap, for threaded programs
424 also add -fmudflapth and -lmudflapth.
428 libmudflap=%{thisver}
432 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/mf-runtime.h
433 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libmudflap.so
434 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libmudflapth.so
438 if "%{build_libquadmath}" == "1"
440 summary = GCC __float128 shared support library.
442 This package contains GCC shared support library which is needed
443 for __float128 math support and for Fortran REAL*16 support.
447 %{libdir}/libquadmath*.so.*
451 package libquadmath-devel
452 summary = Development files for GCC __float128 support.
454 This package contains headers for building Fortran programs using
455 REAL*16 and programs using __float128 math.
460 libquadmath=%{thisver}
464 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/quadmath.h
465 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/quadmath_weak.h
466 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libquadmath.so
471 package gcc-plugin-devel
472 summary = Support for compiling GCC plugins.
474 This package contains header files and other support files
475 for compiling GCC plugins. The GCC plugin ABI is currently
476 not stable, so plugins must be rebuilt any time GCC is updated.
487 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/plugin
491 package %{name}-debuginfo