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
250 # Remove some GNU debugger stuff.
251 rm -vf %{BUILDROOT}%{libdir}/lib*.py
253 # Install missing header file(s) on ARM.
254 case "%{DISTRO_ARCH}" in
256 cp -vf %{DIR_APP}/gcc/config/vxworks-dummy.h \
257 ${FULLPATH}/plugin/include/config/
258 cp -vf %{DIR_APP}/gcc/config/arm/arm-cores.def \
259 ${FULLPATH}/plugin/include/config/arm/
264 mv -vf %{BUILDROOT}%{libdir}/libgomp.spec ${FULLPATH}/
265 ln -svf ../../../libgomp.so.1.0.0 ${FULLPATH}/libgomp.so
266 chmod 755 %{BUILDROOT}%{libdir}/libgomp.so.1.*
269 ln -svf ../../../libstdc++.so.6.0.17 ${FULLPATH}/libstdc++.so
272 ln -svf ../../../libmudflap.so.0.0.0 ${FULLPATH}/libmudflap.so
273 ln -svf ../../../libmudflapth.so.0.0.0 ${FULLPATH}/libmudflapth.so
274 chmod 755 %{BUILDROOT}%{libdir}/libmudflap{,th}.so.0.*
277 if [ "%{build_libquadmath}" = "1" ]; then
278 ln -svf ../../../libquadmath.so.0.0.0 ${FULLPATH}/libquadmath.so
279 chmod 755 %{BUILDROOT}%{libdir}/libquadmath.so.0.*
283 mv -vf %{BUILDROOT}%{libdir}/libitm.spec ${FULLPATH}/
284 ln -svf ../../../libitm.so.1.0.0 ${FULLPATH}/libitm.so
285 chmod 755 %{BUILDROOT}%{libdir}/libitm.so.1.*
289 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc.a
290 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc_eh.a
299 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
375 summary = GCC shared support library.
377 This package contains GCC shared support library which is needed
378 e.g. for exception handling support.
382 %{libdir}/libgcc*.so.*
387 summary = GNU Standard C++ Library.
389 The libstdc++ package contains a rewritten standard compliant GCC Standard
394 %{libdir}/libstdc++*.so.*
398 package libstdc++-devel
399 summary = Header files and libraries for C++ development.
401 This is the GNU implementation of the standard C++ libraries. This
402 package includes the header files and libraries needed for C++
403 development. This includes rewritten implementation of STL.
407 libstdc++ = %{thisver}
412 %{libdir}/libstdc++*.so
417 summary = GCC OpenMP v3.0 shared support library.
419 This package contains GCC shared support library which is needed
420 for OpenMP v3.0 support.
424 %{libdir}/libgomp*.so.*
429 summary = GCC mudflap shared support library.
431 This package contains GCC shared support library which is needed
436 %{libdir}/libmudflap*.so.*
440 package libmudflap-devel
441 summary = Development files for GCC mudflap support.
443 This package contains headers for building mudflap-instrumented programs.
445 To instrument a non-threaded program, add -fmudflap
446 option to GCC and when linking add -lmudflap, for threaded programs
447 also add -fmudflapth and -lmudflapth.
451 libmudflap = %{thisver}
455 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/mf-runtime.h
456 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libmudflap.so
457 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libmudflapth.so
461 if "%{build_libquadmath}" == "1"
463 summary = GCC __float128 shared support library.
465 This package contains GCC shared support library which is needed
466 for __float128 math support and for Fortran REAL*16 support.
470 %{libdir}/libquadmath*.so.*
474 package libquadmath-devel
475 summary = Development files for GCC __float128 support.
477 This package contains headers for building Fortran programs using
478 REAL*16 and programs using __float128 math.
483 libquadmath = %{thisver}
487 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/quadmath.h
488 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/quadmath_weak.h
489 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libquadmath.so
495 summary = The GNU Transactional Memory library.
497 This package contains the GNU Transactional Memory library
498 which is a GCC transactional memory support runtime library.
502 %{libdir}/libitm.so.1*
507 summary = The GNU Transactional Memory support.
509 This package contains headers and support files for the
510 GNU Transactional Memory library.
519 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/itm.h
520 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/itm_weak.h
521 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libitm.so
525 package gcc-plugin-devel
526 summary = Support for compiling GCC plugins.
528 This package contains header files and other support files
529 for compiling GCC plugins. The GCC plugin ABI is currently
530 not stable, so plugins must be rebuilt any time GCC is updated.
537 libmpc-devel >= 0.8.1
541 %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/plugin
545 package %{name}-debuginfo