# # GCC Common Support. # # This configuration file configure's, make's and install's gcc. It uses # newlib, MPFR, MPC, and GMP in a one-tree build configuration. # %include %{_configdir}/checks.cfg %ifn %{defined gcc_version_message} %error No GCC Version message defined. %endif Name: %{_target}-gcc-%{gcc_version}-newlib-%{newlib_version}-%{release} Summary: GCC v%{gcc_version} and Newlib v%{newlib_version} for target %{_target} on host %{_host} Version: %{gcc_version} Release: %{release} URL: http://gcc.gnu.org/ BuildRoot: %{_tmppath}/%{name}-root-%(%{__id_u} -n) # # Supports Candian Cross (Cxc). # %define allow_cxc # # The GCC library directory # %global _gcclibdir %{_prefix}/lib # # Prepare the source code. # %prep # gcc and optional the g++ core if separate packages %setup -q -c -n %{name}-%{version} %{?source1:%setup -q -D -T -n %{name}-%{version} -a1} cd gcc-%{gcc_version} %{?patch0:%patch0 %{?patch0_opts:%{patch0_opts}}%{!?patch0_opts:-p1}} %{?patch1:%patch1 %{?patch1_opts:%{patch1_opts}}%{!?patch1_opts:-p1}} %{?patch2:%patch2 %{?patch2_opts:%{patch2_opts}}%{!?patch2_opts:-p1}} %{?patch3:%patch3 %{?patch3_opts:%{patch3_opts}}%{!?patch3_opts:-p1}} %{?patch4:%patch4 %{?patch4_opts:%{patch4_opts}}%{!?patch4_opts:-p1}} %{?patch5:%patch5 %{?patch5_opts:%{patch5_opts}}%{!?patch5_opts:-p1}} %{?patch6:%patch6 %{?patch6_opts:%{patch6_opts}}%{!?patch6_opts:-p1}} %{?patch7:%patch7 %{?patch7_opts:%{patch7_opts}}%{!?patch7_opts:-p1}} %{?patch8:%patch8 %{?patch8_opts:%{patch8_opts}}%{!?patch8_opts:-p1}} %{?patch9:%patch9 %{?patch9_opts:%{patch9_opts}}%{!?patch9_opts:-p1}} cd .. # newlib %setup -q -D -T -n %{name}-%{version} -a10 cd newlib-%{newlib_version} %{?patch10:%patch10 %{?patch10_opts:%{patch10_opts}}%{!?patch10_opts:-p1}} %{?patch11:%patch11 %{?patch11_opts:%{patch11_opts}}%{!?patch11_opts:-p1}} %{?patch12:%patch12 %{?patch12_opts:%{patch12_opts}}%{!?patch12_opts:-p1}} %{?patch13:%patch13 %{?patch13_opts:%{patch13_opts}}%{!?patch13_opts:-p1}} %{?patch14:%patch14 %{?patch14_opts:%{patch14_opts}}%{!?patch14_opts:-p1}} %{?patch15:%patch15 %{?patch15_opts:%{patch15_opts}}%{!?patch15_opts:-p1}} %{?patch16:%patch16 %{?patch16_opts:%{patch16_opts}}%{!?patch16_opts:-p1}} %{?patch17:%patch17 %{?patch17_opts:%{patch17_opts}}%{!?patch17_opts:-p1}} %{?patch18:%patch18 %{?patch18_opts:%{patch18_opts}}%{!?patch18_opts:-p1}} %{?patch19:%patch19 %{?patch19_opts:%{patch19_opts}}%{!?patch19_opts:-p1}} cd .. # Link newlib into the gcc source tree ln -s ../newlib-%{newlib_version}/newlib gcc-%{gcc_version} # MPFR %setup -q -D -T -n %{name}-%{version} -a20 cd mpfr-%{mpfr_version} %{?patch20:%patch20 -p1} cd .. # Build MPFR one-tree style ln -s ../mpfr-%{mpfr_version} gcc-%{gcc_version}/mpfr # MPC %setup -q -D -T -n %{name}-%{version} -a21 cd mpc-%{mpc_version} %{?patch21:%patch21 -p1} cd .. # Build MPC one-tree style ln -s ../mpc-%{mpc_version} gcc-%{gcc_version}/mpc # GMP %setup -q -D -T -n %{name}-%{version} -a22 cd gmp-%{gmp_version} %{?patch22:%patch22 -p1} cd .. # Build GMP one-tree style ln -s ../gmp-%{gmp_version} gcc-%{gcc_version}/gmp echo "%{gcc_version_message}" > gcc-%{gcc_version}/gcc/DEV-PHASE # Fix timestamps cd gcc-%{gcc_version} contrib/gcc_update --touch cd .. %build if test "%{_build}" != "%{_host}" ; then build_dir="build-cxc" else build_dir="build" fi mkdir -p ${build_dir} cd ${build_dir} languages="c" %if %{enable_cxx} languages="$languages,c++" %endif if test "%{_build}" != "%{_host}" ; then CFLAGS_FOR_BUILD="-g -O2 -Wall" CC="%{_host}-gcc ${SB_OPT_FLAGS}" CXXFLAGS_FOR_BUILD="-g -O2 -Wall" CXX="%{_host}-g++ ${SB_OPT_FLAGS}" else # gcc is not ready to be compiled with -std=gnu99 CC=$(echo "%{__cc} ${SB_OPT_FLAGS}" | sed -e 's,-std=gnu99 ,,') CXX=$(echo "%{__cxx} ${SB_OPT_FLAGS}" | sed -e 's,-std=gnu99 ,,') fi export CFLAGS CFLAGS_FOR_BUILD CC CXXFLAGS_FOR_BUILD CXX ../gcc-%{gcc_version}/configure \ --prefix=%{_prefix} \ --bindir=%{_bindir} \ --exec_prefix=%{_exec_prefix} \ --includedir=%{_includedir} \ --libdir=%{_gcclibdir} \ --libexecdir=%{_libexecdir} \ --mandir=%{_mandir} \ --infodir=%{_infodir} \ --datadir=%{_datadir} \ --build=%{_build} --host=%{_host} \ --target=%{_target} \ --disable-libstdcxx-pch \ --with-gnu-as --with-gnu-ld --verbose \ --with-newlib \ --with-system-zlib \ --disable-nls --without-included-gettext \ --disable-win32-registry \ --enable-version-specific-runtime-libs \ --disable-lto \ --enable-newlib-io-c99-formats \ %{?with_iconv:--enable-newlib-iconv} \ %{?with_threads:--enable-threads}%{!?with_threads:--disable-threads} \ %{?with_plugin:--enable-plugin}%{!?with_plugin:--disable-plugin} \ %{?enable_obsolete:--enable-obsolete} \ --enable-languages="$languages" unset CFLAGS CFLAGS_FOR_BUILD CC CXXFLAGS_FOR_BUILD CXX if test "%_host" != "%_build" ; then # Bug in gcc-3.2.1: # Somehow, gcc doesn't get syslimits.h right for Cdn-Xs mkdir -p gcc/include cp ../gcc-%{gcc_version}/gcc/gsyslimits.h gcc/include/syslimits.h fi %{__make} %{?_smp_mflags} all cd .. %install %{__rmdir} $SB_BUILD_ROOT cd ${build_dir} %{__make} DESTDIR=$SB_BUILD_ROOT install cd .. # libiberty doesn't honor --libdir, but always installs to a # magically guessed _libdir %{__rmfile} ${SB_BUILD_ROOT}%{_libdir}/libiberty.a # We use the version from binutils %{__rmfile} $SB_BUILD_ROOT%{_bindir}/%{_target}-c++filt%{_exeext} # We don't ship info/dir %{__rmfile} $SB_BUILD_ROOT%{_infodir}/dir # Don't want libffi's man-pages %{__rmfile} $SB_BUILD_ROOT%{_mandir}/man3/*ffi* %testing # Add testing here. export RUNTESTFLAGS=--target_board=%{_target}-run