# Copyright (C) - IPFire Development Team <info@ipfire.org> #
###############################################################################
-# Configure build to compile with cloog and ppl.
-build_cloog_ppl = 1
+# Configure build to compile with graphite
+build_graphite = 1
name = gcc
-version = 4.6.2
+version = 6.2.0
release = 3
maintainer = Michael Tremer <michael.tremer@ipfire.org>
end
# This is the at least required version of binutils.
-required_binutils_version = 2.21.51.0.8-1
+binutils_version = 2.24
source_dl = http://ftp.gnu.org/gnu/gcc/%{thisapp}/
+source_dl += ftp://gcc.gnu.org/pub/gcc/infrastructure/
sources = %{thisapp}.tar.gz
-patches
- gcc46-hack.patch0
- gcc46-c++-builtin-redecl.patch0
- gcc46-pr33763.patch0
- gcc46-libgomp-omp_h-multilib.patch0
- gcc46-libtool-no-rpath.patch0
- gcc46-cloog-dl.patch0
- gcc46-pr38757.patch0
- gcc46-no-add-needed.patch0
- gcc46-unwind-debughook-sdt.patch0
- gcc46-ppl-0.10.patch
- gcc46-Woverlength-string.patch0
- gcc46-Woverlength-string-asm.patch0
- gcc-4.6.0-piepatches-20110407.patch
-end
-
build
requires
autogen
- binutils>=%{required_binutils_version}
+ binutils >= %{binutils_version}
dejagnu
elfutils-devel
expect
+ filesystem >= 002
flex
- glibc-devel
+ glibc-devel >= 2.16
gmp-devel
libffi-devel
- mpc-devel
+ libmpc-devel >= 0.8.1
mpfr-devel
+ perl
texinfo
zlib-devel
end
- # If cloog support is enabled, we require the devel packages for build.
- if "%{build_cloog_ppl}" == "1"
- requires += cloog-ppl-devel ppl-devel
+ # If graphite support is enabled, we require the devel packages for build.
+ if "%{build_graphite}" == "1"
+ requires += isl-devel >= 0.14
end
+ # Build libquadmath (only on x86).
+ build_libquadmath = 0
+
+ # Build liblsan (only on x86_64).
+ build_liblsan = 0
+
+ # Build libtasn (only on x86_64).
+ build_libtsan = 0
+
+ # Build libubsan
+ build_libubsan = 0
+
+ # Build libcilkrts (only x86)
+ build_libcilkrts = 0
+
# A couple of configure arguments depending on the architecture and
# configuration.
configure_options =
+ make_bootstrap = profiledbootstrap
+
if "%{DISTRO_ARCH}" == "x86_64"
configure_options = --disable-multilib
+
+ build_libquadmath = 1
+ build_liblsan = 1
+ build_libtsan = 1
+ build_libubsan = 1
+ build_libcilkrts = 1
end
if "%{DISTRO_ARCH}" == "i686"
configure_options = --with-arch=%{DISTRO_ARCH} --with-tune=generic
+
+ build_libquadmath = 1
+ build_libubsan = 1
+ build_libcilkrts = 1
end
- if "%{build_cloog_ppl}" == "1"
- configure_options += --with-cloog --with-ppl
+ if "%{DISTRO_ARCH}" == "aarch64"
+ build_libubsan = 1
end
- # CFLAGS for hardening.
- HARD_CFLAGS = -DEFAULT_PIE_SSP -DEFAULT_RELRO -DEFAULT_BIND_NOW
+ if "%{DISTRO_ARCH}" == "armv7hl"
+ make_bootstrap = bootstrap
+
+ configure_options += --disable-sjlj-exceptions
+
+ configure_options += \
+ --with-tune=cortex-a8 \
+ --with-arch=armv7-a \
+ --with-float=hard \
+ --with-fpu=vfpv3-d16 \
+ --with-abi=aapcs-linux
+
+ build_libubsan = 1
+ end
+
+ if "%{DISTRO_ARCH}" == "armv5tel"
+ make_bootstrap = bootstrap
+
+ configure_options += --disable-sjlj-exceptions
+ configure_options += --with-float=soft
+
+ build_libubsan = 1
+ end
+
+ if "%{build_graphite}" == "1"
+ configure_options += \
+ --with-isl
+ end
prepare_cmds
mkdir -v %{DIR_SRC}/gcc-build
sed -i gcc/Makefile.in \
-e "s/-fno-exceptions/& -fno-asynchronous-unwind-tables/"
- # we want to be able to control the pie patch logic via something other
- # than ALL_CFLAGS...
- sed -i gcc/Makefile.in \
- -e '/^ALL_CFLAGS/iHARD_CFLAGS = ' \
- -e 's|^ALL_CFLAGS = |ALL_CFLAGS = $(HARD_CFLAGS) |'
-
- # Enable the GCC hardening by default.
- sed -i gcc/Makefile.in \
- -e "s|^HARD_CFLAGS = |HARD_CFLAGS = %{HARD_CFLAGS} |"
-
- # Compile the compiler with -fPIC as well.
- sed -i gcc/Makefile.in \
- -e "s|^ESP_NOPIE_CFLAGS = .*|ESP_NOPIE_CFLAGS =|"
-
- ./contrib/gcc_update --touch
+ #./contrib/gcc_update --touch
end
+ export CC=gcc
+ export CXX=g++
+
build
cd %{DIR_SRC}/gcc-build
# Modify CFLAGS
- OPT_FLAGS="%{CFLAGS}"
CFLAGS="%{CFLAGS}"
CFLAGS=$(echo ${CFLAGS} | sed -e 's/\(-Wp,\)\?-D_FORTIFY_SOURCE=[12]//g')
+ CFLAGS=$(echo ${CFLAGS} | sed -e 's/-Werror=format-security//g')
CFLAGS=$(echo ${CFLAGS} | sed -e 's/-m64//g;s/-m32//g;s/-m31//g')
- CFLAGS=$(echo ${CFLAGS} | sed -e 's/-march=i.86//g')
- #CFLAGS=$(echo ${CFLAGS} | sed -e 's/ -pipe / /g')
+ CFLAGS=$(echo ${CFLAGS} | sed -e 's/-mfpmath=sse/-mfpmath=sse -msse2/g')
+ CFLAGS=$(echo ${CFLAGS} | sed -e 's/-march=i.86//g')
+ CFLAGS=$(echo ${CFLAGS} | sed -e 's/ -pipe / /g')
CFLAGS=$(echo "${CFLAGS}" | sed -e 's/[[:blank:]]\+/ /g')
CXXFLAGS=$(echo ${CFLAGS} | sed -e 's/ -Wall//g')
+ CXXFLAGS=$(echo ${CXXFLAGS} | sed -e 's/ -fexceptions / /g')
+ #CXXFLAGS=$(echo ${CXXFLAGS} | sed -e 's/ -Werror=format-security / -Wformat -Werror=format-security /g')
+
+ case "${CFLAGS}" in
+ *-fasynchronous-unwind-tables*)
+ sed -i -e "s/-fno-exceptions /-fno-exceptions -fno-asynchronous-unwind-tables/" \
+ ../%{thisapp}/Makefile.in
+ ;;
+ esac
CFLAGS="${CFLAGS}" \
CXXFLAGS="${CXXFLAGS}" \
../%{thisapp}/configure \
--build=%{DISTRO_BUILDTARGET} \
--prefix=/usr \
- --libexecdir=/usr/lib \
- --mandir=/usr/share/man \
+ --libdir=%{libdir} \
+ --libexecdir=%{libdir} \
+ --mandir=%{mandir} \
+ --with-boot-ldflags="%{LDFLAGS}" \
--enable-esp \
--enable-shared \
--enable-threads=posix \
--enable-languages=c,c++,lto \
--enable-bootstrap \
--enable-checking=release \
+ --enable-default-pie \
--disable-werror \
--disable-libssp \
- --disable-static \
--with-system-zlib \
--with-bugurl=http://bugtracker.ipfire.org \
--disable-libunwind-exceptions \
--enable-gnu-unique-object \
--enable-linker-build-id \
+ --with-linker-hash-style=gnu \
+ --enable-plugin \
+ --enable-initfini-array \
+ --disable-libgcj \
+ --enable-gnu-indirect-function \
%{configure_options}
+ # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58012
+ # XXX disabled flags: --disable-static
+
# GCC does not support a parallel build.
- make profiledbootstrap BOOT_CFLAGS="${OPT_FLAGS}" #%{PARALLELISMFLAGS}
+ make %{make_bootstrap} BOOT_CFLAGS="${CFLAGS}"
+
+ # Generate man pages.
+ perl -pi -e 's/head3/head2/' ../contrib/texi2pod.pl
+ for i in %{DIR_APP}/gcc/doc/*.texi; do
+ cp -a $i $i.orig; sed 's/ftable/table/' $i.orig > $i
+ done
+ make -C gcc generated-manpages
+ for i in %{DIR_APP}/gcc/doc/*.texi; do mv -f $i.orig $i; done
end
#test
- # cd %{DIR_SRC}/gcc-build && make check
+ # cd %{DIR_SRC}/gcc-build && make -k check || true
# cd %{DIR_APP} && ./contrib/test_summary
#end
cd %{DIR_SRC}/gcc-build
make install DESTDIR=%{BUILDROOT}
- mkdir -pv %{BUILDROOT}/lib
- ln -sfv ../usr/bin/cpp %{BUILDROOT}/lib/cpp
+ # Check if the installation path exists.
+ FULLPATH="%{BUILDROOT}%{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}"
+ [ -d "${FULLPATH}" ] || exit 1
+
+ mkdir -pv %{BUILDROOT}%{prefix}/lib
+ ln -sfv ../bin/cpp %{BUILDROOT}%{prefix}/lib/cpp
ln -sfv gcc %{BUILDROOT}/usr/bin/cc
- # Move libgcc_s to /lib
- mv -vf %{BUILDROOT}/usr/lib/libgcc_s.so.1 %{BUILDROOT}/lib/
- ln -svf ../../lib/libgcc_s.so.1 %{BUILDROOT}/usr/lib/libgcc_s.so
+ # Fix libgcc_s symlinks.
+ rm -f ${FULLPATH}/libgcc_s.so %{BUILDROOT}%{libdir}/libgcc_s.so
+ case "%{DISTRO_ARCH}" in
+ arm*)
+ cat <<EOF >${FULLPATH}/libgcc_s.so
+ /* GNU ld script
+ Use the shared library, but some functions are only in
+ the static library, so try that secondarily. */
+ OUTPUT_FORMAT(elf32-littlearm)
+ GROUP ( %{libdir}/libgcc_s.so.1 libgcc.a )
+ EOF
+ ;;
+ *)
+ ln -svf ../../../../..%{libdir}/libgcc_s.so.1 ${FULLPATH}/libgcc_s.so
+ ;;
+ esac
+ chmod 755 %{BUILDROOT}%{libdir}/libgcc_s.so.1
# Remove some GNU debugger stuff.
- rm -vf %{BUILDROOT}/usr/lib/lib*.py
+ rm -vf %{BUILDROOT}%{libdir}/lib*.py
+
+ # Install missing header file(s) on ARM.
+ case "%{DISTRO_ARCH}" in
+ arm*)
+ cp -vf %{DIR_APP}/gcc/config/vxworks-dummy.h \
+ ${FULLPATH}/plugin/include/config/
+ cp -vf %{DIR_APP}/gcc/config/arm/arm-cores.def \
+ ${FULLPATH}/plugin/include/config/arm/
+ ;;
+ esac
+
+ # libgomp
+ mv -vf %{BUILDROOT}%{libdir}/libgomp.spec ${FULLPATH}/
+ ln -svf ../../../libgomp.so.1.0.0 ${FULLPATH}/libgomp.so
+ chmod 755 %{BUILDROOT}%{libdir}/libgomp.so.1.*
+
+ # libstdc++
+ ln -svf ../../../libstdc++.so.6.0.22 ${FULLPATH}/libstdc++.so
+ mv -vf %{BUILDROOT}%{libdir}/lib{std,sup}c++.a ${FULLPATH}
+
+ # libquadmath
+ if [ "%{build_libquadmath}" = "1" ]; then
+ ln -svf ../../../libquadmath.so.0.0.0 ${FULLPATH}/libquadmath.so
+ chmod 755 %{BUILDROOT}%{libdir}/libquadmath.so.0.*
+ fi
+
+ # libitm
+ mv -vf %{BUILDROOT}%{libdir}/libitm.spec ${FULLPATH}/
+ ln -svf ../../../libitm.so.1.0.0 ${FULLPATH}/libitm.so
+ chmod 755 %{BUILDROOT}%{libdir}/libitm.so.1.*
+
+ # liblsan
+ if [ "%{build_liblsan}" = "1" ]; then
+ ln -svf ../../../liblsan.so.0.0.0 ${FULLPATH}/liblsan.so
+ chmod 755 %{BUILDROOT}%{libdir}/liblsan.so.*
+ fi
+
+ # libtsan
+ if [ "%{build_libtsan}" = "1" ]; then
+ ln -svf ../../../libtsan.so.0.0.0 ${FULLPATH}/libtsan.so
+ chmod 755 %{BUILDROOT}%{libdir}/libtsan.so.*
+ fi
+
+ # libubsan
+ if [ "%{build_libubsan}" = "1" ]; then
+ ln -svf ../../../libubsan.so.0.0.0 ${FULLPATH}/libubsan.so
+ chmod 755 %{BUILDROOT}%{libdir}/libubsan.so.*
+ fi
+
+ # libcilkrts
+ if [ "%{build_libcilkrts}" = "1" ]; then
+ ln -svf ../../../libcilkrts.so.5.0.0 ${FULLPATH}/libcilkrts.so
+ chmod 755 %{BUILDROOT}%{libdir}/libcilkrts.so.5.*
+ fi
end
keep_libraries
- /usr/lib/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc.a
- /usr/lib/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc_eh.a
+ %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc.a
+ %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libgcc_eh.a
+ %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libstdc++.a
+ %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libsupc++.a
end
end
groups += Build
requires
- binutils>=%{required_binutils_version}
+ binutils >= %{binutils_version}
+ filesystem >= 002
+ glibc >= 2.16
glibc-devel
gmp-devel
- libgcc-devel
+ cpp = %{thisver}
+ libgcc = %{thisver}
+ libgomp = %{thisver}
end
- if "%{build_cloog_ppl}" == "1"
- requires += cloog-ppl>=0.15
- end
+ # We do not ship libgcc-devel anymore.
+ provides += libgcc-devel = %{thisver}
+ obsoletes += libgcc-devel < %{thisver}
end
- # XXX add package descriptions
-
package %{name}-c++
- requires = gcc=%{thisver} libstdc++-devel
+ summary = C++ support for GCC.
+ description
+ This package adds C++ support to the GNU Compiler Collection.
+ It includes support for most of the current C++ specification,
+ including templates and exception handling.
+ end
+
+ requires
+ gcc = %{thisver}
+ libstdc++ = %{thisver}
+ libstdc++-devel = %{thisver}
+ end
files
/usr/bin/*++
- /usr/lib/gcc/*/*/cc1plus
+ %{libdir}/gcc/*/*/cc1plus
/usr/share/man/man*/*++*
end
end
- package libgcc
+ package cpp
+ summary = The C Preprocessor.
+ description
+ Cpp is the GNU C-Compatible Compiler Preprocessor.
+ Cpp is a macro processor which is used automatically
+ by the C compiler to transform your program before actual
+ compilation. It is called a macro processor because it allows
+ you to define macros, abbreviations for longer
+ constructs.
+
+ The C preprocessor provides four separate functionalities: the
+ inclusion of header files (files of declarations that can be
+ substituted into your program); macro expansion (you can define macros,
+ and the C preprocessor will replace the macros with their definitions
+ throughout the program); conditional compilation (using special
+ preprocessing directives, you can include or exclude parts of the
+ program according to various conditions); and line control (if you use
+ a program to combine or rearrange source files into an intermediate
+ file which is then compiled, you can use line control to inform the
+ compiler about where each source line originated).
+
+ You should install this package if you are a C programmer and you use
+ macros.
+ end
+ group = Development/Languages
+
files
- /lib/libgcc*.so.*
+ %{prefix}/lib/cpp
+ %{bindir}/cpp
+ %{mandir}/man1/cpp.1*
+ %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/cc1
end
+
+ provides = /lib/cpp
+ requires = gcc-c++ = %{thisver}
end
- package libgcc-devel
- requires = libgcc=%{thisver}
+ package libgcc
+ summary = GCC shared support library.
+ description
+ This package contains GCC shared support library which is needed
+ e.g. for exception handling support.
+ end
files
- /usr/lib/libgcc*.so
+ %{libdir}/libgcc*.so.*
+ end
+
+ obsoletes
+ libmudflap
+ libmudflap-devel
end
end
package libstdc++
+ summary = GNU Standard C++ Library.
+ description
+ The libstdc++ package contains a rewritten standard compliant GCC Standard
+ C++ Library.
+ end
+
files
- /usr/lib/libstdc++*.so.*
+ %{libdir}/libstdc++*.so.*
end
end
package libstdc++-devel
+ summary = Header files and libraries for C++ development.
+ description
+ This is the GNU implementation of the standard C++ libraries. This
+ package includes the header files and libraries needed for C++
+ development. This includes rewritten implementation of STL.
+ end
+
+ requires
+ libstdc++ = %{thisver}
+ end
+
files
- /usr/include/c++
- /usr/lib/libstdc++*.so
+ %{includedir}/c++
+ %{libdir}/libstdc++*.so
end
end
- package libgomp
+ package libstdc++-static
+ summary = Static libraries for the GNU standard C++ library
+ description = %{summary}
+
+ requires
+ libstdc++-devel = %{thisver}
+ end
+
files
- /usr/lib/libgomp*.so.*
+ %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libstdc++.a
+ %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libsupc++.a
end
end
package libgomp
+ summary = GCC OpenMP v3.0 shared support library.
+ description
+ This package contains GCC shared support library which is needed
+ for OpenMP v3.0 support.
+ end
+
files
- /usr/lib/libgomp*.so
- /usr/lib/libgomp.spec
+ %{libdir}/libgomp*.so.*
end
end
- package libmudflap
+ if "%{build_libquadmath}" == "1"
+ package libquadmath
+ summary = GCC __float128 shared support library.
+ description
+ This package contains GCC shared support library which is needed
+ for __float128 math support and for Fortran REAL*16 support.
+ end
+
+ files
+ %{libdir}/libquadmath*.so.*
+ end
+ end
+
+ package libquadmath-devel
+ summary = Development files for GCC __float128 support.
+ description
+ This package contains headers for building Fortran programs using
+ REAL*16 and programs using __float128 math.
+ end
+
+ requires
+ gcc = %{thisver}
+ libquadmath = %{thisver}
+ end
+
+ files
+ %{libdir}/libquadmath.so
+ %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/quadmath.h
+ %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/quadmath_weak.h
+ %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libquadmath.so
+ end
+ end
+ end
+
+ package libitm
+ summary = The GNU Transactional Memory library.
+ description
+ This package contains the GNU Transactional Memory library
+ which is a GCC transactional memory support runtime library.
+ end
+
files
- /usr/lib/libmudflap*.so.*
+ %{libdir}/libitm.so.1*
end
end
- package libmudflap-devel
+ package libitm-devel
+ summary = The GNU Transactional Memory support.
+ description
+ This package contains headers and support files for the
+ GNU Transactional Memory library.
+ end
+
+ requires
+ gcc = %{thisver}
+ libitm = %{thisver}
+ end
+
files
- /usr/lib/libmudflap*.so
+ %{libdir}/libitm.so
+ %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/itm.h
+ %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/include/itm_weak.h
+ %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/libitm.so
end
end
- package libquadmath
+ package libatomic
+ summary = The GNU Atomic library
+ description
+ This package contains the GNU Atomic library which is a
+ GCC support runtime library for atomisc operations not
+ supported by hardware.
+ end
+
files
- /usr/lib/libquadmath*.so.*
+ %{libdir}/libatomic.so.1*
end
end
- package libquadmath-devel
+ package libasan
+ summary = The Address Sanitizer runtime library
+ description
+ This package contains the Address Sanitizer library
+ which is used for -fsanitize=address instrumented programs.
+ end
+
files
- /usr/lib/libquadmath*.so
+ %{libdir}/libasan.so.2*
end
end
+
+ if "%{build_libtsan}" == "1"
+ package libtsan
+ summary = The Thread Sanitizer runtime library
+ description
+ This package contains the Thread Sanitizer library
+ which is used for -fsanitize=thread instrumented programs.
+ end
+
+ files
+ %{libdir}/libtsan.so.0*
+ end
+ end
+ end
+
+ if "%{build_libubsan}" == "1"
+ package libubsan
+ summary = The Undefined Behavior Sanitizer runtime library
+ description
+ This package contains the Undefined Behavior Sanitizer library
+ which is used for -fsanitize=undefined instrumented programs.
+ end
+
+ files
+ %{libdir}/libubsan.so.0*
+ end
+ end
+ end
+
+ if "%{build_liblsan}" == "1"
+ package liblsan
+ summary = The Leak Sanitizer runtime library
+ description
+ This package contains the Leak Sanitizer library
+ which is used for -fsanitize=leak instrumented programs.
+ end
+
+ files
+ %{libdir}/liblsan.so.0*
+ end
+ end
+ end
+
+ if "%{build_libcilkrts}" == "1"
+ package libcilkrts
+ summary = The Cilk+ runtime library
+ description
+ This package contains the Cilk+ runtime library.
+ end
+
+ files
+ %{libdir}/libcilkrts.so.5*
+ end
+ end
+ end
+
+ package gcc-plugin-devel
+ summary = Support for compiling GCC plugins.
+ description
+ This package contains header files and other support files
+ for compiling GCC plugins. The GCC plugin ABI is currently
+ not stable, so plugins must be rebuilt any time GCC is updated.
+ end
+
+ requires
+ gcc = %{thisver}
+ gmp-devel >= 4.1.2-8
+ mpfr-devel >= 2.2.1
+ libmpc-devel >= 0.8.1
+ end
+
+ files
+ %{libdir}/gcc/%{DISTRO_BUILDTARGET}/%{version}/plugin
+ end
+ end
+
+ package %{name}-debuginfo
+ template DEBUGINFO
+ end
end