630 lines
16 KiB
Plaintext
630 lines
16 KiB
Plaintext
###############################################################################
|
|
# IPFire.org - An Open Source Firewall Solution #
|
|
# Copyright (C) - IPFire Development Team <info@ipfire.org> #
|
|
###############################################################################
|
|
|
|
# Configure build to compile with graphite
|
|
build_graphite = 1
|
|
|
|
name = gcc
|
|
version = 9.1.0
|
|
release = 1
|
|
|
|
maintainer = Michael Tremer <michael.tremer@ipfire.org>
|
|
groups = Development/Compilers
|
|
url = http://gcc.gnu.org/
|
|
license = GPLv3+ and GPLv2+ with exceptions
|
|
summary = Various compilers (C, C++, Objective-C, Java, ...).
|
|
|
|
description
|
|
The gcc package contains the GNU Compiler Collection. \
|
|
You'll need this package in order to compile C code.
|
|
end
|
|
|
|
# This is the at least required version of binutils.
|
|
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
|
|
|
|
build
|
|
requires
|
|
autogen
|
|
binutils >= %{binutils_version}
|
|
dejagnu
|
|
elfutils-devel
|
|
expect
|
|
filesystem >= 002
|
|
flex
|
|
glibc-devel >= 2.16
|
|
gmp-devel
|
|
libffi-devel
|
|
libmpc-devel >= 0.8.1
|
|
mpfr-devel
|
|
perl
|
|
texinfo
|
|
zlib-devel
|
|
end
|
|
|
|
# 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
|
|
|
|
# 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
|
|
end
|
|
|
|
if "%{DISTRO_ARCH}" == "i686"
|
|
configure_options = --with-arch=%{DISTRO_ARCH} --with-tune=generic
|
|
|
|
build_libquadmath = 1
|
|
build_libubsan = 1
|
|
end
|
|
|
|
if "%{DISTRO_ARCH}" == "aarch64"
|
|
build_libubsan = 1
|
|
end
|
|
|
|
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
|
|
|
|
# Remove unneeded features that will save some compile time
|
|
rm -rf lib{gfortran,java,objc} gcc/{fortran,java,objc,objcp}
|
|
|
|
# Apply a sed substitution that will suppress the installation of
|
|
# libiberty.a. The version of libiberty.a provided by Binutils will be used
|
|
# instead:
|
|
sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
|
|
|
|
# Branding gcc
|
|
echo "%{DISTRO_NAME} %{version}-%{release}" > gcc/DEV-PHASE
|
|
|
|
# Libgomp uses -Werror regardless of --disable-werror, and this will cause a
|
|
# build failure when -D_FORTIFY_SOURCE=2 causes build time warnings:
|
|
sed -e "s/-Werror//" -i libgomp/configure
|
|
|
|
# The fixincludes script is known to occasionally erroneously attempt to
|
|
# "fix" the system headers installed so far. As the headers up to this point
|
|
# are known to not require fixing, issue the following command to prevent
|
|
# the fixincludes script from running:
|
|
sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
|
|
|
|
sed -i gcc/Makefile.in \
|
|
-e "s/-fno-exceptions/& -fno-asynchronous-unwind-tables/"
|
|
|
|
#./contrib/gcc_update --touch
|
|
end
|
|
|
|
export CC=gcc
|
|
export CXX=g++
|
|
|
|
build
|
|
cd %{DIR_SRC}/gcc-build
|
|
|
|
# Modify 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/-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}" \
|
|
XCFLAGS="${CFLAGS}" \
|
|
TCFLAGS="${CFLAGS}" \
|
|
../%{thisapp}/configure \
|
|
--build=%{DISTRO_BUILDTARGET} \
|
|
--prefix=/usr \
|
|
--libdir=%{libdir} \
|
|
--libexecdir=%{libdir} \
|
|
--mandir=%{mandir} \
|
|
--with-boot-ldflags="%{LDFLAGS}" \
|
|
--enable-esp \
|
|
--enable-shared \
|
|
--enable-threads=posix \
|
|
--enable-__cxa_atexit \
|
|
--enable-clocale=gnu \
|
|
--enable-languages=c,c++,lto \
|
|
--enable-bootstrap \
|
|
--enable-checking=release \
|
|
--enable-default-pie \
|
|
--disable-werror \
|
|
--disable-libssp \
|
|
--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 %{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 -k check || true
|
|
# cd %{DIR_APP} && ./contrib/test_summary
|
|
#end
|
|
|
|
install
|
|
cd %{DIR_SRC}/gcc-build
|
|
make install DESTDIR=%{BUILDROOT}
|
|
|
|
# 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
|
|
|
|
# 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}%{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.26 ${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.1.0.0 ${FULLPATH}/libubsan.so
|
|
chmod 755 %{BUILDROOT}%{libdir}/libubsan.so.*
|
|
fi
|
|
end
|
|
|
|
keep_libraries
|
|
%{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
|
|
|
|
packages
|
|
package %{name}
|
|
groups += Build
|
|
|
|
requires
|
|
binutils >= %{binutils_version}
|
|
filesystem >= 002
|
|
glibc >= 2.16
|
|
glibc-devel
|
|
gmp-devel
|
|
cpp = %{thisver}
|
|
libgcc = %{thisver}
|
|
libgomp = %{thisver}
|
|
end
|
|
|
|
# We do not ship libgcc-devel anymore.
|
|
provides += libgcc-devel = %{thisver}
|
|
obsoletes += libgcc-devel < %{thisver}
|
|
end
|
|
|
|
package %{name}-c++
|
|
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/*++
|
|
%{libdir}/gcc/*/*/cc1plus
|
|
/usr/share/man/man*/*++*
|
|
end
|
|
end
|
|
|
|
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
|
|
%{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
|
|
summary = GCC shared support library.
|
|
description
|
|
This package contains GCC shared support library which is needed
|
|
e.g. for exception handling support.
|
|
end
|
|
|
|
files
|
|
%{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
|
|
%{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
|
|
%{includedir}/c++
|
|
%{libdir}/libstdc++*.so
|
|
end
|
|
end
|
|
|
|
package libstdc++-static
|
|
summary = Static libraries for the GNU standard C++ library
|
|
description = %{summary}
|
|
|
|
requires
|
|
libstdc++-devel = %{thisver}
|
|
end
|
|
|
|
files
|
|
%{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
|
|
%{libdir}/libgomp*.so.*
|
|
end
|
|
end
|
|
|
|
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
|
|
%{libdir}/libitm.so.*
|
|
end
|
|
end
|
|
|
|
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
|
|
%{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 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
|
|
%{libdir}/libatomic.so.*
|
|
end
|
|
end
|
|
|
|
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
|
|
%{libdir}/libasan.so.*
|
|
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.*
|
|
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.*
|
|
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.*
|
|
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
|